diff --git a/.allowlist b/.allowlist index cfa2c3f67..79c59000d 100644 --- a/.allowlist +++ b/.allowlist @@ -30,6 +30,7 @@ lpd .lpdignore tools docs-guide +operations tasks tests ai-tools diff --git a/.codex/task-contract.yaml b/.codex/task-contract.yaml index 8d923a609..9d7423e88 100644 --- a/.codex/task-contract.yaml +++ b/.codex/task-contract.yaml @@ -1,40 +1,42 @@ -task_id: 20260317 -branch: codex/20260317-merge-readiness-style-root-cause -base_branch: docs-v2-dev +task_id: 20260403 +branch: codex/20260403-contracts-docs-v2-migration +base_branch: docs-v2 scope_in: - .codex/ + - .github/ + - .allowlist + - .vscode/ - docs-guide/ - docs-index.json - - snippets/components/layout/ - - snippets/components/primitives/divider.jsx - - snippets/data/gateways/ - - tasks/reports/merge-readiness/ - - tests/unit/style-guide.test.js + - docs.json + - operations/ + - snippets/components/displays/ + - snippets/components/integrators/ + - snippets/components/wrappers/ + - snippets/composables/pages/canonical/ + - snippets/data/contract-addresses/ + - tasks/reports/ + - tests/ - tools/scripts/ - v2/about/ - - v2/cn/resources/documentation-guide/component-library/ - - v2/community/ - - v2/developers/ + - v2/cn/ - v2/es/resources/documentation-guide/component-library/ - v2/fr/resources/documentation-guide/component-library/ - v2/gateways/ - - v2/home/ - - v2/internal/ - - v2/lpt/ - v2/orchestrators/ - v2/resources/ + - v2/templates/ - v2/index.mdx - - v2/solutions/ scope_out: [] allowed_generated: - .codex/pr-body.generated.md acceptance_checks: - - node tests/unit/style-guide.test.js --staged - - node tests/unit/copy-lint.test.js --staged - - node tests/unit/mdx.test.js --staged - - node tests/unit/quality.test.js --staged - - node tools/scripts/validate-codex-task-contract.js --branch codex/20260317-merge-readiness-style-root-cause + - node .github/scripts/fetch-contract-addresses.js --check + - node operations/tests/unit/contracts-view-model.test.js + - node operations/tests/unit/contracts-addresses-pipeline.test.js + - bash lpd test --staged risk_flags: - - authoring-governance - - routed-page-normalization + - generated-data-pipeline + - routed-page-migration + - navigation-governance follow_up_issues: [] diff --git a/.github/script-index.md b/.github/script-index.md index 8f0c107e6..c5dfaf96d 100644 --- a/.github/script-index.md +++ b/.github/script-index.md @@ -5,8 +5,14 @@ | Script | Summary | Usage | Domain | |---|---|---|---| +| `.github/scripts/fetch-contract-addresses.js` | Fetches and verifies Livepeer contract-address data, then generates the contracts datasets and canonical page inputs consumed by docs-v2. | `node .github/scripts/fetch-contract-addresses.js [--dry-run] [--check] [--skip-verify]` | docs | +| `.github/scripts/fetch-discord-announcements.js` | Fetches Discord announcement feeds and writes the generated snippets/automations datasets consumed by docs surfaces. | `node .github/scripts/fetch-discord-announcements.js` | docs | | `.github/scripts/fetch-forum-data.js` | Fetches latest topics and posts from Livepeer Forum API, writes to snippets/automations/forum/ | `node .github/scripts/fetch-forum-data.js [flags]` | docs | -| `.github/scripts/fetch-ghost-blog-data.js` | Fetches blog posts from Ghost CMS API, writes to snippets/automations/blog/ | `node .github/scripts/fetch-ghost-blog-data.js [flags]` | docs | +| `.github/scripts/fetch-ghost-blog-data.js` | Fetches the Livepeer Ghost RSS feed and writes the generated blog snippets consumed by docs surfaces. | `node .github/scripts/fetch-ghost-blog-data.js` | docs | +| `.github/scripts/fetch-github-discussions.js` | Fetches GitHub Discussions data and writes the generated snippets/automations datasets consumed by docs surfaces. | `node .github/scripts/fetch-github-discussions.js` | docs | +| `.github/scripts/fetch-github-releases.js` | Fetches GitHub release data and writes the generated snippets/automations datasets consumed by docs surfaces. | `node .github/scripts/fetch-github-releases.js` | docs | +| `.github/scripts/fetch-rss-blog-data.js` | Fetches RSS and blog feeds, then writes the generated snippets/automations datasets consumed by docs surfaces. | `node .github/scripts/fetch-rss-blog-data.js` | docs | | `.github/scripts/fetch-youtube-data.js` | Fetches video data from YouTube Data API, writes to snippets/automations/youtube/ | `node .github/scripts/fetch-youtube-data.js [flags]` | docs | +| `.github/scripts/generate-changelog.js` | Generates managed changelog pages from upstream release and commit data for solutions, contracts, and resources surfaces. | `CHANGELOG_KEY=contracts node .github/scripts/generate-changelog.js [--dry-run] [--enhance] [--contract] CHANGELOG_CATEGORY=solutions node .github/scripts/generate-changelog.js [--dry-run] [--enhance] PRODUCT_KEY=daydream node .github/scripts/generate-changelog.js [--dry-run] [--enhance]` | docs | | `.github/scripts/project-showcase-sync.js` | Fetches project showcase data from external source, writes to snippets/automations/showcase/ | `node .github/scripts/project-showcase-sync.js [flags]` | docs | {/* SCRIPT-INDEX:END */} diff --git a/.github/scripts/fetch-contract-addresses.js b/.github/scripts/fetch-contract-addresses.js index 749b29484..8b2c0d14f 100644 --- a/.github/scripts/fetch-contract-addresses.js +++ b/.github/scripts/fetch-contract-addresses.js @@ -1,1545 +1,71 @@ /** * @script fetch-contract-addresses - * @type automation - * @concern content - * @niche data/blockchain + * @category automation * @purpose infrastructure:data-feeds - * @description Fetches, verifies, and enriches all Livepeer protocol contract addresses - * across three source repos, two chains, and two explorer APIs. Writes an - * enriched JSX data file consumed by all contract display pages. - * @mode generate - * @scope .github/scripts, snippets/data/contract-addresses/, v2/ - * @usage node .github/scripts/fetch-contract-addresses.js [--dry-run] [--skip-verify] [--scan-fix] - * @policy Public APIs only. ETHERSCAN_API_KEY optional for higher rate limits. - * - * ── SOURCE REPOS ────────────────────────────────────────────────────────────── - * - * 1. livepeer/governor-scripts@master Address registry (primary source of deployed addresses) - * 2. livepeer/protocol@delta Core protocol Solidity source (BondingManager, Controller, etc.) - * 3. livepeer/protocol@streamflow Legacy branch (BridgeMinter, deploy scripts) - * 4. livepeer/protocol@master Origin contracts (L1 LivepeerToken) - * 5. livepeer/arbitrum-lpt-bridge@main Bridge contracts (L1/L2 Gateways, L1Escrow, L2 LivepeerToken) - * - * ── PIPELINE ────────────────────────────────────────────────────────────────── - * - * Fetch (governor-scripts) - * → Merge (supplement JSON for contracts not in governor-scripts) - * → Verify (Arbiscan + Etherscan: eth_getCode per address) - * → Enrich current (Blockscout + Etherscan V2: 15+ meta fields per contract) - * → Enrich historical (Blockscout: deployedAt, verified, replacedBy) - * → Validate sources (check contractCodeHref links, detect new .sol files) - * → Health check (Blockscout API shape, RPC eth_call, data integrity) - * → Write JSX data file (preserves header/definitions above export const) - * → Write companion JSON (SEO/AI crawlers) - * → Write health check results - * → Scan-fix stale addresses in v2/ MDX (optional) - * - * ── OUTPUT FILES ────────────────────────────────────────────────────────────── - * - * snippets/data/contract-addresses/contractAddressesData.jsx Main data file (JSX export) - * snippets/data/contract-addresses/contractAddressesData.json Companion JSON (SEO/AI) - * snippets/data/contract-addresses/_health-checks.json Health check + source validation - * snippets/composables/pages/reference/livepeer-contract-addresses-data.json Public companion JSON - * - * ── ENRICHMENT SOURCES ──────────────────────────────────────────────────────── - * - * Blockscout (primary, no key required): - * /api/v2/addresses/{addr} name, creator, verified, creation tx, balance, proxy - * /api/v2/addresses/{addr}/counters transaction count, token transfers, validations - * /api/v2/addresses/{addr}/transactions last active date - * /api/v2/tokens/{addr} holder count, supply, symbol, decimals - * /api/v2/smart-contracts/{addr} compiler version, optimisation, language - * - * Etherscan V2 (fallback, ETHERSCAN_API_KEY for both chains via chainid param): - * module=account&action=txlist deployed at, last active date - * module=proxy&action=eth_getTransactionCount nonce-based tx count - * module=token&action=tokeninfo holder count (tokens) - * module=contract&action=getsourcecode proxy detection, implementation address, compiler - * - * Arbitrum RPC (direct, no key): - * eth_call Controller.getContract(bytes32) registeredInController check - * web3_sha3 keccak256 hash computation (replaced by js-sha3) - * - * GitHub API (GITHUB_TOKEN): - * /repos/{repo} repo visibility (public/private) - * /repos/{repo}/contents/{path} source file existence validation - * - * ── SELF-HEAL BEHAVIOUR ─────────────────────────────────────────────────────── - * - * Both Blockscout and Etherscan are called for every contract. Results merged - * (Blockscout preferred, Etherscan fills gaps). If both fail for a contract, - * previous run's data is preserved from .bak file. Stale fields tagged in - * meta._stale array. _warnings array written to output for workflow auto-issue. - * - * ── WORKFLOW TRIGGERS ───────────────────────────────────────────────────────── - * - * Cron: Weekly Monday 02:00 UTC - * Manual dispatch: dry_run, skip_verify, scan_fix, use_test_branch - * Repository dispatch: governor-scripts-update, protocol-update, bridge-update - * - * ── ADDING A NEW CONTRACT ───────────────────────────────────────────────────── - * - * If the contract is deployed via governance (governor-scripts): - * → Automatic. The script picks it up on next run. - * - * If the contract is NOT in governor-scripts (e.g. AIServiceRegistry): - * 1. Add entry to operations/scripts/config/contract-addresses-supplement.json - * 2. Add entry to CONTRACT_REGISTRY in this script (repoSrc, solPath, meta) - * 3. Run: node .github/scripts/fetch-contract-addresses.js --dry-run - * 4. Verify the new contract appears in output with correct data - * 5. Run without --dry-run to write - * - * The validateSources() step will also flag new .sol files in source repos - * that aren't in the data — these appear in _health-checks.json and trigger - * a GitHub issue via the workflow. - * - * ── DEPENDENCIES ────────────────────────────────────────────────────────────── - * - * js-sha3 (npm) keccak256 hash computation for Controller registration checks - * Node.js built-ins https, fs, path - * - * @requires js-sha3 + * @scope generated-output + * @domain docs + * @needs R-R10 + * @purpose-statement Fetches and verifies Livepeer contract-address data, then generates the contracts datasets and canonical page inputs consumed by docs-v2. + * @pipeline P5, P6 + * @usage node .github/scripts/fetch-contract-addresses.js [--dry-run] [--check] [--skip-verify] */ -const https = require("https"); -const fs = require("fs"); -const path = require("path"); -const { keccak256 } = require("js-sha3"); -const { sanitiseForMdx } = require(path.resolve(__dirname, "../../operations/scripts/config/mdx-sanitise")); - -// ── Config ────────────────────────────────────────────────────────────────── -const REPO_ROOT = path.resolve(__dirname, "../.."); -const SUPPLEMENT_PATH = path.join(REPO_ROOT, "operations/scripts/config/contract-addresses-supplement.json"); -const OUTPUT_PATH = path.join(REPO_ROOT, "snippets/data/contract-addresses/contractAddressesData.jsx"); - -const GITHUB_TOKEN = process.env.GITHUB_TOKEN || ""; -const ARBISCAN_API_KEY = process.env.ARBISCAN_API_KEY || ""; -const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY || ""; -const ETHERSCAN_API_KEY_2 = process.env.ETHERSCAN_API_KEY_2 || ""; -const DRY_RUN = process.argv.includes("--dry-run"); -const SKIP_VERIFY = process.argv.includes("--skip-verify"); -const SCAN_FIX = process.argv.includes("--scan-fix"); - -const GOVERNOR_REPO = "livepeer/governor-scripts"; -const GOVERNOR_FILE = "updates/addresses.js"; - -// All contract source repos — the script validates contractCodeHref links and detects new contracts -const SOURCE_REPOS = [ - { repo: "livepeer/governor-scripts", branch: "master", role: "address-registry" }, - { repo: "livepeer/protocol", branch: "delta", role: "source", contractsPath: "contracts/" }, - { repo: "livepeer/protocol", branch: "streamflow", role: "source", contractsPath: "contracts/" }, - { repo: "livepeer/protocol", branch: "master", role: "source", contractsPath: "contracts/" }, - { repo: "livepeer/arbitrum-lpt-bridge", branch: "main", role: "source", contractsPath: "contracts/" }, -]; - -// ── Static registry — editorial + repo data per contract ─────────────────── -// Fields that cannot be derived from governor-scripts or explorer APIs. -// Key: contract name (must match camelToTitle output). -// New contracts not in this registry get sensible defaults. - -const CONTRACT_REGISTRY = { - Controller: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/Controller.sol", meta: { statusLabel: "Active", deployedBy: "Livepeer Deployer", notes: null }, - ethOverride: { repoSrc: "livepeer/protocol@master", solPath: "contracts/Controller.sol", meta: { statusLabel: "Paused", deployedBy: "Livepeer Deployer", notes: "Paused since Confluence migration (2022)" } } }, - BondingManager: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/bonding/BondingManager.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null }, - ethOverride: { repoSrc: "livepeer/protocol@master", solPath: "contracts/bonding/BondingManager.sol", meta: { statusLabel: "Paused", deployedBy: null, notes: "Paused since Confluence migration (2022)" } } }, - TicketBroker: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/pm/TicketBroker.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null }, - ethOverride: { repoSrc: "livepeer/protocol@master", solPath: "contracts/pm/TicketBroker.sol", meta: { statusLabel: "Paused", deployedBy: null, notes: "Paused since Confluence migration (2022)" } } }, - RoundsManager: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/rounds/RoundsManager.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null }, - ethOverride: { repoSrc: "livepeer/protocol@master", solPath: "contracts/rounds/RoundsManager.sol", meta: { statusLabel: "Paused", deployedBy: null, notes: "Paused since Confluence migration (2022)" } } }, - Minter: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/token/Minter.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null }, - ethOverride: { repoSrc: "livepeer/protocol@master", solPath: "contracts/token/Minter.sol", meta: { statusLabel: "Paused", deployedBy: null, notes: "Paused since Confluence migration (2022)" } } }, - ServiceRegistry: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/ServiceRegistry.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null }, - ethOverride: { repoSrc: "livepeer/protocol@master", solPath: "contracts/ServiceRegistry.sol", meta: { statusLabel: "Paused", deployedBy: null, notes: "Paused since Confluence migration (2022)" } } }, - AIServiceRegistry: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/AIServiceRegistry.sol", meta: { statusLabel: "Active", deployedBy: "AI subnet deployer", notes: "Detached from Controller" } }, - DelegatorPool: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/bonding/DelegatorPool.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - LivepeerToken: { repoSrc: "livepeer/arbitrum-lpt-bridge@main", solPath: "contracts/L2/token/LivepeerToken.sol", meta: { statusLabel: "Active", deployedBy: "Livepeer Deployer", notes: null }, - ethOverride: { repoSrc: "livepeer/protocol@master", solPath: "contracts/token/LivepeerToken.sol", meta: { statusLabel: "Active", deployedBy: "Livepeer Deployer", notes: "Origin token" } } }, - BridgeMinter: { repoSrc: "livepeer/protocol@streamflow", solPath: "contracts/token/BridgeMinter.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - BondingVotes: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/bonding/BondingVotes.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - Governor: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/governance/Governor.sol", meta: { statusLabel: "Active", deployedBy: "Livepeer Deployer", notes: null } }, - LivepeerGovernor: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/treasury/LivepeerGovernor.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - Treasury: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/treasury/Treasury.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - PollCreator: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/governance/PollCreator.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - MerkleSnapshot: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/snapshots/MerkleSnapshot.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - L2LPTGateway: { repoSrc: "livepeer/arbitrum-lpt-bridge@main", solPath: "contracts/L2/gateway/L2LPTGateway.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - L1LPTGateway: { repoSrc: "livepeer/arbitrum-lpt-bridge@main", solPath: "contracts/L1/gateway/L1LPTGateway.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - L1Escrow: { repoSrc: "livepeer/arbitrum-lpt-bridge@main", solPath: "contracts/L1/escrow/L1Escrow.sol", meta: { statusLabel: "Active", deployedBy: null, notes: "Holds bridged LPT" } }, - L2Migrator: { repoSrc: null, solPath: null, meta: { statusLabel: "Migration complete", deployedBy: null, notes: "Still processing pending claimStake calls. Source removed from repos after migration." } }, - L1Migrator: { repoSrc: null, solPath: null, meta: { statusLabel: "Migration complete", deployedBy: null, notes: "Source removed from repos after migration." } }, - L2LPTDataCache: { repoSrc: null, solPath: null, meta: { statusLabel: "Active", deployedBy: null, notes: "Source removed from repos. Verified on-chain only." } }, - L1LPTDataCache: { repoSrc: null, solPath: null, meta: { statusLabel: "Active", deployedBy: null, notes: "Source removed from repos. Verified on-chain only." } }, - SortedDoublyLL: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/libraries/SortedDoublyLL.sol", meta: { statusLabel: "Active", deployedBy: null, notes: "Library" } }, - GenesisManager: { repoSrc: "livepeer/protocol@master", solPath: "contracts/GenesisManager.sol", meta: { statusLabel: "Active", deployedBy: null, notes: "Genesis-era" } }, - MerkleMine: { repoSrc: "livepeer/protocol@master", solPath: "contracts/token/MerkleMine.sol", meta: { statusLabel: "Active", deployedBy: null, notes: "Genesis-era" } }, - MultiMerkleMine: { repoSrc: "livepeer/protocol@master", solPath: "contracts/token/MultiMerkleMine.sol", meta: { statusLabel: "Active", deployedBy: null, notes: "Genesis-era" } }, - Refunder: { repoSrc: "livepeer/protocol@master", solPath: "contracts/Refunder.sol", meta: { statusLabel: "Active", deployedBy: null, notes: null } }, - LivepeerTokenFaucet: { repoSrc: "livepeer/protocol@delta", solPath: "contracts/token/LivepeerTokenFaucet.sol", meta: { statusLabel: "Testnet only", deployedBy: null, notes: "Not deployed on mainnet or Arbitrum One" } }, -}; - -function getRegistryEntry(name, network) { - const entry = CONTRACT_REGISTRY[name]; - if (!entry) return { repoSrc: null, solPath: null, meta: { statusLabel: "Active", deployedBy: null, notes: null } }; - // LivepeerToken has different source on Ethereum vs Arbitrum - if (entry.ethOverride && network === "mainnet") return entry.ethOverride; - return entry; -} - -function buildContractCodeHref(repoSrc, solPath) { - if (!repoSrc || !solPath) return null; - const [repo, branch] = repoSrc.split("@"); - return `https://github.com/${repo}/blob/${branch}/${solPath}`; -} - -// ── HTTP helpers ──────────────────────────────────────────────────────────── - -function httpsGet(url, headers = {}) { - return new Promise((resolve, reject) => { - const parsed = new URL(url); - const opts = { - hostname: parsed.hostname, - path: parsed.pathname + parsed.search, - method: "GET", - headers: { "User-Agent": "livepeer-docs-bot", ...headers }, - }; - - const req = https.request(opts, (res) => { - let data = ""; - res.on("data", (chunk) => (data += chunk)); - res.on("end", () => resolve({ status: res.statusCode, data })); - }); - req.on("error", reject); - req.end(); - }); -} - -function httpsPost(url, body) { - return new Promise((resolve, reject) => { - const parsed = new URL(url); - const postData = typeof body === "string" ? body : JSON.stringify(body); - const opts = { - hostname: parsed.hostname, - path: parsed.pathname + parsed.search, - method: "POST", - headers: { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(postData) }, - }; - const req = https.request(opts, (res) => { - let data = ""; - res.on("data", (chunk) => (data += chunk)); - res.on("end", () => resolve({ status: res.statusCode, data })); - }); - req.on("error", reject); - req.write(postData); - req.end(); - }); -} - -function githubGet(endpoint) { - const headers = { Accept: "application/vnd.github+json" }; - if (GITHUB_TOKEN) headers["Authorization"] = `Bearer ${GITHUB_TOKEN}`; - return httpsGet(`https://api.github.com${endpoint}`, headers); -} - -function sleep(ms) { - return new Promise((r) => setTimeout(r, ms)); -} - -// ── Fetch governor-scripts addresses ──────────────────────────────────────── - -async function fetchGovernorAddresses() { - console.log(`Fetching ${GOVERNOR_FILE} from ${GOVERNOR_REPO}...`); - const res = await githubGet(`/repos/${GOVERNOR_REPO}/contents/${GOVERNOR_FILE}`); - if (res.status !== 200) { - throw new Error(`GitHub API returned ${res.status}: ${res.data.substring(0, 200)}`); - } - - const json = JSON.parse(res.data); - const content = Buffer.from(json.content, "base64").toString("utf8"); - const sha = json.sha.substring(0, 7); - - // Parse the JS object — extract between `const ADDRESSES = {` and `};` - const match = content.match(/const ADDRESSES\s*=\s*(\{[\s\S]*?\});/); - if (!match) throw new Error("Could not parse ADDRESSES object from addresses.js"); - - // Safe eval — this is a simple object literal with only string values - let addresses; - try { - addresses = new Function(`return ${match[1]}`)(); - } catch (e) { - throw new Error(`Failed to evaluate ADDRESSES object: ${e.message}`); - } - - console.log(` Parsed: ${Object.keys(addresses.mainnet || {}).length} mainnet, ${Object.keys(addresses.arbitrumMainnet || {}).length} arbitrum entries`); - return { addresses, sha }; -} - -// ── Map governor-scripts keys to structured entries ───────────────────────── - -function mapGovernorEntries(raw, network) { - const current = []; - const historical = {}; - - for (const [key, address] of Object.entries(raw)) { - const entry = mapKeyToEntry(key, address, network); - if (entry.isHistorical) { - const group = entry.historicalGroup; - if (!historical[group]) historical[group] = { entries: [] }; - historical[group].entries.push({ version: entry.version, address }); - } else { - current.push(entry); - } - } - - return { current, historical }; -} - -function mapKeyToEntry(key, address, network) { - const chain = network === "arbitrumMainnet" ? "arbitrumOne" : "ethereumMainnet"; - const explorerBase = network === "arbitrumMainnet" ? "https://arbiscan.io/address/" : "https://etherscan.io/address/"; - - // Versioned target pattern: bondingManagerTargetV2, ticketBrokerTargetV3, etc. - const targetMatch = key.match(/^(\w+?)Target(?:V(\d+))?$/); - if (targetMatch) { - const name = camelToTitle(targetMatch[1]); - const version = targetMatch[2] ? `V${targetMatch[2]}` : null; - if (version) { - return { - isHistorical: true, - historicalGroup: `${name} (Target)`, - version, - address, - }; - } - // No version suffix = current target - const reg = getRegistryEntry(name, network); - return { name, address, type: "target", category: categorise(name), isHistorical: false, chain, repoSrc: reg.repoSrc, contractCodeHref: buildContractCodeHref(reg.repoSrc, reg.solPath), blockchainHref: `${explorerBase}${address}`, meta: { ...reg.meta, holderCount: null, transactionCount: null, deployedAt: null, lastActiveDate: null, blockscoutLabel: null, registeredInController: null } }; - } - - // Versioned non-target: minterV2, etc. - const versionedMatch = key.match(/^(\w+?)V(\d+)$/); - if (versionedMatch && !key.includes("Target")) { - const name = camelToTitle(versionedMatch[1]); - const reg = getRegistryEntry(name, network); - return { name, address, type: "standalone", category: categorise(name), version: `V${versionedMatch[2]}`, isHistorical: false, chain, repoSrc: reg.repoSrc, contractCodeHref: buildContractCodeHref(reg.repoSrc, reg.solPath), blockchainHref: `${explorerBase}${address}`, meta: { ...reg.meta, holderCount: null, transactionCount: null, deployedAt: null, lastActiveDate: null, blockscoutLabel: null, registeredInController: null } }; - } - - // Proxy pattern: bondingManager (no Target suffix) = proxy - const proxyNames = ["bondingManager", "roundsManager", "l2Migrator", "bondingVotes", "livepeerGovernor"]; - if (proxyNames.includes(key)) { - const name = camelToTitle(key); - const reg = getRegistryEntry(name, network); - return { name, address, type: "proxy", category: categorise(name), isHistorical: false, chain, repoSrc: reg.repoSrc, contractCodeHref: buildContractCodeHref(reg.repoSrc, reg.solPath), blockchainHref: `${explorerBase}${address}`, meta: { ...reg.meta, holderCount: null, transactionCount: null, deployedAt: null, lastActiveDate: null, blockscoutLabel: null, registeredInController: null } }; - } - - // Everything else: standalone - const name = camelToTitle(key); - const reg = getRegistryEntry(name, network); - return { name, address, type: "standalone", category: categorise(name), isHistorical: false, chain, repoSrc: reg.repoSrc, contractCodeHref: buildContractCodeHref(reg.repoSrc, reg.solPath), blockchainHref: `${explorerBase}${address}`, meta: { ...reg.meta, holderCount: null, transactionCount: null, deployedAt: null, lastActiveDate: null, blockscoutLabel: null, registeredInController: null } }; -} - -function camelToTitle(key) { - const map = { - controller: "Controller", - livepeerToken: "LivepeerToken", - minter: "Minter", - bridgeMinter: "BridgeMinter", - bondingManager: "BondingManager", - ticketBroker: "TicketBroker", - roundsManager: "RoundsManager", - bondingVotes: "BondingVotes", - treasury: "Treasury", - livepeerGovernor: "LivepeerGovernor", - serviceRegistry: "ServiceRegistry", - l1LPTGateway: "L1LPTGateway", - l1Migrator: "L1Migrator", - l1LPTDataCache: "L1LPTDataCache", - l2LPTGateway: "L2LPTGateway", - l2Migrator: "L2Migrator", - l2LPTDataCache: "L2LPTDataCache", - }; - return map[key] || key.charAt(0).toUpperCase() + key.slice(1); -} - -function categorise(name) { - const categories = { - core: ["Controller", "BondingManager", "TicketBroker", "RoundsManager", "Minter", "ServiceRegistry", "AIServiceRegistry", "DelegatorPool"], - token: ["LivepeerToken", "BridgeMinter"], - governance: ["Governor", "BondingVotes", "LivepeerGovernor", "Treasury", "PollCreator", "MerkleSnapshot"], - bridge: ["L1LPTGateway", "L1Migrator", "L1LPTDataCache", "L1Escrow", "L2LPTGateway", "L2Migrator", "L2LPTDataCache"], - utility: ["SortedDoublyLL", "GenesisManager", "MerkleMine", "MultiMerkleMine", "Refunder", "MerkleProof"], - }; - for (const [cat, names] of Object.entries(categories)) { - if (names.includes(name)) return cat; - } - return "core"; -} - -// ── Merge governor-scripts + supplement ───────────────────────────────────── - -function mergeData(governor, supplement) { - const arbGov = mapGovernorEntries(governor.arbitrumMainnet || {}, "arbitrumMainnet"); - const ethGov = mapGovernorEntries(governor.mainnet || {}, "mainnet"); - - // Merge supplement current entries (supplement adds, governor-scripts overrides where both exist) - const arbCurrent = mergeCurrentEntries(arbGov.current, supplement.arbitrumOne?.current || []); - const ethCurrent = mergeCurrentEntries(ethGov.current, supplement.ethereumMainnet?.current || []); - - // Merge historical (supplement adds entries governor-scripts doesn't track) - const arbHistorical = mergeHistorical(arbGov.historical, supplement.historical?.arbitrumOne || {}); - const ethHistorical = mergeHistorical(ethGov.historical, supplement.historical?.ethereumMainnet || {}); - - return { - arbitrumOne: { current: arbCurrent, historical: arbHistorical }, - ethereumMainnet: { current: ethCurrent, historical: ethHistorical }, - }; -} - -function mergeCurrentEntries(govEntries, suppEntries) { - const merged = [...govEntries]; - const govAddresses = new Set(govEntries.map((e) => e.address.toLowerCase())); - - for (const supp of suppEntries) { - if (!govAddresses.has(supp.address.toLowerCase())) { - merged.push(supp); - } - } - - // Sort: core → token → governance → bridge → utility, then by name - const catOrder = { core: 0, token: 1, governance: 2, bridge: 3, utility: 4 }; - merged.sort((a, b) => (catOrder[a.category] || 9) - (catOrder[b.category] || 9) || a.name.localeCompare(b.name)); - return merged; -} - -function mergeHistorical(govHist, suppHist) { - const merged = { ...govHist }; - for (const [group, data] of Object.entries(suppHist)) { - if (!merged[group]) { - merged[group] = { entries: data.entries || [] }; - } else { - const existingAddrs = new Set(merged[group].entries.map((e) => e.address.toLowerCase())); - for (const entry of data.entries || []) { - if (!existingAddrs.has(entry.address.toLowerCase())) { - merged[group].entries.push(entry); - } - } - } - // Sort by version number - merged[group].entries.sort((a, b) => { - const av = parseInt((a.version || "").replace("V", ""), 10) || 0; - const bv = parseInt((b.version || "").replace("V", ""), 10) || 0; - return av - bv; - }); - } - return merged; -} - -// ── Arbiscan / Etherscan verification ─────────────────────────────────────── - -async function verifyAddresses(entries, network) { - if (SKIP_VERIFY) { - return entries.map((e) => ({ ...e, verified: null, verifiedAt: null })); - } - - const isArbiscan = network === "arbitrumOne"; - const baseUrl = isArbiscan ? "https://api.arbiscan.io" : "https://api.etherscan.io"; - const apiKey = isArbiscan ? ARBISCAN_API_KEY : ETHERSCAN_API_KEY; - const label = isArbiscan ? "Arbiscan" : "Etherscan"; - - let verified = 0; - let failed = 0; - const _now = new Date(); - const now = _now.toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }); - const nowISO = _now.toISOString(); - - const results = []; - for (const entry of entries) { - let url = `${baseUrl}/api?module=proxy&action=eth_getCode&address=${entry.address}&tag=latest`; - if (apiKey) url += `&apikey=${apiKey}`; - - try { - const res = await httpsGet(url); - const data = JSON.parse(res.data); - // eth_getCode returns "0x" for EOAs, bytecode for contracts - const isVerified = data.result && data.result !== "0x" && data.result.length > 2; - results.push({ ...entry, verified: isVerified, verifiedAt: now, verifiedAtISO: nowISO }); - if (isVerified) verified++; - else { - failed++; - console.log(` ⚠ ${entry.name} (${entry.address.substring(0, 10)}...) — not verified on ${label}`); - } - } catch (err) { - console.log(` ⚠ ${entry.name} — ${label} check failed: ${err.message}`); - results.push({ ...entry, verified: false, verifiedAt: now, verifiedAtISO: nowISO }); - failed++; - } - - // Rate limit: 5 calls/sec without key, higher with key - await sleep(apiKey ? 100 : 250); - } - - console.log(` ${label}: ${verified}/${entries.length} verified${failed ? `, ${failed} failed` : ""}`); - return results; -} - -// ── Enrich metadata — Blockscout primary, Etherscan V2 fallback ──────────── -// Self-healing: if primary fails, falls back. If both fail, logs warning and -// continues with null fields. Detects API version drift at startup. - -async function checkApiHealth(blockscoutBase, etherscanV2Base) { - const health = { blockscout: false, etherscan: false, _apiVersions: {} }; - - try { - // /api/v2/health doesn't exist on all Blockscout instances — probe with a known address instead - const probeAddr = "0xD8E8328501E9645d16Cf49539efC04f734606ee4"; // Arbitrum Controller - const bsRes = await httpsGet(`${blockscoutBase}/api/v2/addresses/${probeAddr}`); - if (bsRes.status === 200) { - health.blockscout = true; - health._apiVersions.blockscout = "v2"; - } - } catch (_) {} - - try { - const esRes = await httpsGet(`${etherscanV2Base}?chainid=1&module=stats&action=ethprice`); - if (esRes.status === 200) { - health.etherscan = true; - health._apiVersions.etherscan = "v2"; - } - } catch (_) {} - - return health; -} - -async function enrichFromBlockscout(addr, blockscoutBase, entry, apiKey) { - const meta = {}; - const fmt = (d) => new Date(d).toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }); - const fmtShort = (d) => new Date(d).toLocaleDateString('en-GB', { month: 'short', year: 'numeric' }); - - // ── 1. Address info (single call — name, creator, verified, creation_tx, balance, proxy, implementations) - const addrRes = await httpsGet(`${blockscoutBase}/api/v2/addresses/${addr}`); - if (addrRes.status !== 200) throw new Error(`Blockscout address ${addrRes.status}`); - const addrData = JSON.parse(addrRes.data); - - if (addrData.name) meta.blockscoutLabel = addrData.name; - if (addrData.creator_address_hash) meta.creatorAddress = addrData.creator_address_hash; - if (addrData.is_verified !== undefined) meta.bsVerified = addrData.is_verified; - if (addrData.is_contract !== undefined) meta.isContract = addrData.is_contract; - if (addrData.coin_balance) meta.balance = addrData.coin_balance; - if (addrData.proxy_type) meta.isProxy = true; - if (addrData.implementations?.length > 0) { - meta.proxyTarget = addrData.implementations[0].address; - meta.proxyTargetName = addrData.implementations[0].name || null; - } - await sleep(150); - - // ── 2. Creation tx → deployedAt (full date + short date) - if (addrData.creation_transaction_hash) { - try { - const txRes = await httpsGet(`${blockscoutBase}/api/v2/transactions/${addrData.creation_transaction_hash}`); - if (txRes.status === 200) { - const txData = JSON.parse(txRes.data); - if (txData.timestamp) { - meta.deployedAt = fmt(txData.timestamp); - meta.deployedAtISO = new Date(txData.timestamp).toISOString(); - } - } - } catch (_) {} - } - await sleep(150); - - // ── 3. Counters → tx count, token transfers count, validations count - try { - const ctrRes = await httpsGet(`${blockscoutBase}/api/v2/addresses/${addr}/counters`); - if (ctrRes.status === 200) { - const ctrData = JSON.parse(ctrRes.data); - if (ctrData.transactions_count) meta.transactionCount = parseInt(ctrData.transactions_count, 10); - if (ctrData.token_transfers_count) meta.tokenTransferCount = parseInt(ctrData.token_transfers_count, 10); - if (ctrData.validations_count) meta.validationsCount = parseInt(ctrData.validations_count, 10); - } - } catch (_) {} - await sleep(150); - - // ── 4. Token info → holder count, total supply, decimals, symbol (any token contract, not just LPT) - try { - const tokRes = await httpsGet(`${blockscoutBase}/api/v2/tokens/${addr}`); - if (tokRes.status === 200) { - const tokData = JSON.parse(tokRes.data); - const holders = tokData.holders_count || tokData.holders; - if (holders) meta.holderCount = Number(holders).toLocaleString('en-GB'); - if (tokData.total_supply) meta.totalSupply = tokData.total_supply; - if (tokData.decimals) meta.decimals = tokData.decimals; - if (tokData.symbol) meta.symbol = tokData.symbol; - } - } catch (_) {} - await sleep(150); - - // ── 5. Last activity — most recent transaction timestamp - try { - const txsRes = await httpsGet(`${blockscoutBase}/api/v2/addresses/${addr}/transactions`); - if (txsRes.status === 200) { - const txsData = JSON.parse(txsRes.data); - const validTx = txsData.items?.find(item => item.timestamp); - if (validTx) { - meta.lastActiveDate = fmt(validTx.timestamp); - meta.lastActiveDateISO = new Date(validTx.timestamp).toISOString(); - } - } - } catch (_) {} - await sleep(150); - - // ── 6. Smart contract info → compiler, optimization, source - try { - const scRes = await httpsGet(`${blockscoutBase}/api/v2/smart-contracts/${addr}`); - if (scRes.status === 200) { - const scData = JSON.parse(scRes.data); - if (scData.compiler_version) meta.compilerVersion = scData.compiler_version; - if (scData.optimization_enabled !== undefined) meta.optimizationEnabled = scData.optimization_enabled; - if (scData.language) meta.language = scData.language; - if (scData.verified_at) meta.sourceVerifiedAt = fmt(scData.verified_at); - } - } catch (_) {} - await sleep(150); - - // ── 7. Etherscan getsourcecode — proxy detection, implementation address, contract name - // (Blockscout doesn't detect Livepeer's Controller-based proxies, but Etherscan does) - if (apiKey) { - try { - const esBase = `https://api.etherscan.io/v2/api?chainid=${entry.chain === "arbitrumOne" ? 42161 : 1}`; - const scRes = await httpsGet(`${esBase}&module=contract&action=getsourcecode&address=${addr}&apikey=${apiKey}`); - if (scRes.status === 200) { - const scData = JSON.parse(scRes.data); - if (scData.status === "1" && scData.result?.[0]) { - const sc = scData.result[0]; - if (sc.Proxy === "1" && sc.Implementation) meta.proxyTarget = sc.Implementation; - if (sc.ContractName && !meta.blockscoutLabel) meta.blockscoutLabel = sc.ContractName; - if (sc.CompilerVersion && !meta.compilerVersion) meta.compilerVersion = sc.CompilerVersion; - } - } - } catch (_) {} - await sleep(150); - } - - return meta; -} - -async function enrichFromEtherscan(addr, chainId, apiKey, entry) { - const meta = {}; - const base = `https://api.etherscan.io/v2/api?chainid=${chainId}`; - - // First tx → deployedAt - try { - let url = `${base}&module=account&action=txlist&address=${addr}&page=1&offset=1&sort=asc&startblock=0&endblock=99999999`; - if (apiKey) url += `&apikey=${apiKey}`; - const res = await httpsGet(url); - const data = JSON.parse(res.data); - if (data.status === "1" && data.result?.length > 0) { - const ts = parseInt(data.result[0].timeStamp, 10) * 1000; - meta.deployedAt = new Date(ts).toLocaleDateString('en-GB', { month: 'short', year: 'numeric' }); - } - } catch (_) {} - await sleep(apiKey ? 150 : 300); - - // Last tx → lastActiveDate - try { - let url = `${base}&module=account&action=txlist&address=${addr}&page=1&offset=1&sort=desc&startblock=0&endblock=99999999`; - if (apiKey) url += `&apikey=${apiKey}`; - const res = await httpsGet(url); - const data = JSON.parse(res.data); - if (data.status === "1" && data.result?.length > 0) { - const ts = parseInt(data.result[0].timeStamp, 10) * 1000; - meta.lastActiveDate = new Date(ts).toLocaleDateString('en-GB', { month: 'short', year: 'numeric' }); - } - } catch (_) {} - await sleep(apiKey ? 150 : 300); - - // Nonce → transaction count - try { - let url = `${base}&module=proxy&action=eth_getTransactionCount&address=${addr}&tag=latest`; - if (apiKey) url += `&apikey=${apiKey}`; - const res = await httpsGet(url); - const data = JSON.parse(res.data); - if (data.result) meta.transactionCount = parseInt(data.result, 16); - } catch (_) {} - await sleep(apiKey ? 150 : 300); - - // Token holder count - if (entry.category === "token" && entry.name === "LivepeerToken") { - try { - let url = `${base}&module=token&action=tokeninfo&contractaddress=${addr}`; - if (apiKey) url += `&apikey=${apiKey}`; - const res = await httpsGet(url); - const data = JSON.parse(res.data); - if (data.status === "1" && data.result?.length > 0) { - const holders = data.result[0].holdersCount || data.result[0].holders; - if (holders) meta.holderCount = Number(holders).toLocaleString('en-GB'); - } - } catch (_) {} - await sleep(apiKey ? 150 : 300); - } - - // Contract source code — proxy detection, implementation, compiler - try { - let url = `${base}&module=contract&action=getsourcecode&address=${addr}`; - if (apiKey) url += `&apikey=${apiKey}`; - const res = await httpsGet(url); - const data = JSON.parse(res.data); - if (data.status === "1" && data.result?.[0]) { - const sc = data.result[0]; - if (sc.Proxy === "1" && sc.Implementation) meta.proxyTarget = sc.Implementation; - if (sc.ContractName) meta.blockscoutLabel = sc.ContractName; - if (sc.CompilerVersion) meta.compilerVersion = sc.CompilerVersion; - } - } catch (_) {} - await sleep(apiKey ? 150 : 300); - - return meta; -} - -// Check if a GitHub repo is private -const _repoVisibilityCache = {}; -async function checkRepoVisibility(repoSrc) { - if (!repoSrc) return null; - const repo = repoSrc.split("@")[0]; // "livepeer/protocol@delta" → "livepeer/protocol" - if (_repoVisibilityCache[repo] !== undefined) return _repoVisibilityCache[repo]; - try { - const res = await githubGet(`/repos/${repo}`); - if (res.status === 200) { - const data = JSON.parse(res.data); - _repoVisibilityCache[repo] = data.private || false; - return data.private; - } - if (res.status === 404) { - _repoVisibilityCache[repo] = true; // 404 without auth = private - return true; - } - } catch (_) {} - _repoVisibilityCache[repo] = null; - return null; -} - -// Load previous data file for computing transactionsRecent (diff) -function loadPreviousData() { - const bakPath = OUTPUT_PATH + ".bak"; - try { - if (fs.existsSync(bakPath)) { - const content = fs.readFileSync(bakPath, "utf8"); - const match = content.match(/export const contractAddresses\s*=\s*(\{[\s\S]*\});?\s*$/); - if (match) return new Function(`return ${match[1]}`)(); - } - } catch (_) {} - return null; -} - -async function enrichMetadata(entries, network) { - if (SKIP_VERIFY) { - console.log(` Skipping metadata enrichment (--skip-verify)`); - return entries; - } - - const isArbitrum = network === "arbitrumOne"; - const chainId = isArbitrum ? 42161 : 1; - const blockscoutBase = isArbitrum ? "https://arbitrum.blockscout.com" : "https://eth.blockscout.com"; - const etherscanV2Base = "https://api.etherscan.io/v2/api"; - // Etherscan V2 uses single key for all chains via chainid param - const apiKey = ETHERSCAN_API_KEY || ETHERSCAN_API_KEY_2 || ARBISCAN_API_KEY || ""; - const label = isArbitrum ? "Arbitrum" : "Ethereum"; - const controllerAddress = isArbitrum - ? "0xD8E8328501E9645d16Cf49539efC04f734606ee4" - : "0xf96d54e490317c557a967abfa5d6e33006be69b3"; - - // Health check — detect which APIs are responsive - console.log(`\n Health check for ${label} enrichment...`); - const health = await checkApiHealth(blockscoutBase, etherscanV2Base); - console.log(` Blockscout: ${health.blockscout ? "UP" : "DOWN"} (${health._apiVersions.blockscout || "unreachable"})`); - console.log(` Etherscan V2: ${health.etherscan ? "UP" : "DOWN"} (${health._apiVersions.etherscan || "unreachable"})`); - - if (!health.blockscout && !health.etherscan) { - console.log(` ⚠ Both APIs down — skipping enrichment, data will have null meta fields`); - return entries; - } - - const usePrimary = health.blockscout ? "blockscout" : "etherscan"; - const useFallback = health.blockscout ? "etherscan" : "blockscout"; - console.log(` Primary: ${usePrimary}, Fallback: ${useFallback}`); - console.log(` Enriching ${entries.length} ${label} entries...`); - - // Load previous run for transactionsRecent diff - const prevData = loadPreviousData(); - const prevEntries = prevData?.[network]?.current || []; - const prevByAddr = new Map(prevEntries.map(e => [e.address.toLowerCase(), e])); - - const results = []; - const warnings = []; - - for (const entry of entries) { - const meta = { ...entry.meta }; - const addr = entry.address; - const sources = { blockscout: null, etherscan: null }; - - // Try BOTH sources — merge best from each - if (health.blockscout) { - try { - sources.blockscout = await enrichFromBlockscout(addr, blockscoutBase, entry, apiKey); - } catch (err) { - console.log(` ⚠ ${entry.name} Blockscout failed: ${err.message}`); - warnings.push({ contract: entry.name, address: addr, source: "blockscout", error: err.message }); - } - } - - if (health.etherscan && apiKey) { - try { - sources.etherscan = await enrichFromEtherscan(addr, chainId, apiKey, entry); - } catch (err) { - console.log(` ⚠ ${entry.name} Etherscan failed: ${err.message}`); - warnings.push({ contract: entry.name, address: addr, source: "etherscan", error: err.message }); - } - } - - // Merge: prefer Blockscout (richer data), fill gaps from Etherscan - const bsMeta = sources.blockscout || {}; - const esMeta = sources.etherscan || {}; - for (const [k, v] of Object.entries(bsMeta)) { - if (v != null) meta[k] = v; - } - for (const [k, v] of Object.entries(esMeta)) { - if (v != null && meta[k] == null) meta[k] = v; - } - - if (!sources.blockscout && !sources.etherscan) { - warnings.push({ contract: entry.name, address: addr, source: "both", error: "Both APIs failed or unavailable" }); - } - - // keccakHash — used by ContractVerifier widget as bytes32 arg to Controller.getContract() - const nameHash = keccak256Hex(entry.name); - meta.keccakHash = "0x" + nameHash; - - // Controller registration check — direct RPC call - // Function selector: 0xe16c7d98 = keccak256("getContract(bytes32)") — verified against Controller ABI - if (!isArbitrum) { - // Ethereum Mainnet — no Controller, always false - meta.registeredInController = false; - } else if (entry.name !== "Controller" && entry.type !== "target" && nameHash) { - try { - const rpcUrl = isArbitrum ? "https://arb1.arbitrum.io/rpc" : "https://eth.llamarpc.com"; - const rpcBody = JSON.stringify({ jsonrpc: "2.0", method: "eth_call", params: [{ to: controllerAddress, data: "0xe16c7d98" + nameHash }, "latest"], id: 1 }); - const regRes = await httpsPost(rpcUrl, rpcBody); - const regData = JSON.parse(regRes.data); - if (regData.result && regData.result !== "0x" && regData.result.length >= 42) { - const returnedAddr = "0x" + regData.result.slice(-40); - meta.registeredInController = returnedAddr.toLowerCase() === addr.toLowerCase(); - } - } catch (_) { /* non-critical */ } - await sleep(apiKey ? 100 : 250); - } - - // Repo visibility check (cached per repo) - if (entry.repoSrc) { - const isPrivate = await checkRepoVisibility(entry.repoSrc); - meta.repoIsPrivate = isPrivate; - } - - // Transactions since last run (diff with .bak data) - const prev = prevByAddr.get(addr.toLowerCase()); - if (prev?.meta?.transactionCount != null && meta.transactionCount != null) { - meta.transactionsRecent = Math.max(0, meta.transactionCount - prev.meta.transactionCount); - } else { - meta.transactionsRecent = null; - } - - results.push({ ...entry, meta }); - } - - const enrichedCount = results.filter(e => e.meta.deployedAt || e.meta.lastActiveDate || e.meta.holderCount).length; - console.log(` Enriched: ${enrichedCount}/${entries.length} entries`); - if (warnings.length > 0) { - console.log(` ⚠ ${warnings.length} contracts had enrichment failures`); - } - - // Fallback data preservation — keep previous run's values where current enrichment returned null - // This ensures an ownerless repo never loses data it already had - for (const result of results) { - const prev = prevByAddr.get(result.address.toLowerCase()); - if (prev?.meta) { - for (const [key, oldVal] of Object.entries(prev.meta)) { - if (oldVal != null && result.meta[key] == null) { - result.meta[key] = oldVal; - result.meta._stale = result.meta._stale || []; - if (!result.meta._stale.includes(key)) result.meta._stale.push(key); - } - } - } - } - - const staleCount = results.filter(e => e.meta._stale?.length > 0).length; - if (staleCount > 0) { - console.log(` ℹ ${staleCount} contracts using stale data from previous run for some fields`); - } - - // Store warnings for output - results._warnings = warnings; - results._apiVersions = health._apiVersions; - return results; -} - -// keccak256 helper for Controller.getContract(bytes32) calls. -// keccak256 via js-sha3 — computes hash for any contract name dynamically. -// No static lookup needed. New contracts automatically get hashes. -function keccak256Hex(name) { - return keccak256(name); -} - -// ── Write JSX data file ───────────────────────────────────────────────────── - -function writeDataFile(data, sha) { - const _now = new Date(); - const now = _now.toISOString(); - const nowFormatted = _now.toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }); - const arbCount = data.arbitrumOne.current.length; - const ethCount = data.ethereumMainnet.current.length; - - const arbVerified = data.arbitrumOne.current.filter((e) => e.verified === true).length; - const ethVerified = data.ethereumMainnet.current.filter((e) => e.verified === true).length; - const skipVerify = data.arbitrumOne.current[0]?.verified === null; - - const verifySummary = skipVerify - ? "Verification skipped" - : `${arbVerified}/${arbCount} Arbitrum, ${ethVerified}/${ethCount} Mainnet`; - - // Preserve everything above "export const contractAddresses" in the existing file (JSDoc typedef, comments, etc.) - let header = ""; - if (fs.existsSync(OUTPUT_PATH)) { - const existing = fs.readFileSync(OUTPUT_PATH, "utf8"); - const exportIdx = existing.indexOf("export const contractAddresses"); - if (exportIdx > 0) { - header = existing.substring(0, exportIdx); - } - } - - // If no existing header, write a minimal one - if (!header.trim()) { - header = `/**\n * Auto-generated by fetch-contract-addresses.js\n * Source: ${GOVERNOR_REPO} (commit ${sha})\n * Last updated: ${now}\n * DO NOT EDIT MANUALLY\n */\n\n`; - } - - let jsx = header; - jsx += `export const contractAddresses = ${JSON.stringify({ - arbitrumOne: data.arbitrumOne, - ethereumMainnet: data.ethereumMainnet, - meta: { - lastUpdated: now, - lastVerified: skipVerify ? null : nowFormatted, - sourceRepo: GOVERNOR_REPO, - sourceCommit: sha, - verificationSummary: verifySummary, - explorerUrls: { - arbiscan: "https://arbiscan.io", - etherscan: "https://etherscan.io", - blockscoutArbitrum: "https://arbitrum.blockscout.com", - blockscoutEthereum: "https://eth.blockscout.com", - }, - rpcUrls: { - arbitrumOne: [ - "https://arb1.arbitrum.io/rpc", - "https://arbitrum-one-rpc.publicnode.com", - "https://arbitrum.drpc.org", - ], - ethereumMainnet: [ - "https://eth.llamarpc.com", - "https://ethereum-rpc.publicnode.com", - "https://eth.drpc.org", - ], - }, - _apiVersions: data.arbitrumOne.current._apiVersions || {}, - _warnings: [ - ...(data.arbitrumOne.current._warnings || []), - ...(data.ethereumMainnet.current._warnings || []), - ], - }, - }, null, 2)};\n`; - - if (DRY_RUN) { - console.log(`\n[DRY RUN] Would write to ${OUTPUT_PATH}`); - console.log(` Arbitrum One: ${arbCount} current entries`); - console.log(` Ethereum Mainnet: ${ethCount} current entries`); - console.log(` Verification: ${verifySummary}`); - return; - } - - // Write .bak before overwriting - if (fs.existsSync(OUTPUT_PATH)) { - fs.copyFileSync(OUTPUT_PATH, OUTPUT_PATH + ".bak"); - } - - fs.mkdirSync(path.dirname(OUTPUT_PATH), { recursive: true }); - fs.writeFileSync(OUTPUT_PATH, jsx); - console.log(`\nWritten to ${OUTPUT_PATH}`); - console.log(` Arbitrum One: ${arbCount} current entries`); - console.log(` Ethereum Mainnet: ${ethCount} current entries`); - console.log(` Verification: ${verifySummary}`); - - // Write companion JSON — static mirror for SEO/AI crawlers - // Crawlers can't read client-rendered JSX; this plain JSON is crawlable at - // Composable imports this; wrapper pages import the composable - const companionPath = path.join(REPO_ROOT, "snippets/composables/pages/reference/livepeer-contract-addresses-data.json"); - const companionData = { - _generated: { by: "fetch-contract-addresses.js", at: now, source: `${GOVERNOR_REPO} (${sha})` }, - arbitrumOne: { - current: data.arbitrumOne.current.map(c => ({ - name: c.name, - address: c.address, - type: c.type, - category: c.category, - chain: c.chain || "arbitrumOne", - verified: c.verified, - verifiedAt: c.verifiedAt, - contractCodeHref: c.contractCodeHref || null, - blockchainHref: c.blockchainHref || null, - meta: c.meta || {}, - })), - historical: data.arbitrumOne.historical, - }, - ethereumMainnet: { - current: data.ethereumMainnet.current.map(c => ({ - name: c.name, - address: c.address, - type: c.type, - category: c.category, - chain: c.chain || "ethereumMainnet", - verified: c.verified, - verifiedAt: c.verifiedAt, - contractCodeHref: c.contractCodeHref || null, - blockchainHref: c.blockchainHref || null, - meta: c.meta || {}, - })), - historical: data.ethereumMainnet.historical, - }, - meta: { - lastUpdated: now, - lastVerified: skipVerify ? null : nowFormatted, - verificationSummary: verifySummary, - explorerUrls: { - arbiscan: "https://arbiscan.io", - etherscan: "https://etherscan.io", - blockscoutArbitrum: "https://arbitrum.blockscout.com", - blockscoutEthereum: "https://eth.blockscout.com", - }, - }, - }; - fs.writeFileSync(companionPath, JSON.stringify(companionData, null, 2)); - console.log(` Companion JSON: ${companionPath}`); -} - -// ── Scan-fix: find stale addresses in v2/ ─────────────────────────────────── - -function scanAndFix(data) { - // Build lookup: address (lowercase) → { name, type, network, isCurrent } - const lookup = new Map(); - - for (const entry of data.arbitrumOne.current) { - lookup.set(entry.address.toLowerCase(), { ...entry, network: "Arbitrum One", isCurrent: true }); - } - for (const entry of data.ethereumMainnet.current) { - lookup.set(entry.address.toLowerCase(), { ...entry, network: "Ethereum Mainnet", isCurrent: true }); - } - for (const [group, hist] of Object.entries(data.arbitrumOne.historical || {})) { - for (const entry of hist.entries || []) { - lookup.set(entry.address.toLowerCase(), { name: group, version: entry.version, network: "Arbitrum One", isCurrent: false }); - } - } - for (const [group, hist] of Object.entries(data.ethereumMainnet.historical || {})) { - for (const entry of hist.entries || []) { - lookup.set(entry.address.toLowerCase(), { name: group, version: entry.version, network: "Ethereum Mainnet", isCurrent: false }); - } - } - - // Build upgrade map: old target address → new target address (for unambiguous auto-fix) - const upgradeMap = buildUpgradeMap(data); - - // Scan v2/ MDX files - const v2Dir = path.join(REPO_ROOT, "v2"); - const files = globMdx(v2Dir); - const addressRegex = /0x[a-fA-F0-9]{40}/g; - - let totalFound = 0; - let staleFound = 0; - let autoFixed = 0; - let unknownFound = 0; - const report = []; - - for (const filePath of files) { - let content = fs.readFileSync(filePath, "utf8"); - let modified = false; - const relativePath = path.relative(REPO_ROOT, filePath); - let match; - - // Reset regex - addressRegex.lastIndex = 0; - const fileMatches = []; - - while ((match = addressRegex.exec(content)) !== null) { - const addr = match[0].toLowerCase(); - const info = lookup.get(addr); - - if (!info) { - unknownFound++; - totalFound++; - continue; - } - - totalFound++; - - if (!info.isCurrent) { - staleFound++; - const replacement = upgradeMap.get(addr); - if (replacement && !DRY_RUN) { - content = content.split(match[0]).join(replacement.address); - modified = true; - autoFixed++; - fileMatches.push({ - old: match[0], - new: replacement.address, - name: info.name, - oldVersion: info.version, - newVersion: replacement.version, - }); - } else { - fileMatches.push({ - old: match[0], - name: info.name, - version: info.version, - action: replacement ? "would auto-fix" : "manual review needed", - }); - } - } - } - - if (modified) { - fs.writeFileSync(filePath, content); - } - - if (fileMatches.length > 0) { - report.push({ file: relativePath, matches: fileMatches }); - } - } - - console.log(`\n── Stale Address Scan ──`); - console.log(` Files scanned: ${files.length}`); - console.log(` Addresses found: ${totalFound}`); - console.log(` Stale (deprecated): ${staleFound}`); - console.log(` Auto-fixed: ${autoFixed}`); - console.log(` Unknown (non-Livepeer): ${unknownFound}`); - - if (report.length > 0) { - console.log(`\n Details:`); - for (const r of report) { - console.log(` ${r.file}:`); - for (const m of r.matches) { - if (m.new) { - console.log(` ✓ ${m.name} ${m.oldVersion} → ${m.newVersion} (auto-fixed)`); - } else { - console.log(` ⚠ ${m.name} ${m.version || ""} — ${m.action}`); - } - } - } - } -} - -function buildUpgradeMap(data) { - const map = new Map(); - - // For each historical group, map all old target addresses to the current target - for (const [networkKey, networkLabel] of [["arbitrumOne", "Arbitrum One"], ["ethereumMainnet", "Ethereum Mainnet"]]) { - const currentEntries = data[networkKey]?.current || []; - const historicalGroups = data[networkKey]?.historical || {}; - - for (const [group, hist] of Object.entries(historicalGroups)) { - // Find the current target for this contract - const contractName = group.replace(" (Target)", ""); - const currentTarget = currentEntries.find( - (e) => e.name === contractName && e.type === "target" - ); - - if (currentTarget) { - for (const entry of hist.entries || []) { - map.set(entry.address.toLowerCase(), { - address: currentTarget.address, - version: currentTarget.version || "current", - }); - } - } - } - } - - return map; -} - -function globMdx(dir) { - const results = []; - if (!fs.existsSync(dir)) return results; - - const entries = fs.readdirSync(dir, { withFileTypes: true }); - for (const entry of entries) { - const full = path.join(dir, entry.name); - if (entry.isDirectory()) { - // Skip _workspace, archive, dep- prefixed dirs - if (entry.name.startsWith("_") || entry.name === "archive") continue; - results.push(...globMdx(full)); - } else if (entry.name.endsWith(".mdx") && !entry.name.startsWith("dep-")) { - results.push(full); - } - } - return results; -} - -// ── Validate source repos — check contractCodeHref links, detect new contracts ─ - -async function validateSources(data) { - console.log("\n── Source Validation ──"); - const warnings = []; - - // 1. Validate every contractCodeHref actually exists on GitHub - const allEntries = [ - ...data.arbitrumOne.current, - ...data.ethereumMainnet.current, - ]; - - let validLinks = 0; - let brokenLinks = 0; - let unchecked = 0; - - for (const entry of allEntries) { - if (!entry.contractCodeHref) { unchecked++; continue; } - try { - // Extract repo/branch/path from the GitHub URL - const match = entry.contractCodeHref.match(/github\.com\/([^/]+\/[^/]+)\/blob\/([^/]+)\/(.+)/); - if (!match) { unchecked++; continue; } - const [, repo, branch, filePath] = match; - const res = await githubGet(`/repos/${repo}/contents/${filePath}?ref=${branch}`); - if (res.status === 200) { - validLinks++; - } else { - brokenLinks++; - warnings.push({ contract: entry.name, type: "broken-source-link", detail: `${entry.contractCodeHref} returned ${res.status}` }); - console.log(` ✗ ${entry.name}: source link broken (${res.status})`); - } - } catch (err) { - unchecked++; - } - await sleep(100); - } - console.log(` Source links: ${validLinks} valid, ${brokenLinks} broken, ${unchecked} unchecked`); - - // 2. Scan source repos for Solidity files that might be new contracts not in data - const knownNames = new Set(allEntries.map(e => e.name)); - const sourceRepos = SOURCE_REPOS.filter(r => r.role === "source"); - let newContracts = []; - - for (const src of sourceRepos) { - try { - const res = await githubGet(`/repos/${src.repo}/contents/${src.contractsPath}?ref=${src.branch}`); - if (res.status === 200) { - const files = JSON.parse(res.data); - const solFiles = files.filter(f => f.name.endsWith(".sol") && f.type === "file"); - for (const sol of solFiles) { - const contractName = sol.name.replace(".sol", ""); - if (!knownNames.has(contractName)) { - newContracts.push({ name: contractName, repo: src.repo, branch: src.branch, path: `${src.contractsPath}${sol.name}` }); - } - } - } - } catch (_) {} - await sleep(200); - - // Also scan subdirectories (contracts/bonding/, contracts/token/, etc.) - try { - const res = await githubGet(`/repos/${src.repo}/contents/${src.contractsPath}?ref=${src.branch}`); - if (res.status === 200) { - const items = JSON.parse(res.data); - const dirs = items.filter(f => f.type === "dir"); - for (const dir of dirs) { - try { - const subRes = await githubGet(`/repos/${src.repo}/contents/${dir.path}?ref=${src.branch}`); - if (subRes.status === 200) { - const subFiles = JSON.parse(subRes.data); - const subSol = subFiles.filter(f => f.name.endsWith(".sol") && f.type === "file"); - for (const sol of subSol) { - const contractName = sol.name.replace(".sol", ""); - if (!knownNames.has(contractName)) { - newContracts.push({ name: contractName, repo: src.repo, branch: src.branch, path: `${dir.path}/${sol.name}` }); - } - } - } - } catch (_) {} - await sleep(100); - } - } - } catch (_) {} - } - - if (newContracts.length > 0) { - // Filter out known non-contract files (interfaces, libraries, test files) - newContracts = newContracts.filter(c => - !c.name.startsWith("I") && // Interfaces (IBondingManager, etc.) - !c.name.endsWith("Test") && - !c.name.endsWith("Mock") && - !c.path.includes("test") && - !c.path.includes("mock") - ); - } - - if (newContracts.length > 0) { - console.log(` ⚠ ${newContracts.length} Solidity files in source repos not in contract data:`); - for (const nc of newContracts) { - console.log(` - ${nc.name} (${nc.repo}@${nc.branch}: ${nc.path})`); - } - warnings.push({ type: "new-contracts-detected", contracts: newContracts }); - } else { - console.log(" ✓ No unknown contracts detected in source repos"); - } - - return warnings; -} - -// ── Main ──────────────────────────────────────────────────────────────────── +const { + buildBlockchainContractsPageData, + buildChainPayload, + buildHistoricalArtifacts, + buildHistoricalEntriesFromEventLogs, + buildContractProofCatalog, + computeIncidentFingerprint, + decodeSetContractInfoLog, + diffBranchWatchState, + fetchControllerSetContractInfoLogs, + resolveCodeSource, + resolveDeploymentArtifact, + resolveRepoPath, + resolveRuntimeConsumerEvidence, + resolveAuthority, + resolveGovernorSeries, + runContractsPipeline, +} = require("../../operations/scripts/automations/content/data/contracts/pipeline.js"); async function main() { - // Load supplement - const supplement = JSON.parse(fs.readFileSync(SUPPLEMENT_PATH, "utf8")); - - // Fetch from governor-scripts - const { addresses: governor, sha } = await fetchGovernorAddresses(); - - // Merge - const merged = mergeData(governor, supplement); - - // Verify against Arbiscan/Etherscan - console.log("\nVerifying addresses..."); - merged.arbitrumOne.current = await verifyAddresses(merged.arbitrumOne.current, "arbitrumOne"); - merged.ethereumMainnet.current = await verifyAddresses(merged.ethereumMainnet.current, "ethereumMainnet"); - - // Enrich with live metadata (Arbiscan/Etherscan + Blockscout) - console.log("\nEnriching metadata..."); - merged.arbitrumOne.current = await enrichMetadata(merged.arbitrumOne.current, "arbitrumOne"); - merged.ethereumMainnet.current = await enrichMetadata(merged.ethereumMainnet.current, "ethereumMainnet"); - - // Enrich historical entries (skip already-enriched via .bak diff) - console.log("\nEnriching historical entries..."); - merged.arbitrumOne.historical = await enrichHistorical(merged.arbitrumOne.historical, "arbitrumOne"); - merged.ethereumMainnet.historical = await enrichHistorical(merged.ethereumMainnet.historical, "ethereumMainnet"); - - // Validate: abort if suspiciously low count - const arbCount = merged.arbitrumOne.current.length; - const ethCount = merged.ethereumMainnet.current.length; - if (arbCount < 20) { - console.error(`ERROR: Only ${arbCount} Arbitrum entries parsed (expected 20+). Aborting to prevent data loss.`); - process.exit(1); - } - if (ethCount < 15) { - console.error(`ERROR: Only ${ethCount} Mainnet entries parsed (expected 15+). Aborting to prevent data loss.`); - process.exit(1); - } - - // Write data file - writeDataFile(merged, sha); - - // Post-generation health check — validate widget-critical fields and API endpoints - if (!DRY_RUN) { - await runHealthCheck(merged); - } - - // Validate source repos — check contractCodeHref links, detect new contracts - if (!DRY_RUN && !SKIP_VERIFY) { - const sourceWarnings = await validateSources(merged); - if (sourceWarnings.length > 0) { - // Append to health check file - const checksPath = path.join(path.dirname(OUTPUT_PATH), "_health-checks.json"); - try { - const existing = JSON.parse(fs.readFileSync(checksPath, "utf8")); - existing.sourceValidation = sourceWarnings; - fs.writeFileSync(checksPath, JSON.stringify(existing, null, 2)); - } catch (_) { - fs.writeFileSync(checksPath, JSON.stringify({ sourceValidation: sourceWarnings }, null, 2)); - } - } - } - - // Scan-fix if requested - if (SCAN_FIX) { - scanAndFix(merged); + const dryRun = process.argv.includes("--dry-run"); + const check = process.argv.includes("--check"); + const skipVerify = process.argv.includes("--skip-verify"); + if (dryRun && check) { + throw new Error("--dry-run and --check are mutually exclusive"); } + await runContractsPipeline({ dryRun, check, skipVerify }); } -// ── Post-generation health check ─────────────────────────────────────────── -// Validates: Blockscout API shape, RPC eth_call, keccakHash presence, -// registeredInController consistency. Creates GitHub issue on failure. - -// ── Historical entry enrichment ───────────────────────────────────────────── -// Enriches deprecated target implementations with on-chain data. -// Skips entries that already have enrichment data from a previous run (.bak diff). -// Only makes Blockscout address info + creation tx calls (lightweight). - -async function enrichHistorical(historical, network) { - if (SKIP_VERIFY || !historical || Object.keys(historical).length === 0) return historical; - - const isArbitrum = network === "arbitrumOne"; - const blockscoutBase = isArbitrum ? "https://arbitrum.blockscout.com" : "https://eth.blockscout.com"; - const explorerBase = isArbitrum ? "https://arbiscan.io/address/" : "https://etherscan.io/address/"; - const label = isArbitrum ? "Arbitrum" : "Ethereum"; - const fmt = (d) => new Date(d).toLocaleDateString('en-GB', { day: 'numeric', month: 'short', year: 'numeric' }); - - // Load previous historical data for diff - const prevData = loadPreviousData(); - const prevHistorical = prevData?.[network]?.historical || {}; - - let total = 0; - let enriched = 0; - let skipped = 0; - - for (const [group, groupData] of Object.entries(historical)) { - const prevGroup = prevHistorical[group]; - - for (let i = 0; i < groupData.entries.length; i++) { - const entry = groupData.entries[i]; - total++; - - // Skip if already enriched in previous run - const prevEntry = prevGroup?.entries?.find(e => e.address.toLowerCase() === entry.address.toLowerCase()); - if (prevEntry?.deployedAt && prevEntry?.verified !== undefined) { - // Copy previous enrichment data - Object.assign(entry, { ...prevEntry, address: entry.address, version: entry.version }); - skipped++; - continue; - } - - // Enrich via Blockscout - try { - const addrRes = await httpsGet(`${blockscoutBase}/api/v2/addresses/${entry.address}`); - if (addrRes.status === 200) { - const d = JSON.parse(addrRes.data); - entry.type = "target"; - entry.statusLabel = "Deprecated"; - entry.verified = d.is_verified || false; - entry.blockchainHref = `${explorerBase}${entry.address}`; - if (d.name) entry.blockscoutLabel = d.name; - if (d.creator_address_hash) entry.creatorAddress = d.creator_address_hash; - - // Get deploy date from creation tx - if (d.creation_transaction_hash) { - try { - const txRes = await httpsGet(`${blockscoutBase}/api/v2/transactions/${d.creation_transaction_hash}`); - if (txRes.status === 200) { - const txData = JSON.parse(txRes.data); - if (txData.timestamp) entry.deployedAt = fmt(txData.timestamp); - } - } catch (_) {} - } - - // Compute replacedBy from array position - if (i < groupData.entries.length - 1) { - entry.replacedBy = groupData.entries[i + 1].version; - } else { - entry.replacedBy = "current"; - } - - enriched++; - } - } catch (err) { - console.log(` ⚠ ${group} ${entry.version}: ${err.message}`); - } - await sleep(200); +if (require.main === module) { + main().catch((error) => { + console.error(`Error: ${error.message}`); + if (Array.isArray(error.failures)) { + error.failures.forEach((failure) => { + console.error(`- ${failure.failureClass}: ${failure.endpoint}: ${failure.detail}`); + }); } - } - - console.log(` ${label} historical: ${enriched} enriched, ${skipped} cached, ${total} total`); - return historical; -} - -async function runHealthCheck(data) { - console.log("\n── Health Check ──"); - const checks = []; - - // Known addresses for probing - const LPT_ARB = "0x289ba1701C2F088cf0faf8B3705246331cB8A839"; - const BM_ARB = "0x35Bcf3c30594191d53231E4FF333E8A770453e40"; - const CONTROLLER_ARB = "0xD8E8328501E9645d16Cf49539efC04f734606ee4"; - - // 1. Blockscout API shape — check required fields exist - try { - const bsRes = await httpsGet(`https://arbitrum.blockscout.com/api/v2/addresses/${LPT_ARB}`); - if (bsRes.status === 200) { - const bsData = JSON.parse(bsRes.data); - const required = ["is_contract", "is_verified", "name", "creator_address_hash"]; - const missing = required.filter(f => !(f in bsData)); - if (missing.length > 0) { - checks.push({ endpoint: "Blockscout /api/v2/addresses/", status: "FAIL", detail: `Missing fields: ${missing.join(", ")}`, affects: "ContractVerifier Mode 2, enrichment" }); - } else { - console.log(" ✓ Blockscout API shape OK"); - } - } else { - checks.push({ endpoint: "Blockscout /api/v2/addresses/", status: "FAIL", detail: `HTTP ${bsRes.status}`, affects: "All Blockscout enrichment" }); - } - } catch (err) { - checks.push({ endpoint: "Blockscout /api/v2/addresses/", status: "FAIL", detail: err.message, affects: "All Blockscout enrichment" }); - } - - // 2. RPC eth_call — verify Controller responds - try { - const bmHash = keccak256Hex("BondingManager"); - const rpcBody = JSON.stringify({ jsonrpc: "2.0", method: "eth_call", params: [{ to: CONTROLLER_ARB, data: "0xe16c7d98" + bmHash }, "latest"], id: 1 }); - const rpcRes = await httpsPost("https://arb1.arbitrum.io/rpc", rpcBody); - const rpcData = JSON.parse(rpcRes.data); - if (rpcData.result && rpcData.result.length === 66) { - const returned = "0x" + rpcData.result.slice(-40); - if (returned.toLowerCase() === BM_ARB.toLowerCase()) { - console.log(" ✓ RPC eth_call OK (Controller returns correct BondingManager)"); - } else { - checks.push({ endpoint: "Arbitrum RPC eth_call", status: "WARN", detail: `Controller returned ${returned}, expected ${BM_ARB}`, affects: "registeredInController may be stale" }); - } - } else { - checks.push({ endpoint: "Arbitrum RPC eth_call", status: "FAIL", detail: `Unexpected result: ${JSON.stringify(rpcData).slice(0, 200)}`, affects: "ContractVerifier Mode 1, registeredInController" }); - } - } catch (err) { - checks.push({ endpoint: "Arbitrum RPC eth_call", status: "FAIL", detail: err.message, affects: "ContractVerifier Mode 1, registeredInController" }); - } - - // 3. Data integrity — every entry has keccakHash - const missingHash = [ - ...data.arbitrumOne.current.filter(e => !e.meta?.keccakHash), - ...data.ethereumMainnet.current.filter(e => !e.meta?.keccakHash), - ]; - if (missingHash.length > 0) { - checks.push({ endpoint: "Data integrity", status: "FAIL", detail: `${missingHash.length} entries missing keccakHash: ${missingHash.map(e => e.name).join(", ")}`, affects: "ContractVerifier widget lookup" }); - } else { - console.log(" ✓ All entries have keccakHash"); - } - - // 4. Data integrity — Ethereum entries have explicit false (not null) for registeredInController - const nullReg = data.ethereumMainnet.current.filter(e => e.meta?.registeredInController == null); - if (nullReg.length > 0) { - checks.push({ endpoint: "Data integrity", status: "WARN", detail: `${nullReg.length} ETH entries have null registeredInController: ${nullReg.map(e => e.name).join(", ")}`, affects: "ContractVerifier dropdown filtering" }); - } else { - console.log(" ✓ All ETH entries have explicit registeredInController"); - } - - // Report - if (checks.length === 0) { - console.log(" ✓ All health checks passed"); - } else { - const fails = checks.filter(c => c.status === "FAIL"); - const warns = checks.filter(c => c.status === "WARN"); - console.log(` ${fails.length} FAIL, ${warns.length} WARN`); - for (const c of checks) { - console.log(` ${c.status === "FAIL" ? "✗" : "⚠"} ${c.endpoint}: ${c.detail}`); - console.log(` → Affects: ${c.affects}`); - } - } - - // Store checks for workflow auto-issue step - const checksPath = path.join(path.dirname(OUTPUT_PATH), "_health-checks.json"); - fs.writeFileSync(checksPath, JSON.stringify({ timestamp: new Date().toISOString(), checks }, null, 2)); - if (checks.length > 0) { - console.log(` Health check results written to ${checksPath}`); - } + process.exit(1); + }); } -main().catch((err) => { - console.error("Error:", err.message); - process.exit(1); -}); +module.exports = { + buildBlockchainContractsPageData, + buildChainPayload, + buildHistoricalArtifacts, + buildHistoricalEntriesFromEventLogs, + computeIncidentFingerprint, + decodeSetContractInfoLog, + diffBranchWatchState, + fetchControllerSetContractInfoLogs, + loadContractProofCatalog: buildContractProofCatalog, + resolveCodeSource, + resolveDeploymentArtifact, + resolveRepoPath, + resolveRuntimeConsumerEvidence, + resolveAuthority, + resolveGovernorSeries, + runContractsPipeline, +}; diff --git a/.github/scripts/fetch-discord-announcements.js b/.github/scripts/fetch-discord-announcements.js index c04161f09..66be63909 100644 --- a/.github/scripts/fetch-discord-announcements.js +++ b/.github/scripts/fetch-discord-announcements.js @@ -1,18 +1,13 @@ /** * @script fetch-discord-announcements - * @type automation - * @concern content - * @niche data/fetching + * @category automation * @purpose infrastructure:data-feeds - * @description Fetches announcements from Discord channels via bot token. Writes per-product - * JSX data files from config.products[].discord and per-channel JSX files from - * config.globals.discord[]. Each entry produces a specific output file. - * @mode generate - * @pipeline config → Discord API → snippets/automations/{product}/discordData.jsx - * → snippets/automations/discord/discordAnnouncementsData.jsx - * @scope .github/scripts, snippets/automations/ + * @scope generated-output + * @domain docs + * @needs R-R10 + * @purpose-statement Fetches Discord announcement feeds and writes the generated snippets/automations datasets consumed by docs surfaces. + * @pipeline P5, P6 * @usage node .github/scripts/fetch-discord-announcements.js - * @policy Announcements channel only. No general chat. Requires DISCORD_BOT_TOKEN. */ const https = require("https"); const fs = require("fs"); diff --git a/.github/scripts/fetch-ghost-blog-data.js b/.github/scripts/fetch-ghost-blog-data.js index 623272ff7..68de3989e 100644 --- a/.github/scripts/fetch-ghost-blog-data.js +++ b/.github/scripts/fetch-ghost-blog-data.js @@ -1,14 +1,12 @@ /** * @script fetch-ghost-blog-data - * @type automation - * @concern content - * @niche data/fetching + * @category automation * @purpose infrastructure:data-feeds - * @description Fetches Livepeer blog posts via public RSS feed (blog.livepeer.org/rss/). No API key required. Writes to snippets/automations/blog/ghostBlogData.jsx. - * @mode generate - * @pipeline RSS feed → snippets/automations/blog/ghostBlogData.jsx - * @scope .github/scripts, snippets/automations/blog/ - * @policy PUBLIC RSS only. No API keys. + * @scope generated-output + * @domain docs + * @needs R-R10 + * @purpose-statement Fetches the Livepeer Ghost RSS feed and writes the generated blog snippets consumed by docs surfaces. + * @pipeline P5, P6 * @usage node .github/scripts/fetch-ghost-blog-data.js */ const https = require("https"); diff --git a/.github/scripts/fetch-github-discussions.js b/.github/scripts/fetch-github-discussions.js index 71e609cbd..61ea3b63f 100644 --- a/.github/scripts/fetch-github-discussions.js +++ b/.github/scripts/fetch-github-discussions.js @@ -1,15 +1,13 @@ /** * @script fetch-github-discussions - * @type automation - * @concern content - * @niche data/fetching + * @category automation * @purpose infrastructure:data-feeds - * @description Fetches latest GitHub Discussions via public GraphQL API, writes per-product JSX data files. - * @mode generate - * @pipeline config → GitHub GraphQL API → snippets/automations/{product}/githubDiscussionsData.jsx - * @scope .github/scripts, snippets/automations/ + * @scope generated-output + * @domain docs + * @needs R-R10 + * @purpose-statement Fetches GitHub Discussions data and writes the generated snippets/automations datasets consumed by docs surfaces. + * @pipeline P5, P6 * @usage node .github/scripts/fetch-github-discussions.js - * @policy Public repos only. Uses GITHUB_TOKEN for rate limits (optional for public repos). */ const https = require("https"); const fs = require("fs"); diff --git a/.github/scripts/fetch-github-releases.js b/.github/scripts/fetch-github-releases.js index 4e58e1118..2788300c2 100644 --- a/.github/scripts/fetch-github-releases.js +++ b/.github/scripts/fetch-github-releases.js @@ -1,15 +1,13 @@ /** * @script fetch-github-releases - * @type automation - * @concern content - * @niche data/fetching + * @category automation * @purpose infrastructure:data-feeds - * @description Fetches latest GitHub Releases via public REST API, writes per-product JSX data files. - * @mode generate - * @pipeline config → GitHub REST API → snippets/automations/{product}/githubReleasesData.jsx - * @scope .github/scripts, snippets/automations/ + * @scope generated-output + * @domain docs + * @needs R-R10 + * @purpose-statement Fetches GitHub release data and writes the generated snippets/automations datasets consumed by docs surfaces. + * @pipeline P5, P6 * @usage node .github/scripts/fetch-github-releases.js - * @policy Public repos only. No auth needed for public repos. GITHUB_TOKEN optional for rate limits. */ const https = require("https"); const fs = require("fs"); diff --git a/.github/scripts/fetch-rss-blog-data.js b/.github/scripts/fetch-rss-blog-data.js index 5b76b0cdb..f74475327 100644 --- a/.github/scripts/fetch-rss-blog-data.js +++ b/.github/scripts/fetch-rss-blog-data.js @@ -1,15 +1,13 @@ /** * @script fetch-rss-blog-data - * @type automation - * @concern content - * @niche data/fetching + * @category automation * @purpose infrastructure:data-feeds - * @description Generic RSS blog fetcher. Reads product config, fetches RSS feeds (Ghost, Leaflet, etc.), writes per-product JSX data files. - * @mode generate - * @pipeline config → RSS feed → snippets/automations/{product}/blogData.jsx - * @scope .github/scripts, snippets/automations/ + * @scope generated-output + * @domain docs + * @needs R-R10 + * @purpose-statement Fetches RSS and blog feeds, then writes the generated snippets/automations datasets consumed by docs surfaces. + * @pipeline P5, P6 * @usage node .github/scripts/fetch-rss-blog-data.js - * @policy PUBLIC APIs / RSS only. No API keys for platforms we don't own. */ const https = require("https"); const http = require("http"); diff --git a/.github/scripts/generate-changelog.js b/.github/scripts/generate-changelog.js index 50fe379ce..4ef6bc5af 100644 --- a/.github/scripts/generate-changelog.js +++ b/.github/scripts/generate-changelog.js @@ -1,20 +1,12 @@ /** * @script generate-changelog - * @type automation - * @concern content - * @niche data/changelog + * @category automation * @purpose infrastructure:data-feeds - * @description Unified changelog generator for all changelog targets (solutions, contracts, resources). - * Fetches GitHub/GitLab releases (mode: releases) or commit history (mode: commits). - * Config-driven via product-social-config.json changelogs{} section. With --enhance, - * uses an LLM to summarise release notes. With --contract, fetches governor-scripts - * commits and verifies deployed addresses on-chain via Arbiscan/Etherscan. - * Falls back to raw extraction on LLM failure. Supports dual-source (GitHub + GitLab) - * with deduplication by tag_name. Backwards-compatible: falls back to legacy - * products{} scanning if changelogs{} section is absent from config. - * @mode generate - * @pipeline config → GitHub/GitLab REST API → [LLM optional] → [on-chain verify optional] → changelog.mdx - * @scope .github/scripts, v2/solutions/, v2/resources/changelog/ + * @scope generated-output + * @domain docs + * @needs R-R10 + * @purpose-statement Generates managed changelog pages from upstream release and commit data for solutions, contracts, and resources surfaces. + * @pipeline P5, P6 * @usage CHANGELOG_KEY=contracts node .github/scripts/generate-changelog.js [--dry-run] [--enhance] [--contract] * CHANGELOG_CATEGORY=solutions node .github/scripts/generate-changelog.js [--dry-run] [--enhance] * PRODUCT_KEY=daydream node .github/scripts/generate-changelog.js [--dry-run] [--enhance] diff --git a/.github/workflows/update-contract-addresses-shadow.yml b/.github/workflows/update-contract-addresses-shadow.yml new file mode 100644 index 000000000..6e3abea8b --- /dev/null +++ b/.github/workflows/update-contract-addresses-shadow.yml @@ -0,0 +1,116 @@ +name: Update Contract Addresses Shadow + +on: + schedule: + - cron: "30 2 * * *" # Daily at 02:30 UTC + + repository_dispatch: + types: [governor-scripts-update, protocol-update, bridge-update, go-livepeer-update] + + workflow_dispatch: + inputs: + skip_verify: + description: "Skip explorer verification" + type: boolean + default: false + use_test_branch: + description: "Run against TEST_BRANCH (docs-v2-dev) instead of DEPLOY_BRANCH" + type: boolean + default: true + +jobs: + shadow-contracts: + runs-on: ubuntu-latest + + permissions: + contents: read + issues: write + + steps: + - name: Checkout docs repository + uses: actions/checkout@v4 + with: + ref: ${{ inputs.use_test_branch == 'true' && vars.TEST_BRANCH || vars.DEPLOY_BRANCH }} + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: Install contracts pipeline dependencies + run: npm ci --prefix operations + + - name: Run shadow contracts pipeline + id: generate + continue-on-error: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ARBISCAN_API_KEY: ${{ secrets.ARBISCAN_API_KEY }} + ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} + ARBITRUM_RPC_URL: ${{ secrets.ARBITRUM_RPC_URL }} + ARBITRUM_RPC_FALLBACK_URL: ${{ secrets.ARBITRUM_RPC_FALLBACK_URL }} + ETHEREUM_RPC_URL: ${{ secrets.ETHEREUM_RPC_URL }} + ETHEREUM_RPC_FALLBACK_URL: ${{ secrets.ETHEREUM_RPC_FALLBACK_URL }} + run: | + set -euo pipefail + FLAGS="--check" + if [[ "${{ inputs.skip_verify }}" == "true" ]]; then FLAGS="$FLAGS --skip-verify"; fi + node .github/scripts/fetch-contract-addresses.js $FLAGS + + - name: Upload shadow pipeline artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: contracts-pipeline-shadow-artifacts + if-no-files-found: ignore + path: | + snippets/data/contract-addresses/_health-checks.json + snippets/data/contract-addresses/_branch-watch-state.json + workspace/reports/contracts/contract-pipeline-anomaly-report.json + workspace/reports/contracts/contract-pipeline-anomaly-report.md + workspace/reports/contracts/contract-pipeline-issue-payload.json + + - name: Create or update contracts incident issue + if: steps.generate.outcome == 'failure' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const fs = require('fs'); + const payloadPath = 'workspace/reports/contracts/contract-pipeline-issue-payload.json'; + if (!fs.existsSync(payloadPath)) return; + const payload = JSON.parse(fs.readFileSync(payloadPath, 'utf8')); + const { owner, repo } = context.repo; + const existing = await github.paginate(github.rest.issues.listForRepo, { + owner, + repo, + state: 'open', + labels: 'contracts,pipeline', + per_page: 100, + }); + const match = existing.find((issue) => String(issue.body || '').includes(`Incident fingerprint: \`${payload.fingerprint}\``)); + if (match) { + await github.rest.issues.update({ + owner, + repo, + issue_number: match.number, + title: payload.title, + body: payload.body, + labels: payload.labels, + }); + } else { + await github.rest.issues.create({ + owner, + repo, + title: payload.title, + body: payload.body, + labels: payload.labels, + }); + } + + - name: Fail on blocking contracts incident + if: steps.generate.outcome == 'failure' + run: | + echo "Shadow contracts pipeline failed." + exit 1 diff --git a/.github/workflows/update-contract-addresses.yml b/.github/workflows/update-contract-addresses.yml index 1713b113a..87ad09954 100644 --- a/.github/workflows/update-contract-addresses.yml +++ b/.github/workflows/update-contract-addresses.yml @@ -2,10 +2,10 @@ name: Update Contract Addresses on: schedule: - - cron: "0 2 * * 1" # Weekly Monday 02:00 UTC + - cron: "0 2 * * *" # Daily at 02:00 UTC repository_dispatch: - types: [governor-scripts-update, protocol-update, bridge-update] + types: [governor-scripts-update, protocol-update, bridge-update, go-livepeer-update] workflow_dispatch: inputs: @@ -14,13 +14,9 @@ on: type: boolean default: false skip_verify: - description: "Skip Arbiscan/Etherscan verification" + description: "Skip explorer verification" type: boolean default: false - scan_fix: - description: "Scan v2/ for stale addresses and auto-fix" - type: boolean - default: true use_test_branch: description: "Write to TEST_BRANCH (docs-v2-dev) instead of DEPLOY_BRANCH" type: boolean @@ -32,6 +28,7 @@ jobs: permissions: contents: write + issues: write steps: - name: Checkout docs repository @@ -45,93 +42,126 @@ jobs: with: node-version: "20" - - name: Fetch and verify contract addresses + - name: Install contracts pipeline dependencies + run: npm ci --prefix operations + + - name: Run contracts pipeline + id: generate + continue-on-error: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ARBISCAN_API_KEY: ${{ secrets.ARBISCAN_API_KEY }} ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} + ARBITRUM_RPC_URL: ${{ secrets.ARBITRUM_RPC_URL }} + ARBITRUM_RPC_FALLBACK_URL: ${{ secrets.ARBITRUM_RPC_FALLBACK_URL }} + ETHEREUM_RPC_URL: ${{ secrets.ETHEREUM_RPC_URL }} + ETHEREUM_RPC_FALLBACK_URL: ${{ secrets.ETHEREUM_RPC_FALLBACK_URL }} run: | + set -euo pipefail FLAGS="" if [[ "${{ inputs.dry_run }}" == "true" ]]; then FLAGS="$FLAGS --dry-run"; fi if [[ "${{ inputs.skip_verify }}" == "true" ]]; then FLAGS="$FLAGS --skip-verify"; fi - if [[ "${{ inputs.scan_fix }}" == "true" ]]; then FLAGS="$FLAGS --scan-fix"; fi node .github/scripts/fetch-contract-addresses.js $FLAGS + - name: Check canonical contracts outputs + if: steps.generate.outcome == 'success' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ARBISCAN_API_KEY: ${{ secrets.ARBISCAN_API_KEY }} + ETHERSCAN_API_KEY: ${{ secrets.ETHERSCAN_API_KEY }} + ARBITRUM_RPC_URL: ${{ secrets.ARBITRUM_RPC_URL }} + ARBITRUM_RPC_FALLBACK_URL: ${{ secrets.ARBITRUM_RPC_FALLBACK_URL }} + ETHEREUM_RPC_URL: ${{ secrets.ETHEREUM_RPC_URL }} + ETHEREUM_RPC_FALLBACK_URL: ${{ secrets.ETHEREUM_RPC_FALLBACK_URL }} + run: | + set -euo pipefail + FLAGS="--check" + if [[ "${{ inputs.skip_verify }}" == "true" ]]; then FLAGS="$FLAGS --skip-verify"; fi + node .github/scripts/fetch-contract-addresses.js $FLAGS + + - name: Upload contracts pipeline artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: contracts-pipeline-artifacts + if-no-files-found: ignore + path: | + snippets/data/contract-addresses/_health-checks.json + snippets/data/contract-addresses/_branch-watch-state.json + workspace/reports/contracts/contract-pipeline-anomaly-report.json + workspace/reports/contracts/contract-pipeline-anomaly-report.md + workspace/reports/contracts/contract-pipeline-issue-payload.json + + - name: Create or update contracts incident issue + if: steps.generate.outcome == 'failure' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const fs = require('fs'); + const payloadPath = 'workspace/reports/contracts/contract-pipeline-issue-payload.json'; + if (!fs.existsSync(payloadPath)) { + core.setFailed('Missing issue payload for failed contracts pipeline run.'); + return; + } + const payload = JSON.parse(fs.readFileSync(payloadPath, 'utf8')); + const { owner, repo } = context.repo; + const existing = await github.paginate(github.rest.issues.listForRepo, { + owner, + repo, + state: 'open', + labels: 'contracts,pipeline', + per_page: 100, + }); + const match = existing.find((issue) => String(issue.body || '').includes(`Incident fingerprint: \`${payload.fingerprint}\``)); + if (match) { + await github.rest.issues.update({ + owner, + repo, + issue_number: match.number, + title: payload.title, + body: payload.body, + labels: payload.labels, + }); + core.info(`Updated existing issue #${match.number}`); + } else { + const created = await github.rest.issues.create({ + owner, + repo, + title: payload.title, + body: payload.body, + labels: payload.labels, + }); + core.info(`Created issue #${created.data.number}`); + } + + - name: Fail on blocking contracts incident + if: steps.generate.outcome == 'failure' + run: | + echo "Contracts pipeline failed. See uploaded artifacts and issue payload." + exit 1 + - name: Check for changes id: changes + if: steps.generate.outcome == 'success' run: | if git diff --quiet; then echo "changed=false" >> $GITHUB_OUTPUT else echo "changed=true" >> $GITHUB_OUTPUT - echo "Changed files:" git diff --name-only fi - - name: Check for failures (enrichment warnings + health check) - id: failures - run: | - ISSUES="" - # Check enrichment warnings in data file - node -e " - const fs = require('fs'); - const content = fs.readFileSync('snippets/data/contract-addresses/contractAddressesData.jsx', 'utf8'); - const match = content.match(/export const contractAddresses\s*=\s*(\{[\s\S]*\});?\s*\$/); - if (!match) process.exit(0); - const data = new Function('return ' + match[1])(); - const warnings = data.meta?._warnings || []; - if (warnings.length > 0) { - const body = warnings.map(w => '- **' + w.contract + '** (' + w.source + '): ' + w.error).join('\n'); - fs.writeFileSync('/tmp/enrichment-warnings.txt', body); - console.log('enrichment_warnings=true'); - } else { - console.log('enrichment_warnings=false'); - } - " >> $GITHUB_OUTPUT - # Check health check results - HEALTH_FILE="snippets/data/contract-addresses/_health-checks.json" - if [ -f "$HEALTH_FILE" ]; then - FAIL_COUNT=$(node -e "const d=JSON.parse(require('fs').readFileSync('$HEALTH_FILE','utf8'));console.log(d.checks.filter(c=>c.status==='FAIL').length)") - if [ "$FAIL_COUNT" -gt 0 ]; then - echo "health_failures=true" >> $GITHUB_OUTPUT - node -e " - const d=JSON.parse(require('fs').readFileSync('$HEALTH_FILE','utf8')); - const body=d.checks.map(c=>'- ['+c.status+'] **'+c.endpoint+'**: '+c.detail+' → '+c.affects).join('\n'); - require('fs').writeFileSync('/tmp/health-failures.txt', body); - " - else - echo "health_failures=false" >> $GITHUB_OUTPUT - fi - else - echo "health_failures=false" >> $GITHUB_OUTPUT - fi - - - name: Create issue on pipeline failure - if: (steps.failures.outputs.enrichment_warnings == 'true' || steps.failures.outputs.health_failures == 'true') && inputs.dry_run != 'true' - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - BODY="## Contract Pipeline Failures — $(date +%Y-%m-%d)\n\n" - if [ -f /tmp/enrichment-warnings.txt ]; then - BODY="${BODY}### Enrichment Warnings\n$(cat /tmp/enrichment-warnings.txt)\n\n" - fi - if [ -f /tmp/health-failures.txt ]; then - BODY="${BODY}### Health Check Failures\n$(cat /tmp/health-failures.txt)\n\n" - fi - BODY="${BODY}### Action required\n- Check Blockscout and Etherscan API status\n- Verify API keys are valid\n- Re-run workflow after fixing\n\n_Auto-generated by update-contract-addresses.yml_" - printf "$BODY" | gh issue create \ - --title "Contract pipeline failure — $(date +%Y-%m-%d)" \ - --body-file - \ - --label "api-drift,automated" \ - --assignee "@me" - - name: Commit and push - if: steps.changes.outputs.changed == 'true' && inputs.dry_run != 'true' + if: steps.generate.outcome == 'success' && steps.changes.outputs.changed == 'true' && inputs.dry_run != 'true' run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" + git add snippets/data/contract-addresses/contractAddressesData.json git add snippets/data/contract-addresses/contractAddressesData.jsx + git add snippets/data/contract-addresses/blockchainContractsPageData.json + git add snippets/data/contract-addresses/blockchainContractsPageData.jsx git add snippets/data/contract-addresses/_health-checks.json - git add v2/ - git commit -m "chore: update contract addresses from governor-scripts [skip ci]" + git add snippets/data/contract-addresses/_branch-watch-state.json + git commit -m "chore(contracts): refresh verified contract registry" git push diff --git a/.vscode/components.code-snippets b/.vscode/components.code-snippets new file mode 100644 index 000000000..6176e818b --- /dev/null +++ b/.vscode/components.code-snippets @@ -0,0 +1,1278 @@ +{ + "AccordionGroupList": { + "scope": "mdx,markdown", + "prefix": [ + "AccordionGroupList", + "accordionGroupList" + ], + "body": [ + "AccordionGroupList num={3} />" + ], + "description": "Renders a configurable number of empty accordion sections for scaffold examples." + }, + "AccordionLayout": { + "scope": "mdx,markdown", + "prefix": [ + "AccordionLayout", + "accordionLayout" + ], + "body": [ + "AccordionLayout>Example content" + ], + "description": "Accordion Layout layout component for arranging documentation content without MDX inline styles." + }, + "AccordionTitleWithArrow": { + "scope": "mdx,markdown", + "prefix": [ + "AccordionTitleWithArrow", + "accordionTitleWithArrow" + ], + "body": [ + "AccordionTitleWithArrow text=\"example\">Example content" + ], + "description": "Accordion Title With Arrow primitive used in authored documentation and component-library examples." + }, + "BasicBtn": { + "scope": "mdx,markdown", + "prefix": [ + "BasicBtn", + "basicBtn" + ], + "body": [ + "BasicBtn />" + ], + "description": "Basic Btn primitive used in authored documentation and component-library examples." + }, + "BasicList": { + "scope": "mdx,markdown", + "prefix": [ + "BasicList", + "basicList" + ], + "body": [ + "BasicList listItems={[]} />" + ], + "description": "Basic List layout component for arranging documentation content without MDX inline styles." + }, + "BlinkingIcon": { + "scope": "mdx,markdown", + "prefix": [ + "BlinkingIcon", + "blinkingIcon" + ], + "body": [ + "BlinkingIcon color=\"example\" />" + ], + "description": "Displays an icon with a smooth blinking animation (fades between full and 30% opacity)." + }, + "BlogCard": { + "scope": "mdx,markdown", + "prefix": [ + "BlogCard", + "blogCard" + ], + "body": [ + "BlogCard title=\"example\" content=\"example\" />" + ], + "description": "Blog Card data-driven component for rendering automated or API-backed documentation content." + }, + "BlogDataLayout": { + "scope": "mdx,markdown", + "prefix": [ + "BlogDataLayout", + "blogDataLayout" + ], + "body": [ + "BlogDataLayout limit={1} />" + ], + "description": "Blog Data Layout data-driven component for rendering automated or API-backed documentation content." + }, + "BorderedBox": { + "scope": "mdx,markdown", + "prefix": [ + "BorderedBox", + "borderedBox" + ], + "body": [ + "BorderedBox>Example content" + ], + "description": "Bordered Box layout component for arranging documentation content without MDX inline styles." + }, + "CardBlogDataLayout": { + "scope": "mdx,markdown", + "prefix": [ + "CardBlogDataLayout", + "cardBlogDataLayout" + ], + "body": [ + "CardBlogDataLayout limit={1} />" + ], + "description": "Card Blog Data Layout data-driven component for rendering automated or API-backed documentation content." + }, + "CardCarousel": { + "scope": "mdx,markdown", + "prefix": [ + "CardCarousel", + "cardCarousel" + ], + "body": [ + "CardCarousel style=\"example\">Example content" + ], + "description": "Card Carousel layout component for arranging documentation content without MDX inline styles." + }, + "CardColumnsPostLayout": { + "scope": "mdx,markdown", + "prefix": [ + "CardColumnsPostLayout", + "cardColumnsPostLayout" + ], + "body": [ + "CardColumnsPostLayout limit={1} />" + ], + "description": "Card Columns Post Layout data-driven component for rendering automated or API-backed documentation content." + }, + "CardInCardLayout": { + "scope": "mdx,markdown", + "prefix": [ + "CardInCardLayout", + "cardInCardLayout" + ], + "body": [ + "CardInCardLayout limit={1} />" + ], + "description": "Card In Card Layout data-driven component for rendering automated or API-backed documentation content." + }, + "CardTitleTextWithArrow": { + "scope": "mdx,markdown", + "prefix": [ + "CardTitleTextWithArrow", + "cardTitleTextWithArrow" + ], + "body": [ + "CardTitleTextWithArrow cardProps=\"example\">Example content" + ], + "description": "Card Title Text With Arrow primitive used in authored documentation and component-library examples." + }, + "CardVideo": { + "scope": "mdx,markdown", + "prefix": [ + "CardVideo", + "cardVideo" + ], + "body": [ + "CardVideo embedUrl=\"example\" title=\"example\" />" + ], + "description": "Card Video content component for rendering reader-facing documentation content." + }, + "CenteredContainer": { + "scope": "mdx,markdown", + "prefix": [ + "CenteredContainer", + "centeredContainer" + ], + "body": [ + "CenteredContainer>Example content" + ], + "description": "Centered Container layout component for arranging documentation content without MDX inline styles." + }, + "CodeComponent": { + "scope": "mdx,markdown", + "prefix": [ + "CodeComponent", + "codeComponent" + ], + "body": [ + "CodeComponent />" + ], + "description": "Code Component content component for rendering reader-facing documentation content." + }, + "CodeSection": { + "scope": "mdx,markdown", + "prefix": [ + "CodeSection", + "codeSection" + ], + "body": [ + "CodeSection />" + ], + "description": "Thin wrapper that maps a `fields` object into the complex code block renderer." + }, + "CoinGeckoExchanges": { + "scope": "mdx,markdown", + "prefix": [ + "CoinGeckoExchanges", + "coinGeckoExchanges" + ], + "body": [ + "CoinGeckoExchanges />" + ], + "description": "Fetches and displays exchange availability for a token from the CoinGecko API." + }, + "ColumnsBlogCardLayout": { + "scope": "mdx,markdown", + "prefix": [ + "ColumnsBlogCardLayout", + "columnsBlogCardLayout" + ], + "body": [ + "ColumnsBlogCardLayout limit={1} />" + ], + "description": "Columns Blog Card Layout data-driven component for rendering automated or API-backed documentation content." + }, + "ComingSoonCallout": { + "scope": "mdx,markdown", + "prefix": [ + "ComingSoonCallout", + "comingSoonCallout" + ], + "body": [ + "ComingSoonCallout />" + ], + "description": "Renders the coming soon callout component" + }, + "ComplexCodeBlock": { + "scope": "mdx,markdown", + "prefix": [ + "ComplexCodeBlock", + "complexCodeBlock" + ], + "body": [ + "ComplexCodeBlock filename=\"example\" icon=\"example\" />" + ], + "description": "Complex Code Block content component for rendering reader-facing documentation content." + }, + "CopyText": { + "scope": "mdx,markdown", + "prefix": [ + "CopyText", + "copyText" + ], + "body": [ + "CopyText text=\"example\" label=\"example\" />" + ], + "description": "Copy Text primitive used in authored documentation and component-library examples." + }, + "CustomCallout": { + "scope": "mdx,markdown", + "prefix": [ + "CustomCallout", + "customCallout" + ], + "body": [ + "CustomCallout color=\"example\" textColor=\"example\">Example content" + ], + "description": "Displays a styled callout box with an icon and custom colors." + }, + "CustomCardTitle": { + "scope": "mdx,markdown", + "prefix": [ + "CustomCardTitle", + "customCardTitle" + ], + "body": [ + "CustomCardTitle icon=\"sparkles\" title=\"Example\" style={{}} />" + ], + "description": "Renders the custom card title component" + }, + "CustomCodeBlock": { + "scope": "mdx,markdown", + "prefix": [ + "CustomCodeBlock", + "customCodeBlock" + ], + "body": [ + "CustomCodeBlock filename=\"example\" icon=\"example\" />" + ], + "description": "Custom Code Block content component for rendering reader-facing documentation content." + }, + "CustomDivider": { + "scope": "mdx,markdown", + "prefix": [ + "CustomDivider", + "customDivider" + ], + "body": [ + "CustomDivider />" + ], + "description": "Custom Divider primitive used in authored documentation and component-library examples." + }, + "CustomResponseField": { + "scope": "mdx,markdown", + "prefix": [ + "CustomResponseField", + "customResponseField" + ], + "body": [ + "CustomResponseField description=\"Example\" />" + ], + "description": "Renders the custom response field component" + }, + "DiscordAnnouncements": { + "scope": "mdx,markdown", + "prefix": [ + "DiscordAnnouncements", + "discordAnnouncements" + ], + "body": [ + "DiscordAnnouncements limit={1} />" + ], + "description": "Discord Announcements data-driven component for rendering automated or API-backed documentation content." + }, + "DisplayCard": { + "scope": "mdx,markdown", + "prefix": [ + "DisplayCard", + "displayCard" + ], + "body": [ + "DisplayCard icon=\"example\" title=\"example\">Example content" + ], + "description": "Display Card page-structure component for frame-mode and portal layout scaffolding." + }, + "Divider": { + "scope": "mdx,markdown", + "prefix": [ + "Divider", + "divider" + ], + "body": [ + "Divider color=\"example\" />" + ], + "description": "Renders a horizontal rule (---) with proper styling for frame mode." + }, + "DoubleIconLink": { + "scope": "mdx,markdown", + "prefix": [ + "DoubleIconLink", + "doubleIconLink" + ], + "body": [ + "DoubleIconLink />" + ], + "description": "Displays a link with an icon on the left and right, plus optional text prefix." + }, + "DownloadButton": { + "scope": "mdx,markdown", + "prefix": [ + "DownloadButton", + "downloadButton" + ], + "body": [ + "DownloadButton downloadLink=\"example\" />" + ], + "description": "Download Button primitive used in authored documentation and component-library examples." + }, + "DynamicTable": { + "scope": "mdx,markdown", + "prefix": [ + "DynamicTable", + "dynamicTable" + ], + "body": [ + "DynamicTable margin=\"example\" />" + ], + "description": "Dynamic Table layout component for arranging documentation content without MDX inline styles." + }, + "EmbedMarkdown": { + "scope": "mdx,markdown", + "prefix": [ + "EmbedMarkdown", + "embedMarkdown" + ], + "body": [ + "EmbedMarkdown url=\"example\" />" + ], + "description": "Embed Markdown content component for rendering reader-facing documentation content." + }, + "ExternalContent": { + "scope": "mdx,markdown", + "prefix": [ + "ExternalContent", + "externalContent" + ], + "body": [ + "ExternalContent repoName=\"example\" githubUrl=\"example\">Example content" + ], + "description": "External Content content component for rendering reader-facing documentation content." + }, + "FlexContainer": { + "scope": "mdx,markdown", + "prefix": [ + "FlexContainer", + "flexContainer" + ], + "body": [ + "FlexContainer>Example content" + ], + "description": "Flex Container layout component for arranging documentation content without MDX inline styles." + }, + "FocusableScrollRegions": { + "scope": "mdx,markdown", + "prefix": [ + "FocusableScrollRegions", + "focusableScrollRegions" + ], + "body": [ + "FocusableScrollRegions selectors=\"example\" />" + ], + "description": "Focusable Scroll Regions primitive used in authored documentation and component-library examples." + }, + "ForumLatestLayout": { + "scope": "mdx,markdown", + "prefix": [ + "ForumLatestLayout", + "forumLatestLayout" + ], + "body": [ + "ForumLatestLayout limit={1} />" + ], + "description": "Forum Latest Layout data-driven component for rendering automated or API-backed documentation content." + }, + "FrameQuote": { + "scope": "mdx,markdown", + "prefix": [ + "FrameQuote", + "frameQuote" + ], + "body": [ + "FrameQuote author=\"example\" source=\"example\">Example content" + ], + "description": "Frame Quote content component for rendering reader-facing documentation content." + }, + "FullWidthContainer": { + "scope": "mdx,markdown", + "prefix": [ + "FullWidthContainer", + "fullWidthContainer" + ], + "body": [ + "FullWidthContainer backgroundColor=\"example\">Example content" + ], + "description": "Full Width Container layout component for arranging documentation content without MDX inline styles." + }, + "GotoCard": { + "scope": "mdx,markdown", + "prefix": [ + "GotoCard", + "gotoCard" + ], + "body": [ + "GotoCard label=\"example\" relativePath=\"example\" />" + ], + "description": "Wraps content in a Card component with a link, icon, and optional CTA." + }, + "GotoLink": { + "scope": "mdx,markdown", + "prefix": [ + "GotoLink", + "gotoLink" + ], + "body": [ + "GotoLink label=\"example\" relativePath=\"example\" />" + ], + "description": "Displays a link with an icon, typically used for internal navigation." + }, + "GridContainer": { + "scope": "mdx,markdown", + "prefix": [ + "GridContainer", + "gridContainer" + ], + "body": [ + "GridContainer columns=\"example\">Example content" + ], + "description": "Grid Container layout component for arranging documentation content without MDX inline styles." + }, + "H1": { + "scope": "mdx,markdown", + "prefix": [ + "H1", + "h1" + ], + "body": [ + "H1 icon=\"example\" iconColor=\"example\">Example content" + ], + "description": "H1 page-structure component for frame-mode and portal layout scaffolding." + }, + "H2": { + "scope": "mdx,markdown", + "prefix": [ + "H2", + "h2" + ], + "body": [ + "H2 icon=\"example\" iconColor=\"example\">Example content" + ], + "description": "H2 - Custom H2 heading component for frame mode" + }, + "H3": { + "scope": "mdx,markdown", + "prefix": [ + "H3", + "h3" + ], + "body": [ + "H3 icon=\"example\" iconColor=\"example\">Example content" + ], + "description": "H3 - Custom H3 heading component for frame mode" + }, + "H4": { + "scope": "mdx,markdown", + "prefix": [ + "H4", + "h4" + ], + "body": [ + "H4 icon=\"example\" iconColor=\"example\">Example content" + ], + "description": "H4 - Custom H4 heading component for frame mode" + }, + "H5": { + "scope": "mdx,markdown", + "prefix": [ + "H5", + "h5" + ], + "body": [ + "H5 icon=\"example\" iconColor=\"example\">Example content" + ], + "description": "H5 - Custom H5 heading component for frame mode" + }, + "H6": { + "scope": "mdx,markdown", + "prefix": [ + "H6", + "h6" + ], + "body": [ + "H6 icon=\"example\" iconColor=\"example\">Example content" + ], + "description": "H6 - Custom H6 heading component for frame mode" + }, + "HeroContentContainer": { + "scope": "mdx,markdown", + "prefix": [ + "HeroContentContainer", + "heroContentContainer" + ], + "body": [ + "HeroContentContainer>Example content" + ], + "description": "Centered frame-mode container for hero content stacked over hero backgrounds." + }, + "HeroImageBackgroundComponent": { + "scope": "mdx,markdown", + "prefix": [ + "HeroImageBackgroundComponent", + "heroImageBackgroundComponent" + ], + "body": [ + "HeroImageBackgroundComponent>Example content" + ], + "description": "Absolute-positioned hero background wrapper used behind portal hero content." + }, + "HeroOverviewContent": { + "scope": "mdx,markdown", + "prefix": [ + "HeroOverviewContent", + "heroOverviewContent" + ], + "body": [ + "HeroOverviewContent>Example content" + ], + "description": "Centered hero overview wrapper for introductory portal copy blocks." + }, + "HeroSectionContainer": { + "scope": "mdx,markdown", + "prefix": [ + "HeroSectionContainer", + "heroSectionContainer" + ], + "body": [ + "HeroSectionContainer>Example content" + ], + "description": "Outer frame-mode hero section wrapper for portal layouts." + }, + "IconList": { + "scope": "mdx,markdown", + "prefix": [ + "IconList", + "iconList" + ], + "body": [ + "IconList listItems={[]} />" + ], + "description": "Icon List layout component for arranging documentation content without MDX inline styles." + }, + "Image": { + "scope": "mdx,markdown", + "prefix": [ + "Image", + "image" + ], + "body": [ + "Image src=\"example\" alt=\"example\" />" + ], + "description": "Image primitive used in authored documentation and component-library examples." + }, + "InlineImageCard": { + "scope": "mdx,markdown", + "prefix": [ + "InlineImageCard", + "inlineImageCard" + ], + "body": [ + "InlineImageCard imgProps=\"example\" imgStyle=\"example\">Example content" + ], + "description": "Inline Image Card page-structure component for frame-mode and portal layout scaffolding." + }, + "InteractiveCard": { + "scope": "mdx,markdown", + "prefix": [ + "InteractiveCard", + "interactiveCard" + ], + "body": [ + "InteractiveCard />" + ], + "description": "Interactive Card layout component for arranging documentation content without MDX inline styles." + }, + "InteractiveCards": { + "scope": "mdx,markdown", + "prefix": [ + "InteractiveCards", + "interactiveCards" + ], + "body": [ + "InteractiveCards />" + ], + "description": "Interactive Cards layout component for arranging documentation content without MDX inline styles." + }, + "LatestVersion": { + "scope": "mdx,markdown", + "prefix": [ + "LatestVersion", + "latestVersion" + ], + "body": [ + "LatestVersion version=\"example\" />" + ], + "description": "Displays the latest release version value supplied by the release-version workflow." + }, + "LinkArrow": { + "scope": "mdx,markdown", + "prefix": [ + "LinkArrow", + "linkArrow" + ], + "body": [ + "LinkArrow href=\"example\" label=\"example\" />" + ], + "description": "Link Arrow primitive used in authored documentation and component-library examples." + }, + "LinkedInEmbed": { + "scope": "mdx,markdown", + "prefix": [ + "LinkedInEmbed", + "linkedInEmbed" + ], + "body": [ + "LinkedInEmbed embedUrl=\"example\" caption=\"example\" />" + ], + "description": "Linked In Embed content component for rendering reader-facing documentation content." + }, + "LinkImage": { + "scope": "mdx,markdown", + "prefix": [ + "LinkImage", + "linkImage" + ], + "body": [ + "LinkImage src=\"example\" alt=\"example\" />" + ], + "description": "Link Image primitive used in authored documentation and component-library examples." + }, + "ListSteps": { + "scope": "mdx,markdown", + "prefix": [ + "ListSteps", + "listSteps" + ], + "body": [ + "ListSteps />" + ], + "description": "List Steps layout component for arranging documentation content without MDX inline styles." + }, + "LivepeerIcon": { + "scope": "mdx,markdown", + "prefix": [ + "LivepeerIcon", + "livepeerIcon" + ], + "body": [ + "LivepeerIcon color=\"example\" props=\"example\" />" + ], + "description": "Livepeer Icon primitive used in authored documentation and component-library examples." + }, + "LivepeerIconFlipped": { + "scope": "mdx,markdown", + "prefix": [ + "LivepeerIconFlipped", + "livepeerIconFlipped" + ], + "body": [ + "LivepeerIconFlipped props=\"example\" />" + ], + "description": "Livepeer Icon Flipped primitive used in authored documentation and component-library examples." + }, + "LivepeerIconOld": { + "scope": "mdx,markdown", + "prefix": [ + "LivepeerIconOld", + "livepeerIconOld" + ], + "body": [ + "LivepeerIconOld props=\"example\" />" + ], + "description": "Livepeer Icon Old primitive used in authored documentation and component-library examples." + }, + "LivepeerSVG": { + "scope": "mdx,markdown", + "prefix": [ + "LivepeerSVG", + "livepeerSVG" + ], + "body": [ + "LivepeerSVG props=\"example\" />" + ], + "description": "Livepeer SVG primitive used in authored documentation and component-library examples." + }, + "LogoHeroContainer": { + "scope": "mdx,markdown", + "prefix": [ + "LogoHeroContainer", + "logoHeroContainer" + ], + "body": [ + "LogoHeroContainer>Example content" + ], + "description": "Portal hero logo wrapper that centers a themed brand asset above hero content." + }, + "LumaEvents": { + "scope": "mdx,markdown", + "prefix": [ + "LumaEvents", + "lumaEvents" + ], + "body": [ + "LumaEvents data=\"example\" limit={1} />" + ], + "description": "Luma Events data-driven component for rendering automated or API-backed documentation content." + }, + "MarkdownEmbed": { + "scope": "mdx,markdown", + "prefix": [ + "MarkdownEmbed", + "markdownEmbed" + ], + "body": [ + "MarkdownEmbed url=\"/example\" />" + ], + "description": "Dynamically fetches markdown content from a remote URL and renders it. Uses React hooks to manage the fetch lifecycle" + }, + "MathBlock": { + "scope": "mdx,markdown", + "prefix": [ + "MathBlock", + "mathBlock" + ], + "body": [ + "MathBlock latex=\"example\" ariaLabel=\"example\" />" + ], + "description": "Math Block primitive used in authored documentation and component-library examples." + }, + "MathInline": { + "scope": "mdx,markdown", + "prefix": [ + "MathInline", + "mathInline" + ], + "body": [ + "MathInline latex=\"example\" ariaLabel=\"example\" />" + ], + "description": "Math Inline primitive used in authored documentation and component-library examples." + }, + "MermaidColours": { + "scope": "mdx,markdown", + "prefix": [ + "MermaidColours", + "mermaidColours" + ], + "body": [ + "MermaidColours.mermaid.light.primaryColor" + ], + "description": "Centralised colour definitions for Mermaid diagrams. Mermaid requires literal colour values and does not support CSS custom properties." + }, + "P": { + "scope": "mdx,markdown", + "prefix": [ + "P", + "p" + ], + "body": [ + "P icon=\"example\" iconColor=\"example\">Example content

" + ], + "description": "P - Custom paragraph component for frame mode" + }, + "PageHeader": { + "scope": "mdx,markdown", + "prefix": [ + "PageHeader", + "pageHeader" + ], + "body": [ + "PageHeader title=\"example\" subtitle=\"example\">Example content" + ], + "description": "H1 - Custom H1 heading component for frame mode" + }, + "PdfEmbed": { + "scope": "mdx,markdown", + "prefix": [ + "PdfEmbed", + "pdfEmbed" + ], + "body": [ + "PdfEmbed title=\"Example\" src=\"https://example.com\" />" + ], + "description": "Wraps an iframe in a Mintlify Frame so long-form external documents can be embedded with a caption and responsive width" + }, + "PortalCardsHeader": { + "scope": "mdx,markdown", + "prefix": [ + "PortalCardsHeader", + "portalCardsHeader" + ], + "body": [ + "PortalCardsHeader title=\"example\">Example content" + ], + "description": "Header wrapper for portal card groups and section intros." + }, + "PortalContentContainer": { + "scope": "mdx,markdown", + "prefix": [ + "PortalContentContainer", + "portalContentContainer" + ], + "body": [ + "PortalContentContainer>Example content" + ], + "description": "Frame-mode content wrapper for portal body sections." + }, + "PortalHeroContent": { + "scope": "mdx,markdown", + "prefix": [ + "PortalHeroContent", + "portalHeroContent" + ], + "body": [ + "PortalHeroContent description=\"example\" refCardLink=\"example\">Example content" + ], + "description": "Hero scaffold for portal landing pages with title, subtitle, supporting content, and optional callouts." + }, + "PortalSectionHeader": { + "scope": "mdx,markdown", + "prefix": [ + "PortalSectionHeader", + "portalSectionHeader" + ], + "body": [ + "PortalSectionHeader title=\"example\" icon=\"example\">Example content" + ], + "description": "Section heading wrapper for portal subsections with optional icon treatment." + }, + "PostCard": { + "scope": "mdx,markdown", + "prefix": [ + "PostCard", + "postCard" + ], + "body": [ + "PostCard title=\"example\" content=\"example\" />" + ], + "description": "Post Card data-driven component for rendering automated or API-backed documentation content." + }, + "PreviewCallout": { + "scope": "mdx,markdown", + "prefix": [ + "PreviewCallout", + "previewCallout" + ], + "body": [ + "PreviewCallout />" + ], + "description": "Renders the preview callout component" + }, + "QuadGrid": { + "scope": "mdx,markdown", + "prefix": [ + "QuadGrid", + "quadGrid" + ], + "body": [ + "QuadGrid>Example content" + ], + "description": "Quad Grid layout component for arranging documentation content without MDX inline styles." + }, + "Quote": { + "scope": "mdx,markdown", + "prefix": [ + "Quote", + "quote" + ], + "body": [ + "Quote>Example content" + ], + "description": "Quote content component for rendering reader-facing documentation content." + }, + "RefCardContainer": { + "scope": "mdx,markdown", + "prefix": [ + "RefCardContainer", + "refCardContainer" + ], + "body": [ + "RefCardContainer>Example content" + ], + "description": "Container for portal reference cards and related CTA blocks." + }, + "ResponseFieldAccordion": { + "scope": "mdx,markdown", + "prefix": [ + "ResponseFieldAccordion", + "responseFieldAccordion" + ], + "body": [ + "ResponseFieldAccordion />" + ], + "description": "Renders the response field accordion component" + }, + "ResponseFieldExpandable": { + "scope": "mdx,markdown", + "prefix": [ + "ResponseFieldExpandable", + "responseFieldExpandable" + ], + "body": [ + "ResponseFieldExpandable />" + ], + "description": "Renders the response field expandable component" + }, + "ResponseFieldGroup": { + "scope": "mdx,markdown", + "prefix": [ + "ResponseFieldGroup", + "responseFieldGroup" + ], + "body": [ + "ResponseFieldGroup />" + ], + "description": "Renders the response field group component" + }, + "ReviewCallout": { + "scope": "mdx,markdown", + "prefix": [ + "ReviewCallout", + "reviewCallout" + ], + "body": [ + "ReviewCallout />" + ], + "description": "Renders the review callout component" + }, + "ScrollableDiagram": { + "scope": "mdx,markdown", + "prefix": [ + "ScrollableDiagram", + "scrollableDiagram" + ], + "body": [ + "ScrollableDiagram>Example" + ], + "description": "──────────────────────────────────────────────────────────────" + }, + "ScrollBox": { + "scope": "mdx,markdown", + "prefix": [ + "ScrollBox", + "scrollBox" + ], + "body": [ + "ScrollBox style=\"example\">Example content" + ], + "description": "Scroll Box layout component for arranging documentation content without MDX inline styles." + }, + "SearchTable": { + "scope": "mdx,markdown", + "prefix": [ + "SearchTable", + "searchTable" + ], + "body": [ + "SearchTable margin=\"example\" />" + ], + "description": "Search Table layout component for arranging documentation content without MDX inline styles." + }, + "ShowcaseCards": { + "scope": "mdx,markdown", + "prefix": [ + "ShowcaseCards", + "showcaseCards" + ], + "body": [ + "ShowcaseCards />" + ], + "description": "Showcase Cards layout component for arranging documentation content without MDX inline styles." + }, + "ShowcaseVideo": { + "scope": "mdx,markdown", + "prefix": [ + "ShowcaseVideo", + "showcaseVideo" + ], + "body": [ + "ShowcaseVideo src=\"example\" title=\"example\" />" + ], + "description": "Showcase Video content component for rendering reader-facing documentation content." + }, + "SocialLinks": { + "scope": "mdx,markdown", + "prefix": [ + "SocialLinks", + "socialLinks" + ], + "body": [ + "SocialLinks color=\"value\" />" + ], + "description": "Renders the social links component" + }, + "Spacer": { + "scope": "mdx,markdown", + "prefix": [ + "Spacer", + "spacer" + ], + "body": [ + "Spacer />" + ], + "description": "Provides consistent spacing without requiring inline styles or empty divs in MDX files" + }, + "Starfield": { + "scope": "mdx,markdown", + "prefix": [ + "Starfield", + "starfield" + ], + "body": [ + "Starfield />" + ], + "description": "Renders the starfield component" + }, + "StepLinkList": { + "scope": "mdx,markdown", + "prefix": [ + "StepLinkList", + "stepLinkList" + ], + "body": [ + "StepLinkList listItems={[]} />" + ], + "description": "Step Link List layout component for arranging documentation content without MDX inline styles." + }, + "StepList": { + "scope": "mdx,markdown", + "prefix": [ + "StepList", + "stepList" + ], + "body": [ + "StepList listItems={[]} />" + ], + "description": "Step List layout component for arranging documentation content without MDX inline styles." + }, + "StyledStep": { + "scope": "mdx,markdown", + "prefix": [ + "StyledStep", + "styledStep" + ], + "body": [ + "StyledStep title=\"example\" icon=\"example\">Example content" + ], + "description": "Styled Step layout component for arranging documentation content without MDX inline styles." + }, + "StyledSteps": { + "scope": "mdx,markdown", + "prefix": [ + "StyledSteps", + "styledSteps" + ], + "body": [ + "StyledSteps iconColor=\"example\" titleColor=\"example\">Example content" + ], + "description": "Styled Steps layout component for arranging documentation content without MDX inline styles." + }, + "StyledTable": { + "scope": "mdx,markdown", + "prefix": [ + "StyledTable", + "styledTable" + ], + "body": [ + "StyledTable>Example content" + ], + "description": "Styled Table layout component for arranging documentation content without MDX inline styles." + }, + "Subtitle": { + "scope": "mdx,markdown", + "prefix": [ + "Subtitle", + "subtitle" + ], + "body": [ + "Subtitle text=\"example\">Example content" + ], + "description": "Subtitle primitive used in authored documentation and component-library examples." + }, + "TableCell": { + "scope": "mdx,markdown", + "prefix": [ + "TableCell", + "tableCell" + ], + "body": [ + "TableCell>Example content" + ], + "description": "Table Cell layout component for arranging documentation content without MDX inline styles." + }, + "TableRow": { + "scope": "mdx,markdown", + "prefix": [ + "TableRow", + "tableRow" + ], + "body": [ + "TableRow>Example content" + ], + "description": "Table Row layout component for arranging documentation content without MDX inline styles." + }, + "TipWithArrow": { + "scope": "mdx,markdown", + "prefix": [ + "TipWithArrow", + "tipWithArrow" + ], + "body": [ + "TipWithArrow color=\"example\">Example content" + ], + "description": "Similar to CustomCallout but includes an arrow icon in the top-right corner." + }, + "TitledVideo": { + "scope": "mdx,markdown", + "prefix": [ + "TitledVideo", + "titledVideo" + ], + "body": [ + "TitledVideo src=\"example\" title=\"example\" />" + ], + "description": "Titled Video content component for rendering reader-facing documentation content." + }, + "TwitterTimeline": { + "scope": "mdx,markdown", + "prefix": [ + "TwitterTimeline", + "twitterTimeline" + ], + "body": [ + "TwitterTimeline />" + ], + "description": "Renders the twitter timeline component" + }, + "UpdateLinkList": { + "scope": "mdx,markdown", + "prefix": [ + "UpdateLinkList", + "updateLinkList" + ], + "body": [ + "UpdateLinkList listItems={[]} />" + ], + "description": "Update Link List layout component for arranging documentation content without MDX inline styles." + }, + "UpdateList": { + "scope": "mdx,markdown", + "prefix": [ + "UpdateList", + "updateList" + ], + "body": [ + "UpdateList listItems={[]} />" + ], + "description": "Update List layout component for arranging documentation content without MDX inline styles." + }, + "ValueResponseField": { + "scope": "mdx,markdown", + "prefix": [ + "ValueResponseField", + "valueResponseField" + ], + "body": [ + "ValueResponseField description=\"Example\" />" + ], + "description": "CustomResponseField - ResponseField wrapper that hides the bottom divider" + }, + "Video": { + "scope": "mdx,markdown", + "prefix": [ + "Video", + "video" + ], + "body": [ + "Video src=\"example\" caption=\"example\">Example content" + ], + "description": "Video content component for rendering reader-facing documentation content." + }, + "WidthCard": { + "scope": "mdx,markdown", + "prefix": [ + "WidthCard", + "widthCard" + ], + "body": [ + "WidthCard cardProps=\"example\">Example content" + ], + "description": "Width Card page-structure component for frame-mode and portal layout scaffolding." + }, + "YouTubeVideo": { + "scope": "mdx,markdown", + "prefix": [ + "YouTubeVideo", + "youTubeVideo" + ], + "body": [ + "YouTubeVideo embedUrl=\"example\" caption=\"example\" />" + ], + "description": "You Tube Video content component for rendering reader-facing documentation content." + }, + "YouTubeVideoData": { + "scope": "mdx,markdown", + "prefix": [ + "YouTubeVideoData", + "youTubeVideoData" + ], + "body": [ + "YouTubeVideoData limit={1} />" + ], + "description": "YouTubeVideoData - Renders YouTube videos from youtubeData.jsx format" + } +} diff --git a/.vscode/templates.code-snippets b/.vscode/templates.code-snippets index 3fecd3adb..a8f37db86 100644 --- a/.vscode/templates.code-snippets +++ b/.vscode/templates.code-snippets @@ -7,9 +7,9 @@ "title: 'FAQ Page Template Title'", "sidebarTitle: 'FAQ Template'", "description: 'Describe the page intent and the reader outcome.'", - "audience: everyone", - "pageType: faq", - "purpose: faq", + "audience: community", + "pageType: reference", + "purpose: reference", "status: draft", "lastVerified: 2026-03-12", "keywords:", @@ -365,10 +365,10 @@ }, "Page Template: Overview Page Template": { "scope": "mdx,markdown", - "prefix": "lp-overview", + "prefix": "template-overview-page", "body": [ "---", - "title: 'Overview Page Title'", + "title: 'Overview Page Template Title'", "sidebarTitle: 'Overview'", "description: 'Explain the concept, feature, or workflow at a glance.'", "audience: developer", @@ -386,6 +386,11 @@ "'og:image:height': 630", "---", "", + "import { Quote } from '/snippets/components/content/quote.jsx'", + "", + " Orchestrator pools are operator-run GPU pools where multiple GPU providers contribute hardware to a single Livepeer orchestrator, which aggregates capacity, routes jobs, and distributes rewards. ", + "", + "", "## Overview", "", "Summarize the problem space, why it matters, and what the reader should understand before going deeper.", @@ -409,6 +414,259 @@ ], "description": "Reusable overview page scaffold with an overview section, key ideas, and related links." }, + "Page Template: Page-structure-template": { + "scope": "mdx,markdown", + "prefix": "template-page-composition-framework", + "body": [ + "---", + "title: 'Page-structure-template Title'", + "sidebarTitle: 'Page-structure-template'", + "description: 'Describe the page intent and the reader outcome.'", + "audience: developer", + "pageType: landing", + "purpose: landing", + "status: draft", + "lastVerified: 2026-03-12", + "keywords:", + " - livepeer", + " - keyword", + "'og:image': /snippets/assets/site/og-image/fallback.png", + "'og:image:alt': Livepeer Docs social preview image", + "'og:image:type': image/png", + "'og:image:width': 1200", + "'og:image:height': 630", + "---", + "", + "{/* IMPORTS */}", + "\"import { Quote } from '/snippets/components/content/quote.jsx'\"\"", + "", + "{/* ==========================PAGE SECTION: HEADER========================= */}", + "{/*", + "PAGE SECTION: HEADER:", + "- PAGE ELEMENT: Frontmatter Title", + "- PAGE ELEMENT: Frontmatter Description", + "- PAGE ELEMENT: [OPT] Header CTA", + "*/}", + "{/*", + "PAGE ELEMENT: Header CTA", + "- WRAP ELEMENT IN ", + "Header CTA OPTIONS", + "- DEFINITION OR VALUE PROP: ,", + "- CLARITY CALLOUT: ", + "- CTA OR DIRECT REFERENCE LINK: NO CHILDREN", + "- CODE START: ", + "- MENTAL MODEL: Markdown + Components", + "- PAGE HELP: Views at top right! ", + "*/}", + " Definition: Page Taxonomy helps create a clear flow and homogenise style for readers. ", + " Clarity Callout: This is a major point in this page that is often confused or needs highlighting ", + "} arrow horizontal />", + "", + "", + "{/* PAGE ELEMENT: CUSTOM DIVIDER */}", + "", + "", + "{/* ==========================PAGE SECTION: INTRODUCTION========================= */}", + "{/*", + "PAGE SECTION: INTRODUCTION:", + "- PAGE ELEMENT: Overview", + "*/}", + "{/*", + "PAGE ELEMENT: OVERVIEW", + "- Style: normal text", + "- Content:", + " - Value Prop", + " - Context", + " - Outline", + " - What this is.", + " - Why it matters to you.", + "- Do:", + " - DECODE JARGON", + " - Lead with the value proposition", + " -", + "- Dont:", + " - Use jargon, Livepeer or web3 - specific Abbreviations (unless technical - but link to definition ex: [HLS](\"glossary or wikipedia link\")", + " - Use qualifiers, explanation by negation,", + "*/}", + "What this is.", + "Why it matters to you.", + "", + "{/* ==========================PAGE SECTION: BODY========================= */}", + "{/*", + "PAGE ELEMENT: BODY SECTION 1 HEADER", + "- Style: H1", + "- Content: Concept Terminology", + " - Purpose: Concise Descriptor name for the section contents", + " - Concise Terminology for / Descriptor of Section Content", + " - Can act as a discoverability key for section contents", + " - ✔ User knows exactly what is in the section without even seeing it", + " - ✔ An AI would know what question this section answered.", + " - DO:", + " - USe Governing-Concept Content descriptors,", + " - Technical, Professional Descriptors", + " - Under 3 words", + " - DONT:", + " - Use questions", + " - Use Question Frame words: \"What, How, When, Why\"", + " - Use a sentence", + " - or other descriptors (eg What You Earn), Numbers (eg: Three Reasons), First Person, Negation", + " - Use Quantified/Numbered Framing or Number-led headings (eg: Three Choices, Two Setup Options)", + " - Use Numbers", + " - Use Comparators (Differences, vs,)", + " - Use Literal Labels", + " - Use Generic Descriptors,", + " - Use Taxonomy Mismatches", + " - EXAMPLES:", + " - ✘ How Pools Work | ✔ Pool Mechanics", + " - ✘ What You Earn | ✔ Rewards, Incentives, Profitability, Reward Model", + " - ✘ Before You Start | ✔ Setup Checklist, Requirements, Prerequisites", + " - ✘ What Changes | ✔ Deployment Modes, Node Modes, Runtime Types", + " - NOTE: Name says nothing about the content Reader has no idea what this section is about. This title is not a descriptor", + " - ✘ When to use this setup | ✔", + " - ✘ Three Setup Paths | ~ Setup Options (better) | ✔ Deployment Types (best) -> gives clarity, provides terminology definition", + " - ✘ The Two Workload Types | ~ Workload Types | ✔ AI Runtime Pipelines (best) | ✔ AI Modality Pipelines | ~ AI Processing Modalities | ✔ AI Modality Workflows | ~Execution/Runtime Modalities, ✔ AI Modality Workflows | AI Execution Workflows | AI Modality Profiles", + " - ✘ | ✔", + " - ✘ | ✔", + " - ✘ | ✔", + "*/}", + "", + "{/*", + "PAGE ELEMENT: BODY SECTION 1 HEADER", + "- Style: H1", + "- Content: Concept Terminology", + " - DO: Technical, Professional, Under 3 words", + " - DONT: Question, Sentence,", + "*/}", + "", + "", + "", + "{/* ==========================PAGE SECTION: FOOTER========================= */}", + "{/*", + "[OPT] PAGE ELEMENT: RELATED PAGES", + "- Purpose:", + " - concise routing to related resources", + " - navigation for rest of a section", + "- Style: COLUMN with CARD", + "- Component: description", + "- Content:", + " - DO:", + " - title: 1-3 words", + " - description: ONE SENTENCE MAX 10 WORDS", + " - description: description of link content", + " - DONT:", + " - description: Repeat title [instead: remove | offer description]", + " - description: Rephrase title [instead: remove | offer description]", + "*/}", + "", + "", + "", + "{/* ==========================PAGE TAXONOMY GUIDE========================= */}", + "{/*", + "DO:", + "- Use Colored Badges or icons to provide major category differentiation", + "*/}", + "{/*", + "DONT:", + "- Use more than one major layout element [Table, Steps] per page (if not nested)", + " - ex:", + "- Use more than one of the same layout element", + "*/}" + ], + "description": "Describe page-structure-template" + }, + "Page Template: Changelog": { + "scope": "mdx,markdown", + "prefix": "template-changelog-template", + "body": [ + "---", + "title: 'Changelog Title'", + "sidebarTitle: 'Changelog'", + "description: 'Describe the page intent and the reader outcome.'", + "audience: community", + "pageType: reference", + "purpose: update", + "status: current", + "lastVerified: YYYY-MM-DD", + "keywords:", + " - livepeer", + " - changelog", + " - updates", + " - section", + "'og:image': /snippets/assets/site/og-image/fallback.png", + "'og:image:alt': Livepeer Docs social preview image", + "'og:image:type': image/png", + "'og:image:width': 1200", + "'og:image:height': 630", + "---", + "", + "{/*", + " CHANGELOG TEMPLATE", + " ──────────────────", + " Use this template for any section- or product-level changelog.", + "", + " TAGS — pick from or extend this set:", + " Content | Structure | Features | Fixes | Breaking | Deprecation |", + " Governance | Contributions | AI | Migration | Security | Performance", + "", + " RSS — used for changelog feeds; keep title and description concise.", + "", + " ORDER — most recent entry first.", + "*/}", + "", + "[One sentence describing what this changelog tracks and where readers can find protocol-level changes.]", + "", + "", + "", + "> New releases and improvements", + "", + "", + " ## Entry Title", + "", + "- Change or addition — link to relevant page if applicable", + "- Change or addition", + "- Change or addition", + "", + "One sentence describing the impact or context for this set of changes.", + "", + "", + "", + "", + " ## Entry Title", + "", + "- Change or addition", + "- Change or addition", + "", + "One sentence describing the impact or context.", + "", + "", + "", + "", + "", + "## How to Read This Changelog", + "", + "- **Tags** indicate the type of change — see tag set in the template comment above", + "- **RSS** entries provide machine-readable metadata for changelog feeds", + "- **Updates** are organised chronologically (most recent first)", + "", + "", + "", + "## Related Resources", + "", + "", + " ", + " Short description", + " ", + " ", + " Short description", + " ", + "", + "", + "", + "", + "*Last updated: YYYY-MM-DD*" + ], + "description": "Track significant updates to [product or section name]. For protocol changes, see the Livepeer Improvement Proposals (LIPs) and Livepeer Forum." + }, "Page Template: Reference Page Template": { "scope": "mdx,markdown", "prefix": "lp-reference", @@ -462,6 +720,709 @@ ], "description": "Lookup-oriented reference scaffold with inputs, outputs, and a concrete example." }, + "Page Template: {DISPLAY_NAME} Changelog": { + "scope": "mdx,markdown", + "prefix": "template-changelog-automated-template", + "body": [ + "---", + "title: '{DISPLAY_NAME} Changelog Title'", + "sidebarTitle: 'Changelog'", + "description: 'Describe the page intent and the reader outcome.'", + "audience: [object Object]", + "pageType: changelog", + "purpose: changelog", + "status: current", + "lastVerified: YYYY-MM-DD", + "keywords:", + " - [object Object]", + " - livepeer", + " - changelog", + " - [object Object]", + "'og:image': /snippets/assets/site/og-image/fallback.png", + "'og:image:alt': Livepeer Docs social preview image", + "'og:image:type': image/png", + "'og:image:width': 1200", + "'og:image:height': 630", + "---", + "", + "{/*", + " ┌─────────────────────────────────────────────────────────────────────────┐", + " │ AUTOMATED CHANGELOG TEMPLATE — generalised for all changelog types │", + " │ │", + " │ Two modes (set in changelogs{} section of product-social-config.json):│", + " │ releases — GitHub/GitLab release tags (solutions, go-livepeer) │", + " │ commits — Commit history, path-filtered (governor-scripts, docs) │", + " │ │", + " │ Placeholders to replace before use: │", + " │ {DISPLAY_NAME} — Display name (e.g. \"Protocol Contracts\") │", + " │ {PRODUCT_KEY} — kebab-case key matching changelogs{} config entry │", + " │ {DESCRIPTION} — One-line description for frontmatter │", + " │ {AUDIENCE} — Mintlify audience (everyone | builder | general) │", + " │ {KEYWORDS} — Additional SEO keywords │", + " │ {SOURCE_URL} — Link target for source tracking line │", + " │ {SOURCE_LABEL} — \"GitHub\" or \"GitLab\" │", + " │ {PATH} — Nav path prefix (solutions | resources/changelog) │", + " │ │", + " │ Setup steps: │", + " │ 1. Copy to correct output path (target.outputPath in config) │", + " │ 2. Replace all {PLACEHOLDERS} │", + " │ 3. Add to docs.json nav under the correct group │", + " │ 4. Register entry in changelogs{} in product-social-config.json │", + " │ 5. Verify dry-run: CHANGELOG_KEY={PRODUCT_KEY} node │", + " │ .github/scripts/generate-changelog.js --dry-run │", + " │ │", + " │ Reference implementations: │", + " │ v2/solutions/daydream/changelog.mdx — releases, LLM-enhanced │", + " │ v2/solutions/streamplace/changelog.mdx — releases, dual-source │", + " │ v2/resources/changelog/contracts.mdx — commits, on-chain verify │", + " │ │", + " │ Workflow: .github/workflows/update-changelogs.yml │", + " │ Script: .github/scripts/generate-changelog.js │", + " └─────────────────────────────────────────────────────────────────────────┘", + "*/}", + "", + "import { CustomDivider } from '/snippets/components/elements/spacing/Divider.jsx'", + "import { LinkArrow, DoubleIconLink } from '/snippets/components/elements/links/Links.jsx'", + "import { ScrollBox } from '/snippets/components/wrappers/containers/ScrollBox.jsx'", + "import { LazyLoad } from '/snippets/components/wrappers/containers/LazyLoad.jsx'", + "", + "", + " This page is an automated workflow.", + "
Subscribe to this changelog's
", + "
", + "", + "", + "", + "{/* MODE: releases — uncomment and fill {SOURCE_URL} and {SOURCE_LABEL} */}", + "Track releases for on {SOURCE_LABEL}.", + "", + "{/* MODE: commits — replace the line above with this:", + "Track changes to on GitHub.", + "*/}", + "", + "", + "", + "{/* ──────────────────────────────────────────────", + " AUTOMATION ZONE — entries below are populated by workflow.", + "", + " ── MODE: releases (Option A — LLM enhanced) ──", + "", + " Month YYYY}>", + " ## vX.Y.Z", + "", + " _AI Summary_", + "", + " #### New Features", + "", + " - **Feature name** - One sentence.", + "", + " ", + "", + " _Release Notes_", + "", + " ", + " Full release notes from the maintainer.", + " ", + "", + " ", + " ", + "", + " ── MODE: releases (Option B — raw extraction) ──", + "", + " Month YYYY}>", + " ## vX.Y.Z", + "", + " ", + " Extracted highlights from release notes.", + " ", + "", + " ", + " ", + "", + " ── MODE: commits ──", + "", + " Month YYYY}>", + " ## {shortSha}", + "", + " Commit message (single line inline, or ScrollBox for multi-line).", + "", + " ", + " ", + "", + " ── RULES ──", + " - label: version tag (releases) or short SHA 7 chars (commits)", + " - description: date in styled div (Month YYYY)", + " - tags: Features | Fixes | Performance | Breaking | Release | Commit | {RepoLabel}", + " - For GitLab sources: iconLeft=\"gitlab\", label=\"View release on GitLab\"", + " - Wrap all entries in for deferred rendering", + "", + " ────────────────────────────────────────────── */}" + ], + "description": "{DESCRIPTION}" + }, + "Page Template: {PRODUCT_NAME} Changelog": { + "scope": "mdx,markdown", + "prefix": "template-changelog-solutions-template", + "body": [ + "---", + "title: '{PRODUCT_NAME} Changelog Title'", + "sidebarTitle: 'Changelog'", + "description: 'Describe the page intent and the reader outcome.'", + "audience: builder", + "pageType: changelog", + "purpose: changelog", + "status: current", + "lastVerified: YYYY-MM-DD", + "keywords:", + " - [object Object]", + " - livepeer", + " - changelog", + " - releases", + " - [object Object]", + "'og:image': /snippets/assets/site/og-image/fallback.png", + "'og:image:alt': Livepeer Docs social preview image", + "'og:image:type': image/png", + "'og:image:width': 1200", + "'og:image:height': 630", + "---", + "", + "{/*", + " ┌─────────────────────────────────────────────────────────────────────────┐", + " │ CHANGELOG TEMPLATE — Solutions Products │", + " │ │", + " │ Purpose: Automated changelog page for any solution product that │", + " │ publishes GitHub releases. Populated by the │", + " │ update-{product}-changelog.yml GitHub Action. │", + " │ │", + " │ Usage: │", + " │ 1. Copy this file to v2/solutions/{product}/changelog.mdx │", + " │ 2. Replace all {PLACEHOLDERS} with product-specific values │", + " │ 3. Add the page to docs.json under the product's nav group │", + " │ 4. Create a matching workflow + script (see setup instructions below) │", + " │ │", + " │ Placeholders: │", + " │ {PRODUCT_NAME} — Display name (e.g. \"Daydream\") │", + " │ {PRODUCT_KEY} — kebab-case key (e.g. \"daydream\") │", + " │ {PRODUCT_DESCRIPTION} — One-line product description │", + " │ {GITHUB_ORG} — GitHub org (e.g. \"daydreamlive\") │", + " │ {GITHUB_REPO} — Main repo (e.g. \"scope\") │", + " │ {DISCORD_URL} — Product Discord invite URL │", + " │ {KEYWORDS} — Comma-separated keywords for SEO │", + " │ │", + " │ GitHub Action setup: │", + " │ 1. Ensure product is in product-social-config.json with │", + " │ releasesActive: true (single repo) or changelogRepos[] (multi) │", + " │ 2. Create this changelog.mdx page and add to docs.json │", + " │ 3. The shared workflow update-solutions-changelog.yml handles the │", + " │ rest — no per-product script or workflow needed │", + " │ 4. (Optional) Add OPENROUTER_API_KEY secret for LLM enhancement │", + " │ │", + " │ The script supports two modes: │", + " │ - Default: Extracts highlights from GitHub release notes │", + " │ - --enhance: Uses LLM (OpenRouter/Copilot) to summarise, with │", + " │ per-release fallback to default on failure │", + " │ │", + " │ Reference implementation: v2/solutions/daydream/changelog.mdx │", + " └─────────────────────────────────────────────────────────────────────────┘", + "*/}", + "", + "import { CustomDivider } from '/snippets/components/elements/spacing/Divider.jsx'", + "import { LinkArrow, DoubleIconLink } from '/snippets/components/elements/links/Links.jsx'", + "import { ScrollBox } from '/snippets/components/wrappers/containers/ScrollBox.jsx'", + "import { BorderedBox } from '/snippets/components/wrappers/containers/Containers.jsx'", + "import { LazyLoad } from '/snippets/components/wrappers/containers/LazyLoad.jsx'", + "", + "", + " This page is an automated workflow.", + "
Subscribe to this changelog's
", + "
", + "", + "", + "", + "Track releases for on GitHub.", + "", + "", + "", + "{/* ──────────────────────────────────────────────", + " AUTOMATION ZONE — entries below are populated by workflow.", + "", + " Each release uses a Mintlify block. Two content modes:", + "", + " ── MODE A: Enhanced (--enhance flag, LLM summary + raw notes) ──", + "", + " Month YYYY}>", + " ## vX.Y.Z", + "", + " **_AI Summary_**", + "", + " - **Feature name** — One sentence. Terse. Product-facing only.", + " - **Fixed issue** — What was broken and how it was resolved.", + "", + " ", + "", + " ", + " Full release notes from the maintainer (raw, unedited).", + " These are the engineer's original notes preserved for detail.", + " ", + "", + " ", + " ", + "", + " ── MODE B: Raw extraction (no LLM, default) ──", + "", + " Month YYYY}>", + " ## vX.Y.Z", + "", + " ", + " Extracted highlights from the release notes.", + " ", + "", + " ", + " ", + "", + " ── RULES ──", + " - label: version only (e.g. \"v0.1.9\" or \"Scope: v0.1.9\" for multi-repo)", + " - description: date in styled div (Month YYYY)", + " - tags: Features, Fixes, Performance, Breaking, Release, {RepoLabel}", + " - LLM summary: Icon user-robot + italic \"AI Summary\" label, divider span underneath", + " - Raw notes: in ScrollBox maxHeight=\"250px\" — scrollable detail", + " - Link: DoubleIconLink with github or gitlab icon", + " - For GitLab sources: iconLeft=\"gitlab\", label=\"View release on GitLab\"", + "", + " ────────────────────────────────────────────── */}" + ], + "description": "Release history for {PRODUCT_NAME} — {PRODUCT_DESCRIPTION}." + }, + "Page Template: Livepeer Glossary": { + "scope": "mdx,markdown", + "prefix": "template-glossary-consolidated", + "body": [ + "---", + "title: 'Livepeer Glossary Title'", + "sidebarTitle: 'Glossary'", + "description: 'Describe the page intent and the reader outcome.'", + "audience: community", + "pageType: reference", + "purpose: reference", + "status: draft", + "lastVerified: YYYY-MM", + "keywords:", + " - livepeer", + " - glossary", + " - terminology", + " - definitions", + " - reference", + "'og:image': /snippets/assets/site/og-image/fallback.png", + "'og:image:alt': Livepeer Docs social preview image", + "'og:image:type': image/png", + "'og:image:width': 1200", + "'og:image:height': 630", + "---", + "", + "{/*", + " TEMPLATE: Consolidated / Resource Hub Glossary", + " USE FOR: The single unified glossary at v2/resources/livepeer-glossary.mdx", + " SOURCE DATA:", + " - tasks/plan/active/TERMINOLOGY-COLLATE/consolidated/glossary-a-m.md (~285 terms A–M)", + " - tasks/plan/active/TERMINOLOGY-COLLATE/consolidated/glossary-n-z.md (~195 terms N–Z)", + " - tasks/plan/active/TERMINOLOGY-COLLATE/consolidated/glossary-index.md (cross-tab + gap list)", + " OUTPUT PATH: v2/resources/livepeer-glossary.mdx", + "", + " ⚠️ AI DISCOVERABILITY NOTE:", + " SearchTable renders CLIENT-SIDE ONLY — glossary terms are NOT in the initial HTML.", + " This page MUST have a companion JSON file:", + " v2/resources/glossary-consolidated.json", + " Format: { \"terms\": [{ \"term\": \"\", \"definition\": \"\", \"tags\": [], \"tabs\": [], \"external\": \"\" }] }", + " Without this, AI agents and crawlers cannot index any of the ~480 terms on this page.", + " See Task 13 in the TERMINOLOGY-COLLATE plan for the auto-generation script.", + "*/}", + "", + "{/*", + " @aiDiscoverability tier-2", + " Companion: [page-slug]-data.json (auto-generated by pre-commit script — do not edit manually)", + " Mechanism:", + " Tier 2 — Pre-commit script parses SearchTable itemsList props, extracts term data,", + " writes [page-slug]-data.json adjacent to this MDX for crawler/AI agent indexing.", + " Tier 1 (snapshot) — Not applicable here; see snippets/data/snapshots/ for deploy-time API snapshots.", + " Pre-commit: Will fail if companion JSON is missing or stale.", + " Do not remove or rename the SearchTable itemsList prop — the parser depends on it.", + "*/}", + "", + "import { SearchTable } from '/snippets/components/wrappers/tables/SearchTable.jsx'", + "import { CustomDivider } from '/snippets/components/elements/spacing/Divider.jsx'", + "", + "{/* ==========================SECTION: SEARCH TIP========================= */}", + "{/*", + " SEARCH TIP BLOCK — always include. Do not move below the fold.", + "*/}", + "", + "**Finding terms quickly**", + "- **Cmd+K** (Mac) / **Ctrl+K** (Windows) — search all Livepeer docs", + "- **Cmd+F** (Mac) / **Ctrl+F** (Windows) — search within this page", + "- Use the **Category** and **Tab** filters to narrow by domain or section", + "", + "", + "{/* ==========================SECTION: INTRO========================= */}", + "{/*", + " INTRO — two sentences max.", + " Sentence 1: what this glossary covers (all terms, all tabs, all domains)", + " Sentence 2: who it is for (everyone — developers, operators, delegators, community)", + " Do not restate the title. Do not use \"this page\".", + "*/}", + "[Sentence 1: scope — all terms across the Livepeer network.] [Sentence 2: who benefits.]", + "", + "", + "", + "{/* ==========================SECTION: OVERVIEW TABLE========================= */}", + "{/*", + " OVERVIEW TABLE — full-glossary SearchTable with category + tab columns.", + " Props:", + " headerList [REQ] Always: [\"Term\", \"Category\", \"Tabs\", \"Definition\"]", + " itemsList [REQ] All ~480 unique terms from consolidated/ source files.", + " searchColumns [OPT] Recommended: [0, 3] (Term + Definition)", + " TableComponent [OPT] Default: DynamicTable.", + "", + " DATA FORMAT per item:", + " { Term: \"\", Category: \"domain:subcategory\", Tabs: \"home, lpt, community\", Definition: \"\" }", + "", + " SOURCE:", + " - consolidated/glossary-a-m.md (A–M terms)", + " - consolidated/glossary-n-z.md (N–Z terms)", + " ORDER: Alphabetical by Term (A–Z).", + " SCOPE: Every unique term across all 9 tabs.", + "", + " ⚠️ Mirror ALL term data in v2/resources/glossary-consolidated.json (see AI note above).", + "*/}", + "", + "", + "", + "", + "{/* ==========================SECTION: FULL DEFINITIONS — A–Z========================= */}", + "{/*", + " FULL DEFINITIONS — alphabetical AccordionGroup sections.", + " One AccordionGroup per letter that has terms. Omit empty letters.", + " Group heading: ## A, ## B, ## C ... ## Z", + "", + " Per-term Accordion format:", + " title = Term name (expand abbreviation: \"HLS (HTTP Live Streaming)\")", + " icon = \"book-open\"", + " content:", + " - Definition (required)", + " - Tags (domain:subcategory tags — always include)", + " - Tabs (which tabs this term appears in — always include)", + " - Context (Livepeer-specific terms only)", + " - External (industry terms only)", + " - Also known as (if applicable)", + " - Pages: representative pages (1-3 max for consolidated — not all pages)", + " - Status: current | deprecated | draft", + "", + " HEADING RULES:", + " - Letter headings: ## A (not \"## A — Terms starting with A\" or similar)", + " - Do not number headings", + " - Do not add descriptors to letter headings", + "*/}", + "", + "## A", + "", + "", + " ", + " **Definition**: One clear sentence.", + "", + " **Tags**: `domain:subcategory`", + "", + " **Tabs**: home, lpt, community", + "", + " **Context**: How Livepeer uses this specifically. _(Livepeer terms only)_", + "", + " **External**: [Source Name](url) _(Industry terms only)_", + "", + " **Also known as**: Alias or deprecated name _(remove if none)_", + "", + " **Status**: current", + "", + " **Pages**: `about/path`, `lpt/path`", + " ", + "", + "", + "{/* Repeat ## B, ## C ... ## Z sections as needed. Omit letters with no terms. */}", + "", + "", + "", + "{/* ==========================SECTION: FOOTER========================= */}", + "{/*", + " FOOTER — navigation cards to related resources.", + " 3 cards max. Titles: 1-3 words. Descriptions: one sentence, max 10 words.", + "*/}", + "", + " ", + " Gateway-specific terms for operators", + " ", + " ", + " Orchestrator setup and protocol terms", + " ", + " ", + " Guides, references, and community tools", + " ", + "" + ], + "description": "Complete glossary of terms used across the Livepeer Real-time AI & Video Network — protocol, video, AI, web3, and operational terminology." + }, + "Page Template: [Tab] Glossary": { + "scope": "mdx,markdown", + "prefix": "template-glossary-tab", + "body": [ + "---", + "title: '[Tab] Glossary Title'", + "sidebarTitle: 'Glossary'", + "description: 'Describe the page intent and the reader outcome.'", + "audience: tab-audience", + "pageType: reference", + "purpose: reference", + "status: draft", + "lastVerified: YYYY-MM", + "keywords:", + " - livepeer", + " - glossary", + " - tab", + " - terminology", + "'og:image': /snippets/assets/site/og-image/fallback.png", + "'og:image:alt': Livepeer Docs social preview image", + "'og:image:type': image/png", + "'og:image:width': 1200", + "'og:image:height': 630", + "---", + "", + "{/*", + " TEMPLATE: Per-Tab Glossary", + " USE FOR: One glossary page per docs tab (home, about, solutions, developers,", + " gateways, orchestrators, lpt, community, resources).", + " SOURCE DATA: tasks/plan/active/TERMINOLOGY-COLLATE/per-tab/glossary-[tab].md", + " OUTPUT PATH: v2/resources/glossary/[tab].mdx", + "", + " ⚠️ AI DISCOVERABILITY NOTE:", + " SearchTable renders CLIENT-SIDE ONLY — glossary terms are NOT in the initial HTML.", + " This page MUST have a companion JSON file at the same path:", + " v2/resources/glossary/[tab].json", + " Format: { \"terms\": [{ \"term\": \"\", \"definition\": \"\", \"tags\": [], \"external\": \"\" }] }", + " Without this, AI agents and crawlers cannot index the glossary content.", + " See Task 13 in the TERMINOLOGY-COLLATE plan for the auto-generation script.", + "*/}", + "", + "{/*", + " @aiDiscoverability tier-2", + " Companion: [page-slug]-data.json (auto-generated by pre-commit script — do not edit manually)", + " Mechanism:", + " Tier 2 — Pre-commit script parses SearchTable itemsList props, extracts term data,", + " writes [page-slug]-data.json adjacent to this MDX for crawler/AI agent indexing.", + " Tier 1 (snapshot) — Not applicable here; see snippets/data/snapshots/ for deploy-time API snapshots.", + " Pre-commit: Will fail if companion JSON is missing or stale.", + " Do not remove or rename the SearchTable itemsList prop — the parser depends on it.", + "*/}", + "", + "import { SearchTable } from '/snippets/components/wrappers/tables/SearchTable.jsx'", + "import { CustomDivider } from '/snippets/components/elements/spacing/Divider.jsx'", + "", + "{/* ==========================SECTION: SEARCH TIP========================= */}", + "{/*", + " SEARCH TIP BLOCK — always include on glossary pages.", + " Instructs users how to navigate this page before scrolling.", + " Do not remove or move below the fold.", + "*/}", + "", + "**Finding terms quickly**", + "- **Cmd+K** (Mac) / **Ctrl+K** (Windows) — search all Livepeer docs", + "- **Cmd+F** (Mac) / **Ctrl+F** (Windows) — search within this page", + "- Use the category filter below to narrow by topic", + "", + "", + "{/* ==========================SECTION: INTRO========================= */}", + "{/*", + " INTRO — one sentence max. State what tab this covers and who it is for.", + " Do: audience-specific scope (\"terms used across gateway setup and operation\")", + " Don't: restate the page title, use \"this page\", generic filler", + "*/}", + "[One sentence: what terms this glossary covers and who needs it.]", + "", + "", + "", + "{/* ==========================SECTION: SEARCHABLE TABLE========================= */}", + "{/*", + " SEARCHTABLE — filterable term list.", + " Props:", + " headerList [REQ] Column labels. Always: [\"Term\", \"Category\", \"Definition\"]", + " itemsList [REQ] Array of term objects. Keys must match headerList exactly.", + " searchColumns [OPT] Columns to search across. Default: all. Recommended: [0, 2]", + " TableComponent [OPT] Underlying table renderer. Default: DynamicTable.", + "", + " DATA FORMAT per item:", + " { Term: \"term name\", Category: \"domain:subcategory\", Definition: \"one sentence\" }", + "", + " SOURCE: Pull from tasks/plan/active/TERMINOLOGY-COLLATE/per-tab/glossary-[tab].md", + " SCOPE: Include all terms for this tab. One row per unique term.", + " ORDER: Alphabetical by Term.", + "", + " ⚠️ Mirror this data in the companion [tab].json file (see AI discoverability note above).", + "*/}", + "", + "", + "", + "", + "{/* ==========================SECTION: FULL DEFINITIONS========================= */}", + "{/*", + " FULL DEFINITIONS — AccordionGroup sections by domain.", + " One AccordionGroup per domain (livepeer, video, ai, web3, economic, technical, operational).", + " Only include domains that have terms in this tab — omit empty domains.", + "", + " Per-term Accordion format:", + " title = Term name (expand abbreviation if applicable: \"HLS (HTTP Live Streaming)\")", + " icon = \"book-open\" for definitions", + " content:", + " - Definition (required)", + " - Context (Livepeer-specific terms only — how Livepeer uses this specifically)", + " - External (industry terms only — Wikipedia/HuggingFace/ethereum.org link)", + " - Also known as (if term has aliases or deprecated names)", + " - Pages: where in this tab this term appears", + "", + " Rules:", + " - Livepeer-specific terms (livepeer:* tags): include Context, omit External", + " - Industry/video/ai/web3/technical terms: include External, omit Context", + " - Status: current | deprecated | draft — always include", + " - Deprecated terms: note what replaced them", + "*/}", + "", + "## [Domain Name] Terms", + "", + "{/*", + " DOMAIN SECTION HEADING RULES:", + " - Use the domain name as a plain section heading (## Livepeer Protocol, ## Video, ## AI, etc.)", + " - Do not number sections", + " - Only include sections that have terms in this tab", + "*/}", + "", + "", + " ", + " **Definition**: One clear sentence.", + "", + " **Context**: How Livepeer uses this specifically. _(Livepeer terms only — remove line for industry terms)_", + "", + " **External**: [Source Name](url) _(Industry terms only — remove line for Livepeer terms)_", + "", + " **Also known as**: Alias or deprecated name _(remove if none)_", + "", + " **Status**: current", + "", + " **Pages**: `[tab]/path/to/page`", + " ", + "", + "", + "", + "", + "{/* ==========================SECTION: FOOTER========================= */}", + "{/*", + " FOOTER — related pages cards.", + " Use 2-3 cards max. Link to: tab's main landing page, related glossary, troubleshooting/FAQ.", + " Card title: 1-3 words. Description: one sentence, max 10 words.", + " Do not repeat the title in the description.", + "*/}", + "", + " ", + " [One sentence description — not a restatement of the title]", + " ", + " ", + " All terms across every Livepeer tab", + " ", + " ", + " [One sentence description]", + " ", + "" + ], + "description": "Key terms and definitions for the Livepeer [tab] section — [one sentence scope]." + }, + "Page Template: Troubleshooting Page Template": { + "scope": "mdx,markdown", + "prefix": "template-troubleshooting-page", + "body": [ + "---", + "title: 'Troubleshooting Page Template Title'", + "sidebarTitle: 'Troubleshooting Template'", + "description: 'Describe the page intent and the reader outcome.'", + "audience: everyone", + "pageType: troubleshooting", + "purpose: troubleshooting", + "status: draft", + "lastVerified: 2026-03-12", + "keywords:", + " - livepeer", + " - troubleshooting", + " - template", + "'og:image': /snippets/assets/site/og-image/fallback.png", + "'og:image:alt': Livepeer Docs social preview image", + "'og:image:type': image/png", + "'og:image:width': 1200", + "'og:image:height': 630", + "---", + "", + "{/* Copy this template into a routable docs path and replace the placeholder content. */}", + "", + "# Troubleshooting Page Title", + "", + "Explain when readers should use this page and what system or workflow it covers.", + "", + "## Troubleshooting", + "", + "", + " ", + " **Symptom**", + " Describe the failure condition readers will notice.", + "", + " **Cause**", + " Explain the most likely root cause.", + "", + " **Fix**", + " Provide the corrective action.", + "", + " **Verify**", + " Describe how readers confirm the fix worked.", + " ", + " ", + " **Symptom**", + " Describe the failure condition readers will notice.", + "", + " **Cause**", + " Explain the most likely root cause.", + "", + " **Fix**", + " Provide the corrective action.", + "", + " **Verify**", + " Describe how readers confirm the fix worked.", + " ", + "" + ], + "description": "Copy-ready troubleshooting page scaffold with Symptom, Cause, Fix, and Verify sections." + }, "Page Template: Multi-View Setup Template": { "scope": "mdx,markdown", "prefix": "template-multi-view-page", @@ -713,69 +1674,6 @@ ], "description": "Copy-ready scaffold for setup guides that switch between platform or environment views and include nested mode tabs, code blocks, reference cards, and validation steps." }, - "Page Template: Troubleshooting Page Template": { - "scope": "mdx,markdown", - "prefix": "template-troubleshooting-page", - "body": [ - "---", - "title: 'Troubleshooting Page Template Title'", - "sidebarTitle: 'Troubleshooting Template'", - "description: 'Describe the page intent and the reader outcome.'", - "audience: everyone", - "pageType: troubleshooting", - "purpose: troubleshooting", - "status: draft", - "lastVerified: 2026-03-12", - "keywords:", - " - livepeer", - " - troubleshooting", - " - template", - "'og:image': /snippets/assets/site/og-image/fallback.png", - "'og:image:alt': Livepeer Docs social preview image", - "'og:image:type': image/png", - "'og:image:width': 1200", - "'og:image:height': 630", - "---", - "", - "{/* Copy this template into a routable docs path and replace the placeholder content. */}", - "", - "# Troubleshooting Page Title", - "", - "Explain when readers should use this page and what system or workflow it covers.", - "", - "## Troubleshooting", - "", - "", - " ", - " **Symptom**", - " Describe the failure condition readers will notice.", - "", - " **Cause**", - " Explain the most likely root cause.", - "", - " **Fix**", - " Provide the corrective action.", - "", - " **Verify**", - " Describe how readers confirm the fix worked.", - " ", - " ", - " **Symptom**", - " Describe the failure condition readers will notice.", - "", - " **Cause**", - " Explain the most likely root cause.", - "", - " **Fix**", - " Provide the corrective action.", - "", - " **Verify**", - " Describe how readers confirm the fix worked.", - " ", - "" - ], - "description": "Copy-ready troubleshooting page scaffold with Symptom, Cause, Fix, and Verify sections." - }, "Page Template: Tutorial Page Template": { "scope": "mdx,markdown", "prefix": "lp-tutorial", diff --git a/docs-guide/catalog/components-catalog.mdx b/docs-guide/catalog/components-catalog.mdx index a742196fd..2fce5319b 100644 --- a/docs-guide/catalog/components-catalog.mdx +++ b/docs-guide/catalog/components-catalog.mdx @@ -199,11 +199,9 @@ The governed component library currently exposes **127** named export(s). | --- | --- | --- | --- | --- | | EmbedMarkdown | `content` | `/snippets/components/content/embed.jsx` | `stable` | Embed Markdown content component for rendering reader-facing documentation content. | | LinkedInEmbed | `content` | `/snippets/components/content/video.jsx` | `stable` | Linked In Embed content component for rendering reader-facing documentation content. | -| MarkdownEmbed | `content` | `/snippets/components/content/embed.jsx` | `stable` | Markdown Embed content component for rendering reader-facing documentation content. | | ResponseFieldGroup | `content` | `/snippets/components/content/responseField.jsx` | `stable` | Renders the response field group component | | BlogDataLayout | `data` | `/snippets/components/data/data.jsx` | `stable` | Blog Data Layout data-driven component for rendering automated or API-backed documentation content. | | CardInCardLayout | `data` | `/snippets/components/data/data.jsx` | `stable` | Card In Card Layout data-driven component for rendering automated or API-backed documentation content. | -| MarkdownEmbed | `data` | `/snippets/components/data/embed.jsx` | `stable` | Dynamically fetches markdown content from a remote URL and renders it. Uses React hooks to manage the fetch lifecycle | | AccordionGroupList | `layout` | `/snippets/components/layout/accordionGroupList.jsx` | `stable` | Renders a configurable number of empty accordion sections for scaffold examples. | | CardCarousel | `layout` | `/snippets/components/layout/card-carousel.jsx` | `stable` | Card Carousel layout component for arranging documentation content without MDX inline styles. | | FullWidthContainer | `layout` | `/snippets/components/layout/containers.jsx` | `stable` | Full Width Container layout component for arranging documentation content without MDX inline styles. | @@ -224,7 +222,5 @@ The governed component library currently exposes **127** named export(s). | LinkImage | `primitives` | `/snippets/components/primitives/image.jsx` | `stable` | Link Image primitive used in authored documentation and component-library examples. | | LivepeerIconFlipped | `primitives` | `/snippets/components/primitives/icons.jsx` | `stable` | Livepeer Icon Flipped primitive used in authored documentation and component-library examples. | | LivepeerIconOld | `primitives` | `/snippets/components/primitives/icons.jsx` | `stable` | Livepeer Icon Old primitive used in authored documentation and component-library examples. | -| LivepeerSVG | `primitives` | `/snippets/components/primitives/icons.jsx` | `stable` | Livepeer SVG primitive used in authored documentation and component-library examples. | | ReviewCallout | `primitives` | `/snippets/components/primitives/previewCallouts.jsx` | `stable` | Renders the review callout component | -| SocialLinks | `primitives` | `/snippets/components/primitives/socialLinks.jsx` | `stable` | Renders the social links component | | Spacer | `primitives` | `/snippets/components/primitives/spacer.jsx` | `stable` | Provides consistent spacing without requiring inline styles or empty divs in MDX files | diff --git a/docs-guide/catalog/pages-catalog.mdx b/docs-guide/catalog/pages-catalog.mdx index 3e2bb3733..bc661ad53 100644 --- a/docs-guide/catalog/pages-catalog.mdx +++ b/docs-guide/catalog/pages-catalog.mdx @@ -32,6 +32,7 @@ Run command: node tools/scripts/generate-docs-guide-pages-index.js --write + @@ -41,8 +42,11 @@ Run command: node tools/scripts/generate-docs-guide-pages-index.js --write - - + + + + + @@ -195,6 +199,11 @@ Run command: node tools/scripts/generate-docs-guide-pages-index.js --write + + + + + @@ -229,7 +238,6 @@ Run command: node tools/scripts/generate-docs-guide-pages-index.js --write - @@ -366,29 +374,98 @@ Run command: node tools/scripts/generate-docs-guide-pages-index.js --write + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + - - - + + @@ -400,185 +477,239 @@ Run command: node tools/scripts/generate-docs-guide-pages-index.js --write + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + - - - + + + + - - + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + + + + + + + + - - - - - - + + + + - - - - - + + - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - + + + + + + + - diff --git a/docs-guide/catalog/scripts-catalog.mdx b/docs-guide/catalog/scripts-catalog.mdx index 7ecefca8a..7a224573e 100644 --- a/docs-guide/catalog/scripts-catalog.mdx +++ b/docs-guide/catalog/scripts-catalog.mdx @@ -36,9 +36,15 @@ Run command: node tests/unit/script-docs.test.js --write --rebuild-indexes | Script | Summary | Usage | Domain | |---|---|---|---| +| `.github/scripts/fetch-contract-addresses.js` | Fetches and verifies Livepeer contract-address data, then generates the contracts datasets and canonical page inputs consumed by docs-v2. | `node .github/scripts/fetch-contract-addresses.js [--dry-run] [--check] [--skip-verify]` | docs | +| `.github/scripts/fetch-discord-announcements.js` | Fetches Discord announcement feeds and writes the generated snippets/automations datasets consumed by docs surfaces. | `node .github/scripts/fetch-discord-announcements.js` | docs | | `.github/scripts/fetch-forum-data.js` | Fetches latest topics and posts from Livepeer Forum API, writes to snippets/automations/forum/ | `node .github/scripts/fetch-forum-data.js [flags]` | docs | -| `.github/scripts/fetch-ghost-blog-data.js` | Fetches blog posts from Ghost CMS API, writes to snippets/automations/blog/ | `node .github/scripts/fetch-ghost-blog-data.js [flags]` | docs | +| `.github/scripts/fetch-ghost-blog-data.js` | Fetches the Livepeer Ghost RSS feed and writes the generated blog snippets consumed by docs surfaces. | `node .github/scripts/fetch-ghost-blog-data.js` | docs | +| `.github/scripts/fetch-github-discussions.js` | Fetches GitHub Discussions data and writes the generated snippets/automations datasets consumed by docs surfaces. | `node .github/scripts/fetch-github-discussions.js` | docs | +| `.github/scripts/fetch-github-releases.js` | Fetches GitHub release data and writes the generated snippets/automations datasets consumed by docs surfaces. | `node .github/scripts/fetch-github-releases.js` | docs | +| `.github/scripts/fetch-rss-blog-data.js` | Fetches RSS and blog feeds, then writes the generated snippets/automations datasets consumed by docs surfaces. | `node .github/scripts/fetch-rss-blog-data.js` | docs | | `.github/scripts/fetch-youtube-data.js` | Fetches video data from YouTube Data API, writes to snippets/automations/youtube/ | `node .github/scripts/fetch-youtube-data.js [flags]` | docs | +| `.github/scripts/generate-changelog.js` | Generates managed changelog pages from upstream release and commit data for solutions, contracts, and resources surfaces. | `CHANGELOG_KEY=contracts node .github/scripts/generate-changelog.js [--dry-run] [--enhance] [--contract] CHANGELOG_CATEGORY=solutions node .github/scripts/generate-changelog.js [--dry-run] [--enhance] PRODUCT_KEY=daydream node .github/scripts/generate-changelog.js [--dry-run] [--enhance]` | docs | | `.github/scripts/project-showcase-sync.js` | Fetches project showcase data from external source, writes to snippets/automations/showcase/ | `node .github/scripts/project-showcase-sync.js [flags]` | docs | ## tests @@ -57,6 +63,7 @@ Run command: node tests/unit/script-docs.test.js --write --rebuild-indexes | `tests/run-pr-checks.js` | PR orchestrator — runs changed-file scoped validation checks for pull request CI. Dispatches per-file validators based on PR diff. | `node tests/run-pr-checks.js [flags]` | docs | | `tests/unit/ai-tools-registry.test.js` | Validates the AI-tools registry contract, full tracked ai-tools coverage, and the Wave 1 inventory source-of-truth boundary. | `node tests/unit/ai-tools-registry.test.js [--staged|--files path[,path]]` | docs | | `tests/unit/audit-script-inventory-repair-rules.test.js` | Tests audit-script-inventory repair hardening rules for judgement-field backfill and pipeline safety. | `node tests/unit/audit-script-inventory-repair-rules.test.js` | docs | +| `tests/unit/authoring-tools.test.js` | Unit tests for repo-owned authoring tools — verifies MDX formatting and real-path completion/validation helpers. | `node tests/unit/authoring-tools.test.js` | docs | | `tests/unit/check-agent-docs-freshness.test.js` | Tests the agent governance freshness validator against the canonical runtime file set. | `node tests/unit/check-agent-docs-freshness.test.js` | docs | | `tests/unit/codex-commit.test.js` | Tests codex-commit.js — validates commit message generation and contract compliance | `node tests/unit/codex-commit.test.js [flags]` | docs | | `tests/unit/codex-safe-merge-with-stash.test.js` | Tests codex-safe-merge-with-stash.js — asserts the deprecated stash helper hard-fails and points callers to the supported Codex lifecycle | `node tests/unit/codex-safe-merge-with-stash.test.js [flags]` | docs | @@ -153,6 +160,7 @@ Run command: node tests/unit/script-docs.test.js --write --rebuild-indexes | `tools/scripts/dev/generate-mint-dev-scope.js` | Mint dev scope generator — creates a scoped docs.json for running mint dev on a subset of pages | `node tools/scripts/dev/generate-mint-dev-scope.js [flags]` | docs | | `tools/scripts/dev/lib/resolve-scoped-docs-config.js` | Scoped docs config resolver — resolves named scoped navigation configs and explicit docs config paths for mint-dev tooling | `node -e "require('./tools/scripts/dev/lib/resolve-scoped-docs-config')"` | docs | | `tools/scripts/dev/mint-custom-loader.sh` | Mint custom loader — launches lpd dev with an alternate docs config as the active Mint navigation source. | `bash tools/scripts/dev/mint-custom-loader.sh [flags]` | docs | +| `tools/scripts/dev/rename-vscode-codex-chat.js` | VS Code Codex chat rename utility — finds recent VS Code chat session files, filters to Codex sessions, and updates the stored customTitle without manual JSON editing. | `node tools/scripts/dev/rename-vscode-codex-chat.js --title "New title" [--workspace <path>]` | docs | | `tools/scripts/dev/replace-og-image.py` | Deprecated wrapper for the legacy OG image replacement helper. Use the canonical OG generator workflow instead. | `python3 tools/scripts/dev/replace-og-image.py` | docs | | `tools/scripts/dev/seo-generator-safe.js` | Deprecated wrapper for the legacy safe SEO generator. Use the canonical OG generator workflow instead. | `node tools/scripts/dev/seo-generator-safe.js` | docs | | `tools/scripts/dev/test-add-callouts.js` | Test for add-callouts.js — validates callout insertion logic against fixtures | `node tools/scripts/dev/test-add-callouts.js [flags]` | docs | @@ -169,6 +177,7 @@ Run command: node tests/unit/script-docs.test.js --write --rebuild-indexes | `tools/scripts/enforcers/pr/check-component-immutability.js` | Flags modifications to existing component files in PR context. New files allowed. Modifications require approval label. | `node tools/scripts/enforcers/pr/check-component-immutability.js --base-ref main` | docs | | `tools/scripts/enforcers/pr/check-pr-template.js` | Enforces that PR descriptions include required change and rationale sections before merge | `PR_BODY="..." node tools/scripts/enforcers/pr/check-pr-template.js` | docs | | `tools/scripts/export-portable-skills.js` | Portable skills exporter — copies canonical template skills into cross-agent pack folders and validates drift. | `node tools/scripts/export-portable-skills.js --write|--check [--skills name[,name...]]` | docs | +| `tools/scripts/format-mdx.js` | MDX formatter — applies the repo-owned conservative MDX formatter used by the Livepeer authoring extension. | `node tools/scripts/format-mdx.js [--check|--write] [--files a,b]` | docs | | `tools/scripts/generate-ai-sitemap.js` | AI sitemap generator — produces AI-optimised sitemap files. Dual-mode: --check (enforcer) / --write (generator). | `node tools/scripts/generate-ai-sitemap.js [flags]` | docs | | `tools/scripts/generate-ai-skills-indexes.js` | Generates ai-tools/ai-skills inventory.json and content-map.md from the canonical agent-governance surface manifest. | `node tools/scripts/generate-ai-skills-indexes.js [--check|--write]` | docs | | `tools/scripts/generate-component-docs.js` | Generates published component library MDX pages from the registry. Replaces update-component-library.sh. | `node tools/scripts/generate-component-docs.js [--dry-run|--fix|--write|--check] [--template-only] [--category <name>]` | docs | @@ -206,6 +215,7 @@ Run command: node tests/unit/script-docs.test.js --write --rebuild-indexes | `tools/scripts/i18n/test/provider-openrouter.test.js` | Tests OpenRouter provider — validates API call logic and response parsing | `node tools/scripts/i18n/test/provider-openrouter.test.js [flags]` | docs | | `tools/scripts/i18n/translate-docs.js` | Translation generator — translates v2 MDX pages to target languages via OpenRouter API | `node tools/scripts/i18n/translate-docs.js [flags]` | docs | | `tools/scripts/i18n/validate-generated.js` | Generated localisation validator — checks generated translated MDX files and route-map outputs for integrity | `node tools/scripts/i18n/validate-generated.js [flags]` | docs | +| `tools/scripts/install-authoring-tools-extension.js` | VS Code/Cursor authoring tools installer — installs the repo-owned Livepeer authoring extension into local editor extension directories. | `node tools/scripts/install-authoring-tools-extension.js [--targets vscode,cursor] [--force]` | docs | | `tools/scripts/lib/docs-path-sync.js` | Shared docs path sync library — detects staged page moves, plans deterministic route rewrites, and applies governed docs.json/path reference updates. | `const sync = require('./docs-path-sync');` | docs | | `tools/scripts/lint-copy.js` | Enforce banned word and phrase rules on MDX content files. | `node tools/scripts/lint-copy.js [file or glob] [flags]` | docs | | `tools/scripts/lint-patterns.js` | Enforce Tier 2 copy pattern rules on MDX content files. | `node tools/scripts/lint-patterns.js [file or glob] [flags]` | docs | diff --git a/docs-guide/catalog/ui-templates.mdx b/docs-guide/catalog/ui-templates.mdx index d867b61ad..81cf2c373 100644 --- a/docs-guide/catalog/ui-templates.mdx +++ b/docs-guide/catalog/ui-templates.mdx @@ -51,8 +51,27 @@ Run command: node tools/scripts/generate-ui-templates.js --write + + + + + + + + + + + + + + + + + + + @@ -61,6 +80,7 @@ Run command: node tools/scripts/generate-ui-templates.js --write + @@ -78,9 +98,23 @@ Run command: node tools/scripts/generate-ui-templates.js --write | Portal Page Template | `snippets/templates/pages/landing-and-navigation/portal-page.mdx` | [view](/templates/pages/landing-and-navigation/portal-page-template) | `template-portal-page` | Copy-ready portal landing page scaffold with frame-mode hero content and mission cards. | | Landing Frame Page Template | `snippets/templates/pages/landing-frame-page.mdx` | [view](/templates/pages/landing-frame-page-template) | `lp-landing-frame` | Frame-mode landing page scaffold with hero content, start-here cards, and key-path cards. | | OpenAPI Endpoint Template | `snippets/templates/pages/openapi-endpoint-page.mdx` | [view](/templates/pages/openapi-endpoint-page-template) | `template-openapi-endpoint-page` | Copy-ready OpenAPI endpoint page scaffold with canonical reference frontmatter. | -| Overview Page Template | `snippets/templates/pages/overview-page.mdx` | [view](/templates/pages/overview-page-template) | `lp-overview` | Reusable overview page scaffold with an overview section, key ideas, and related links. | +| Overview Page Template | `snippets/templates/pages/overview-page.mdx` | [view](/templates/pages/overview-page-template) | `template-overview-page` | Reusable overview page scaffold with an overview section, key ideas, and related links. | +| Page-structure-template | `snippets/templates/pages/page-composition-framework.mdx` | [view](/templates/pages/page-composition-framework-template) | `template-page-composition-framework` | Describe page-structure-template | +| Changelog | `snippets/templates/pages/reference-and-api/changelog-template.mdx` | [view](/templates/pages/reference-and-api/changelog-template-template) | `template-changelog-template` | Track significant updates to [product or section name]. For protocol changes, see the Livepeer Improvement Proposals (LIPs) and Livepeer Forum. | | OpenAPI Endpoint Template | `snippets/templates/pages/reference-and-api/openapi-endpoint-page.mdx` | [view](/templates/pages/reference-and-api/openapi-endpoint-page-template) | `template-openapi-endpoint-page` | Copy-ready OpenAPI endpoint page scaffold with canonical reference frontmatter. | | Reference Page Template | `snippets/templates/pages/reference-page.mdx` | [view](/templates/pages/reference-page-template) | `lp-reference` | Lookup-oriented reference scaffold with inputs, outputs, and a concrete example. | +| {DISPLAY_NAME} Changelog | `snippets/templates/pages/resources/changelog-automated-template.mdx` | [view](/templates/pages/resources/changelog-automated-template-template) | `template-changelog-automated-template` | {DESCRIPTION} | +| {PRODUCT_NAME} Changelog | `snippets/templates/pages/resources/changelog-solutions-template.mdx` | [view](/templates/pages/resources/changelog-solutions-template-template) | `template-changelog-solutions-template` | Release history for {PRODUCT_NAME} — {PRODUCT_DESCRIPTION}. | +| Changelog | `snippets/templates/pages/resources/changelog-template.mdx` | [view](/templates/pages/resources/changelog-template-template) | `template-changelog-template` | Track significant updates to [product or section name]. For protocol changes, see the Livepeer Improvement Proposals (LIPs) and Livepeer Forum. | +| FAQ Page Template | `snippets/templates/pages/resources/compendium/faq-page.mdx` | [view](/templates/pages/resources/compendium/faq-page-template) | `template-faq-page` | Copy-ready FAQ page scaffold with canonical frontmatter and AccordionGroup structure. | +| Livepeer Glossary | `snippets/templates/pages/resources/compendium/glossary-consolidated-template.mdx` | [view](/templates/pages/resources/compendium/glossary-consolidated-template-template) | `template-glossary-consolidated-template` | Complete glossary of terms used across the Livepeer Real-time AI & Video Network — protocol, video, AI, web3, and operational terminology. | +| Livepeer Glossary | `snippets/templates/pages/resources/compendium/glossary-consolidated.mdx` | [view](/templates/pages/resources/compendium/glossary-consolidated-template) | `template-glossary-consolidated` | Complete glossary of terms used across the Livepeer Real-time AI & Video Network — protocol, video, AI, web3, and operational terminology. | +| [Tab] Glossary | `snippets/templates/pages/resources/compendium/glossary-tab-template.mdx` | [view](/templates/pages/resources/compendium/glossary-tab-template-template) | `template-glossary-tab-template` | Key terms and definitions for the Livepeer [tab] section — [one sentence scope]. | +| [Tab] Glossary | `snippets/templates/pages/resources/compendium/glossary-tab.mdx` | [view](/templates/pages/resources/compendium/glossary-tab-template) | `template-glossary-tab` | Key terms and definitions for the Livepeer [tab] section — [one sentence scope]. | +| Troubleshooting Page Template | `snippets/templates/pages/resources/compendium/troubleshooting-page.mdx` | [view](/templates/pages/resources/compendium/troubleshooting-page-template) | `template-troubleshooting-page` | Copy-ready troubleshooting page scaffold with Symptom, Cause, Fix, and Verify sections. | +| OpenAPI Endpoint Template | `snippets/templates/pages/resources/openapi-endpoint-page.mdx` | [view](/templates/pages/resources/openapi-endpoint-page-template) | `template-openapi-endpoint-page` | Copy-ready OpenAPI endpoint page scaffold with canonical reference frontmatter. | +| Reference Page Template | `snippets/templates/pages/resources/reference-page.mdx` | [view](/templates/pages/resources/reference-page-template) | `lp-reference` | Lookup-oriented reference scaffold with inputs, outputs, and a concrete example. | +| OpenAPI Endpoint Template | `snippets/templates/pages/resources/technical-reference/openapi-endpoint-page.mdx` | [view](/templates/pages/resources/technical-reference/openapi-endpoint-page-template) | `template-openapi-endpoint-page` | Copy-ready OpenAPI endpoint page scaffold with canonical reference frontmatter. | | Multi-View Setup Template | `snippets/templates/pages/setup-and-code-layouts/multi-view-page.mdx` | [view](/templates/pages/setup-and-code-layouts/multi-view-page-template) | `template-multi-view-page` | Copy-ready scaffold for setup guides that switch between platform or environment views and include nested mode tabs, code blocks, reference cards, and validation steps. | | Troubleshooting Page Template | `snippets/templates/pages/troubleshooting-page.mdx` | [view](/templates/pages/troubleshooting-page-template) | `template-troubleshooting-page` | Copy-ready troubleshooting page scaffold with Symptom, Cause, Fix, and Verify sections. | | Tutorial Page Template | `snippets/templates/pages/tutorial-page.mdx` | [view](/templates/pages/tutorial-page-template) | `lp-tutorial` | End-to-end tutorial scaffold with goals, prerequisites, steps, and follow-up links. | diff --git a/docs-guide/catalog/workflows-catalog.mdx b/docs-guide/catalog/workflows-catalog.mdx index 26dce1343..97954b690 100644 --- a/docs-guide/catalog/workflows-catalog.mdx +++ b/docs-guide/catalog/workflows-catalog.mdx @@ -57,12 +57,18 @@ Run command: node tools/scripts/generate-docs-guide-indexes.js --write | Docs CI - Content Quality Suite | `.github/workflows/test-suite.yml` | pull_request, push | Docs CI - Content Quality Suite | advisory or partial-advisory | step summary, PR comments/metadata | docs | | Docs CI - V2 Browser Sweep | `.github/workflows/test-v2-pages.yml` | pull_request, push | Docs CI - V2 Browser Sweep | advisory or partial-advisory | artifact upload, PR comments/metadata | docs | | Docs Translation Pipeline | `.github/workflows/translate-docs.yml` | workflow_dispatch | Docs Translation Pipeline | blocking by default (subject to branch protection) | artifact upload, step summary, PR comments/metadata | docs | -| Update Blog and Forum Data | `.github/workflows/update-blog-data.yml` | schedule, workflow_dispatch | Update Blog and Forum Data | advisory or partial-advisory | repository commits | docs | +| Update Blog and Forum Data | `.github/workflows/update-blog-data.yml` | workflow_dispatch | Update Blog and Forum Data | advisory or partial-advisory | repository commits | docs | +| Update Changelogs | `.github/workflows/update-changelogs.yml` | repository_dispatch, schedule, workflow_dispatch | Update Changelogs | advisory or partial-advisory | repository commits | docs | +| Update Contract Addresses Shadow | `.github/workflows/update-contract-addresses-shadow.yml` | repository_dispatch, schedule, workflow_dispatch | Update Contract Addresses Shadow | advisory or partial-advisory | artifact upload | docs | +| Update Contract Addresses | `.github/workflows/update-contract-addresses.yml` | repository_dispatch, schedule, workflow_dispatch | Update Contract Addresses | advisory or partial-advisory | artifact upload, repository commits | docs | +| Update Discord Announcements Data | `.github/workflows/update-discord-data.yml` | schedule, workflow_dispatch | Update Discord Announcements Data | blocking by default (subject to branch protection) | repository commits | docs | | Update Forum Data | `.github/workflows/update-forum-data.yml` | schedule, workflow_dispatch | Update Forum Data | blocking by default (subject to branch protection) | repository commits | docs | | Update Ghost Blog Data | `.github/workflows/update-ghost-blog-data.yml` | schedule, workflow_dispatch | Update Ghost Blog Data | blocking by default (subject to branch protection) | repository commits | docs | +| Update GitHub Discussions & Releases Data | `.github/workflows/update-github-data.yml` | schedule, workflow_dispatch | Update GitHub Discussions & Releases Data | blocking by default (subject to branch protection) | repository commits | docs | | Update Livepeer Release Version | `.github/workflows/update-livepeer-release.yml` | schedule, workflow_dispatch | Update Livepeer Release Version | blocking by default (subject to branch protection) | repository commits | docs | | Update Review Template | `.github/workflows/update-review-template.yml` | workflow_dispatch | Update Review Template | blocking by default (subject to branch protection) | workflow logs | docs | +| Update RSS Blog Data | `.github/workflows/update-rss-blog-data.yml` | schedule, workflow_dispatch | Update RSS Blog Data | blocking by default (subject to branch protection) | repository commits | docs | | Update YouTube Data | `.github/workflows/update-youtube-data.yml` | schedule, workflow_dispatch | Update YouTube Data | blocking by default (subject to branch protection) | repository commits | docs | | V2 External Link Audit (Advisory) | `.github/workflows/v2-external-link-audit.yml` | schedule, workflow_dispatch | V2 External Link Audit (Advisory) | advisory or partial-advisory | artifact upload, step summary | docs | -| Verify AI Sitemap | `.github/workflows/verify-ai-sitemap.yml` | pull_request, push | Verify AI Sitemap | blocking by default (subject to branch protection) | workflow logs | docs | -| Verify llms.txt Files | `.github/workflows/verify-llms-files.yml` | pull_request, push | Verify llms.txt Files | blocking by default (subject to branch protection) | workflow logs | docs | +| Verify AI Sitemap | `.github/workflows/verify-ai-sitemap.yml` | pull_request, push, workflow_dispatch | Verify AI Sitemap | blocking by default (subject to branch protection) | workflow logs | docs | +| Verify llms.txt Files | `.github/workflows/verify-llms-files.yml` | pull_request, push, workflow_dispatch | Verify llms.txt Files | blocking by default (subject to branch protection) | workflow logs | docs | diff --git a/docs-guide/component-registry.json b/docs-guide/component-registry.json index 2b894badd..ca9692e7f 100644 --- a/docs-guide/component-registry.json +++ b/docs-guide/component-registry.json @@ -1,6 +1,6 @@ { "_meta": { - "generated": "2026-03-16T18:55:06.216Z", + "generated": "2026-04-03T11:34:12.646Z", "generator": "tools/scripts/generate-component-registry.js", "componentCount": 127 }, diff --git a/docs-guide/component-usage-map.json b/docs-guide/component-usage-map.json index 4e3c41bdb..7d9e06b3b 100644 --- a/docs-guide/component-usage-map.json +++ b/docs-guide/component-usage-map.json @@ -1,6 +1,6 @@ { "_meta": { - "generated": "2026-03-16T18:55:06.415Z", + "generated": "2026-04-03T11:34:12.867Z", "generator": "tools/scripts/scan-component-imports.js", "componentCount": 127, "canonicalUsagePolicy": "english-only-jsdoc" @@ -432,21 +432,39 @@ "name": "MarkdownEmbed", "file": "snippets/components/content/embed.jsx", "category": "content", - "count": 0, - "pages": [], + "count": 5, + "pages": [ + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" + ], "localeBreakdown": { - "en": 0, + "en": 5, "es": 0, "fr": 0, "cn": 0, "other": 0 }, - "englishCanonicalCount": 0, - "englishCanonicalPages": [], + "englishCanonicalCount": 5, + "englishCanonicalPages": [ + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" + ], "declaredUsedIn": [], "declaredUsedInEnglish": [], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" + ], "staleInJsDoc": [] } }, @@ -454,7 +472,7 @@ "name": "Quote", "file": "snippets/components/content/quote.jsx", "category": "content", - "count": 33, + "count": 35, "pages": [ "v2/about/livepeer-protocol/core-mechanisms.mdx", "v2/about/livepeer-protocol/governance-model.mdx", @@ -488,16 +506,18 @@ "v2/fr/orchestrators/quickstart/join-a-pool.mdx", "v2/home/about-livepeer/vision.mdx", "v2/internal/rfp/aims.mdx", - "v2/internal/rfp/report.mdx" + "v2/internal/rfp/report.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", + "v2/orchestrators/guides/deployment-details/setup-options.mdx" ], "localeBreakdown": { - "en": 9, + "en": 11, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 9, + "englishCanonicalCount": 11, "englishCanonicalPages": [ "v2/about/livepeer-protocol/core-mechanisms.mdx", "v2/about/livepeer-protocol/governance-model.mdx", @@ -507,7 +527,9 @@ "v2/about/livepeer-protocol/treasury.mdx", "v2/home/about-livepeer/vision.mdx", "v2/internal/rfp/aims.mdx", - "v2/internal/rfp/report.mdx" + "v2/internal/rfp/report.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", + "v2/orchestrators/guides/deployment-details/setup-options.mdx" ], "declaredUsedIn": [ "v2/about/livepeer-protocol/core-mechanisms.mdx", @@ -536,7 +558,10 @@ "v2/orchestrators/v2-dev/get-started/join-a-pool.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", + "v2/orchestrators/guides/deployment-details/setup-options.mdx" + ], "staleInJsDoc": [ "v2/orchestrators/quickstart/join-a-pool.mdx", "v2/orchestrators/v2-dev/get-started/join-a-pool.mdx" @@ -635,10 +660,12 @@ "name": "ScrollableDiagram", "file": "snippets/components/content/zoomableDiagram.jsx", "category": "content", - "count": 57, + "count": 58, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/about/livepeer-protocol/livepeer-token.mdx", "v2/about/livepeer-protocol/technical-architecture.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/cn/about/livepeer-protocol/livepeer-token.mdx", "v2/cn/about/livepeer-protocol/technical-architecture.mdx", "v2/cn/gateways/about-gateways/gateway-architecture.mdx", @@ -689,23 +716,24 @@ "v2/orchestrators/concepts/incentive-model.mdx", "v2/orchestrators/concepts/role.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", - "v2/orchestrators/guides/deployment-details/setup-options.mdx", "v2/orchestrators/guides/deployment-details/siphon-setup.mdx", "v2/orchestrators/guides/operator-considerations/business-case.mdx", "v2/orchestrators/guides/operator-considerations/operator-impact.mdx", "v2/orchestrators/guides/operator-considerations/operator-rationale.mdx" ], "localeBreakdown": { - "en": 24, + "en": 25, "es": 11, "fr": 11, "cn": 11, "other": 0 }, - "englishCanonicalCount": 24, + "englishCanonicalCount": 25, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/about/livepeer-protocol/livepeer-token.mdx", "v2/about/livepeer-protocol/technical-architecture.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/gateways/concepts/architecture.mdx", "v2/gateways/concepts/role.mdx", "v2/gateways/guides/advanced-operations/gateway-middleware.mdx", @@ -723,7 +751,6 @@ "v2/orchestrators/concepts/incentive-model.mdx", "v2/orchestrators/concepts/role.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", - "v2/orchestrators/guides/deployment-details/setup-options.mdx", "v2/orchestrators/guides/deployment-details/siphon-setup.mdx", "v2/orchestrators/guides/operator-considerations/business-case.mdx", "v2/orchestrators/guides/operator-considerations/operator-impact.mdx", @@ -759,6 +786,8 @@ ], "drift": { "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/gateways/concepts/architecture.mdx", "v2/gateways/concepts/role.mdx", "v2/gateways/guides/advanced-operations/gateway-middleware.mdx", @@ -776,7 +805,6 @@ "v2/orchestrators/concepts/incentive-model.mdx", "v2/orchestrators/concepts/role.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", - "v2/orchestrators/guides/deployment-details/setup-options.mdx", "v2/orchestrators/guides/deployment-details/siphon-setup.mdx", "v2/orchestrators/guides/operator-considerations/business-case.mdx", "v2/orchestrators/guides/operator-considerations/operator-impact.mdx", @@ -833,23 +861,25 @@ "name": "TitledVideo", "file": "snippets/components/content/video.jsx", "category": "content", - "count": 4, + "count": 5, "pages": [ "v2/cn/home/solutions/showcase.mdx", "v2/es/home/solutions/showcase.mdx", "v2/fr/home/solutions/showcase.mdx", - "v2/home/solutions/showcase.mdx" + "v2/home/solutions/showcase.mdx", + "v2/solutions/daydream/overview.mdx" ], "localeBreakdown": { - "en": 1, + "en": 2, "es": 1, "fr": 1, "cn": 1, "other": 0 }, - "englishCanonicalCount": 1, + "englishCanonicalCount": 2, "englishCanonicalPages": [ - "v2/home/solutions/showcase.mdx" + "v2/home/solutions/showcase.mdx", + "v2/solutions/daydream/overview.mdx" ], "declaredUsedIn": [ "v2/home/solutions/showcase.mdx" @@ -858,7 +888,9 @@ "v2/home/solutions/showcase.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/solutions/daydream/overview.mdx" + ], "staleInJsDoc": [] } }, @@ -950,23 +982,29 @@ "name": "Video", "file": "snippets/components/content/video.jsx", "category": "content", - "count": 4, + "count": 7, "pages": [ "v2/cn/solutions/embody/overview.mdx", "v2/es/solutions/embody/overview.mdx", "v2/fr/solutions/embody/overview.mdx", - "v2/solutions/embody/overview.mdx" + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx" ], "localeBreakdown": { - "en": 1, + "en": 4, "es": 1, "fr": 1, "cn": 1, "other": 0 }, - "englishCanonicalCount": 1, + "englishCanonicalCount": 4, "englishCanonicalPages": [ - "v2/solutions/embody/overview.mdx" + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx" ], "declaredUsedIn": [ "v2/solutions/embody/overview.mdx" @@ -975,7 +1013,11 @@ "v2/solutions/embody/overview.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/solutions/daydream/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx" + ], "staleInJsDoc": [] } }, @@ -983,7 +1025,7 @@ "name": "YouTubeVideo", "file": "snippets/components/content/video.jsx", "category": "content", - "count": 47, + "count": 54, "pages": [ "v2/cn/community/community-portal.mdx", "v2/cn/community/livepeer-community/livepeer-latest-topics.mdx", @@ -1028,19 +1070,26 @@ "v2/home/primer.mdx", "v2/home/trending.mdx", "v2/internal/rfp/aims.mdx", + "v2/solutions/daydream/community.mdx", "v2/solutions/daydream/overview.mdx", - "v2/solutions/daydream/overview1.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/community.mdx", "v2/solutions/frameworks/overview.mdx", - "v2/solutions/portal.mdx" + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" ], "localeBreakdown": { - "en": 14, + "en": 21, "es": 11, "fr": 11, "cn": 11, "other": 0 }, - "englishCanonicalCount": 14, + "englishCanonicalCount": 21, "englishCanonicalPages": [ "v2/community/community-portal.mdx", "v2/community/livepeer-community/trending-topics.mdx", @@ -1052,10 +1101,17 @@ "v2/home/primer.mdx", "v2/home/trending.mdx", "v2/internal/rfp/aims.mdx", + "v2/solutions/daydream/community.mdx", "v2/solutions/daydream/overview.mdx", - "v2/solutions/daydream/overview1.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/community.mdx", "v2/solutions/frameworks/overview.mdx", - "v2/solutions/portal.mdx" + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" ], "declaredUsedIn": [ "v2/community/community-portal.mdx", @@ -1090,10 +1146,19 @@ "drift": { "missingFromJsDoc": [ "v2/gateways/guides/deployment-details/setup-options.mdx", - "v2/gateways/setup/install/community-projects.mdx" + "v2/gateways/setup/install/community-projects.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" ], "staleInJsDoc": [ - "v2/gateways/run-a-gateway/install/community-projects.mdx" + "v2/gateways/run-a-gateway/install/community-projects.mdx", + "v2/solutions/daydream/overview1.mdx" ] } }, @@ -1101,7 +1166,7 @@ "name": "YouTubeVideoData", "file": "snippets/components/content/video.jsx", "category": "content", - "count": 8, + "count": 13, "pages": [ "v2/cn/community/livepeer-community/livepeer-latest-topics.mdx", "v2/cn/community/livepeer-community/trending-topics.mdx", @@ -1110,19 +1175,29 @@ "v2/es/community/livepeer-community/trending-topics.mdx", "v2/fr/community/livepeer-community/livepeer-latest-topics.mdx", "v2/fr/community/livepeer-community/trending-topics.mdx", - "v2/home/trending.mdx" + "v2/home/trending.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" ], "localeBreakdown": { - "en": 2, + "en": 7, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 2, + "englishCanonicalCount": 7, "englishCanonicalPages": [ "v2/community/livepeer-community/trending-topics.mdx", - "v2/home/trending.mdx" + "v2/home/trending.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" ], "declaredUsedIn": [ "v2/community/livepeer-community/trending-topics.mdx", @@ -1133,7 +1208,13 @@ "v2/home/trending.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" + ], "staleInJsDoc": [] } }, @@ -1424,7 +1505,7 @@ "name": "DiscordAnnouncements", "file": "snippets/components/data/data.jsx", "category": "data", - "count": 8, + "count": 13, "pages": [ "v2/cn/community/livepeer-community/livepeer-latest-topics.mdx", "v2/cn/community/livepeer-community/trending-topics.mdx", @@ -1433,19 +1514,29 @@ "v2/es/community/livepeer-community/trending-topics.mdx", "v2/fr/community/livepeer-community/livepeer-latest-topics.mdx", "v2/fr/community/livepeer-community/trending-topics.mdx", - "v2/home/trending.mdx" + "v2/home/trending.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" ], "localeBreakdown": { - "en": 2, + "en": 7, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 2, + "englishCanonicalCount": 7, "englishCanonicalPages": [ "v2/community/livepeer-community/trending-topics.mdx", - "v2/home/trending.mdx" + "v2/home/trending.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" ], "declaredUsedIn": [ "v2/community/livepeer-community/trending-topics.mdx", @@ -1456,7 +1547,13 @@ "v2/home/trending.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" + ], "staleInJsDoc": [] } }, @@ -1567,21 +1664,39 @@ "name": "MarkdownEmbed", "file": "snippets/components/data/embed.jsx", "category": "data", - "count": 0, - "pages": [], + "count": 5, + "pages": [ + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" + ], "localeBreakdown": { - "en": 0, + "en": 5, "es": 0, "fr": 0, "cn": 0, "other": 0 }, - "englishCanonicalCount": 0, - "englishCanonicalPages": [], + "englishCanonicalCount": 5, + "englishCanonicalPages": [ + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" + ], "declaredUsedIn": [], "declaredUsedInEnglish": [], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" + ], "staleInJsDoc": [] } }, @@ -1589,25 +1704,27 @@ "name": "PdfEmbed", "file": "snippets/components/data/embed.jsx", "category": "data", - "count": 4, + "count": 5, "pages": [ "v2/internal/overview/docs-philosophy.mdx", "v2/internal/rfp/aims.mdx", "v2/lpt/treasury/overview.mdx", + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "localeBreakdown": { - "en": 4, + "en": 5, "es": 0, "fr": 0, "cn": 0, "other": 0 }, - "englishCanonicalCount": 4, + "englishCanonicalCount": 5, "englishCanonicalPages": [ "v2/internal/overview/docs-philosophy.mdx", "v2/internal/rfp/aims.mdx", "v2/lpt/treasury/overview.mdx", + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "declaredUsedIn": [ @@ -1625,7 +1742,9 @@ "v2/resources/media-kit.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/resources/compendium/media-kit.mdx" + ], "staleInJsDoc": [ "v2/gateways/payments/payment-clearinghouse.mdx" ] @@ -1748,7 +1867,7 @@ "name": "YouTubeVideoData", "file": "snippets/components/data/videoData.jsx", "category": "data", - "count": 8, + "count": 13, "pages": [ "v2/cn/community/livepeer-community/livepeer-latest-topics.mdx", "v2/cn/community/livepeer-community/trending-topics.mdx", @@ -1757,19 +1876,29 @@ "v2/es/community/livepeer-community/trending-topics.mdx", "v2/fr/community/livepeer-community/livepeer-latest-topics.mdx", "v2/fr/community/livepeer-community/trending-topics.mdx", - "v2/home/trending.mdx" + "v2/home/trending.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" ], "localeBreakdown": { - "en": 2, + "en": 7, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 2, + "englishCanonicalCount": 7, "englishCanonicalPages": [ "v2/community/livepeer-community/trending-topics.mdx", - "v2/home/trending.mdx" + "v2/home/trending.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" ], "declaredUsedIn": [ "v2/community/livepeer-community/trending-topics.mdx", @@ -1780,7 +1909,13 @@ "v2/home/trending.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/streamplace/community.mdx" + ], "staleInJsDoc": [] } }, @@ -1876,8 +2011,10 @@ "name": "BorderedBox", "file": "snippets/components/layout/containers.jsx", "category": "layout", - "count": 64, + "count": 85, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/cn/developers/builder-opportunities/bug-bounties.mdx", "v2/cn/developers/builder-opportunities/grants-and-programmes.mdx", "v2/cn/developers/builder-opportunities/oss-contributions.mdx", @@ -1927,6 +2064,7 @@ "v2/gateways/setup/requirements/on-chain setup/on-chain.mdx", "v2/gateways/setup/requirements/setup.mdx", "v2/lpt/delegation/getting-started.mdx", + "v2/orchestrators/concepts/architecture.mdx", "v2/orchestrators/guides/advanced-operations/gateway-orchestrator-interface.mdx", "v2/orchestrators/guides/advanced-operations/pool-operators.mdx", "v2/orchestrators/guides/ai-and-job-workloads/ai-inference-operations.mdx", @@ -1941,17 +2079,37 @@ "v2/orchestrators/guides/tutorials/add-ai-to-video-node.mdx", "v2/orchestrators/navigator.mdx", "v2/orchestrators/setup/configure.mdx", - "v2/orchestrators/setup/rcs-requirements.mdx" + "v2/orchestrators/setup/rcs-requirements.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" ], "localeBreakdown": { - "en": 43, + "en": 64, "es": 7, "fr": 7, "cn": 7, "other": 0 }, - "englishCanonicalCount": 43, + "englishCanonicalCount": 64, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/community/livepeer-community/community-guidelines.mdx", "v2/developers/build/workload-fit.mdx", "v2/developers/developer-journey.mdx", @@ -1980,6 +2138,7 @@ "v2/gateways/setup/requirements/on-chain setup/on-chain.mdx", "v2/gateways/setup/requirements/setup.mdx", "v2/lpt/delegation/getting-started.mdx", + "v2/orchestrators/concepts/architecture.mdx", "v2/orchestrators/guides/advanced-operations/gateway-orchestrator-interface.mdx", "v2/orchestrators/guides/advanced-operations/pool-operators.mdx", "v2/orchestrators/guides/ai-and-job-workloads/ai-inference-operations.mdx", @@ -1994,7 +2153,25 @@ "v2/orchestrators/guides/tutorials/add-ai-to-video-node.mdx", "v2/orchestrators/navigator.mdx", "v2/orchestrators/setup/configure.mdx", - "v2/orchestrators/setup/rcs-requirements.mdx" + "v2/orchestrators/setup/rcs-requirements.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" ], "declaredUsedIn": [ "v2/community/livepeer-community/community-guidelines.mdx", @@ -2087,7 +2264,29 @@ "v2/orchestrators/setup/rcs-requirements.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", + "v2/orchestrators/concepts/architecture.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" + ], "staleInJsDoc": [] } }, @@ -2117,8 +2316,10 @@ "name": "CenteredContainer", "file": "snippets/components/layout/containers.jsx", "category": "layout", - "count": 15, + "count": 28, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/gateways/concepts/business-model.mdx", "v2/gateways/concepts/capabilities.mdx", "v2/gateways/concepts/role.mdx", @@ -2128,22 +2329,35 @@ "v2/gateways/guides/operator-considerations/business-case.mdx", "v2/gateways/guides/payments-and-pricing/clearinghouse-guide.mdx", "v2/gateways/navigator.mdx", + "v2/orchestrators/concepts/architecture.mdx", "v2/orchestrators/concepts/capabilities.mdx", "v2/orchestrators/concepts/incentive-model.mdx", "v2/orchestrators/concepts/role.mdx", "v2/orchestrators/guides/operator-considerations/business-case.mdx", "v2/orchestrators/guides/operator-considerations/operator-impact.mdx", - "v2/orchestrators/guides/operator-considerations/operator-rationale.mdx" + "v2/orchestrators/guides/operator-considerations/operator-rationale.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" ], "localeBreakdown": { - "en": 15, + "en": 28, "es": 0, "fr": 0, "cn": 0, "other": 0 }, - "englishCanonicalCount": 15, + "englishCanonicalCount": 28, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/gateways/concepts/business-model.mdx", "v2/gateways/concepts/capabilities.mdx", "v2/gateways/concepts/role.mdx", @@ -2153,12 +2367,23 @@ "v2/gateways/guides/operator-considerations/business-case.mdx", "v2/gateways/guides/payments-and-pricing/clearinghouse-guide.mdx", "v2/gateways/navigator.mdx", + "v2/orchestrators/concepts/architecture.mdx", "v2/orchestrators/concepts/capabilities.mdx", "v2/orchestrators/concepts/incentive-model.mdx", "v2/orchestrators/concepts/role.mdx", "v2/orchestrators/guides/operator-considerations/business-case.mdx", "v2/orchestrators/guides/operator-considerations/operator-impact.mdx", - "v2/orchestrators/guides/operator-considerations/operator-rationale.mdx" + "v2/orchestrators/guides/operator-considerations/operator-rationale.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" ], "declaredUsedIn": [ "v2/gateways/concepts/business-model.mdx", @@ -2195,7 +2420,21 @@ "v2/orchestrators/guides/operator-considerations/operator-rationale.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", + "v2/orchestrators/concepts/architecture.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" + ], "staleInJsDoc": [] } }, @@ -2293,7 +2532,7 @@ "name": "DynamicTable", "file": "snippets/components/layout/table.jsx", "category": "layout", - "count": 68, + "count": 73, "pages": [ "v2/about/livepeer-network/interfaces.mdx", "v2/about/livepeer-network/job-lifecycle.mdx", @@ -2304,6 +2543,7 @@ "v2/about/livepeer-protocol/overview.mdx", "v2/about/livepeer-protocol/technical-architecture.mdx", "v2/about/livepeer-protocol/treasury.mdx", + "v2/about/resources/compendium/glossary.mdx", "v2/cn/about/livepeer-network/interfaces.mdx", "v2/cn/about/livepeer-network/job-lifecycle.mdx", "v2/cn/about/livepeer-network/marketplace.mdx", @@ -2362,16 +2602,20 @@ "v2/gateways/resources/technical/configuration-flags.mdx", "v2/gateways/setup/configure/pricing-configuration.mdx", "v2/gateways/setup/configure/video-configuration-view.mdx", - "v2/gateways/setup/configure/video-configuration.mdx" + "v2/gateways/setup/configure/video-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", + "v2/resources/compendium/glossary.mdx", + "v2/solutions/resources/compendium/glossary.mdx", + "v2/solutions/solution-providers.mdx" ], "localeBreakdown": { - "en": 14, + "en": 19, "es": 18, "fr": 18, "cn": 18, "other": 0 }, - "englishCanonicalCount": 14, + "englishCanonicalCount": 19, "englishCanonicalPages": [ "v2/about/livepeer-network/interfaces.mdx", "v2/about/livepeer-network/job-lifecycle.mdx", @@ -2382,11 +2626,16 @@ "v2/about/livepeer-protocol/overview.mdx", "v2/about/livepeer-protocol/technical-architecture.mdx", "v2/about/livepeer-protocol/treasury.mdx", + "v2/about/resources/compendium/glossary.mdx", "v2/developers/build/workload-fit.mdx", "v2/gateways/resources/technical/configuration-flags.mdx", "v2/gateways/setup/configure/pricing-configuration.mdx", "v2/gateways/setup/configure/video-configuration-view.mdx", - "v2/gateways/setup/configure/video-configuration.mdx" + "v2/gateways/setup/configure/video-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", + "v2/resources/compendium/glossary.mdx", + "v2/solutions/resources/compendium/glossary.mdx", + "v2/solutions/solution-providers.mdx" ], "declaredUsedIn": [ "v2/about/livepeer-network/interfaces.mdx", @@ -2436,10 +2685,15 @@ ], "drift": { "missingFromJsDoc": [ + "v2/about/resources/compendium/glossary.mdx", "v2/gateways/resources/technical/configuration-flags.mdx", "v2/gateways/setup/configure/pricing-configuration.mdx", "v2/gateways/setup/configure/video-configuration-view.mdx", - "v2/gateways/setup/configure/video-configuration.mdx" + "v2/gateways/setup/configure/video-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", + "v2/resources/compendium/glossary.mdx", + "v2/solutions/resources/compendium/glossary.mdx", + "v2/solutions/solution-providers.mdx" ], "staleInJsDoc": [ "v2/gateways/guides-and-resources/gateway-job-pipelines/overview.mdx", @@ -2460,8 +2714,9 @@ "name": "FlexContainer", "file": "snippets/components/layout/layout.jsx", "category": "layout", - "count": 10, + "count": 12, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/cn/gateways/quickstart/gateway-setup.mdx", "v2/cn/gateways/run-a-gateway/run-a-gateway.mdx", "v2/community/livepeer-community/community-guidelines.mdx", @@ -2471,21 +2726,24 @@ "v2/fr/gateways/quickstart/gateway-setup.mdx", "v2/fr/gateways/run-a-gateway/run-a-gateway.mdx", "v2/gateways/quickstart/gateway-setup.mdx", - "v2/gateways/setup/run-a-gateway.mdx" + "v2/gateways/setup/run-a-gateway.mdx", + "v2/resources/compendium/media-kit.mdx" ], "localeBreakdown": { - "en": 4, + "en": 6, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 4, + "englishCanonicalCount": 6, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/community/livepeer-community/community-guidelines.mdx", "v2/developers/build/workload-fit.mdx", "v2/gateways/quickstart/gateway-setup.mdx", - "v2/gateways/setup/run-a-gateway.mdx" + "v2/gateways/setup/run-a-gateway.mdx", + "v2/resources/compendium/media-kit.mdx" ], "declaredUsedIn": [ "v2/community/livepeer-community/community-guidelines.mdx", @@ -2500,7 +2758,10 @@ "v2/gateways/setup/run-a-gateway.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/resources/compendium/media-kit.mdx" + ], "staleInJsDoc": [] } }, @@ -2585,19 +2846,21 @@ "name": "InlineImageCard", "file": "snippets/components/layout/customCards.jsx", "category": "layout", - "count": 1, + "count": 2, "pages": [ + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "localeBreakdown": { - "en": 1, + "en": 2, "es": 0, "fr": 0, "cn": 0, "other": 0 }, - "englishCanonicalCount": 1, + "englishCanonicalCount": 2, "englishCanonicalPages": [ + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "declaredUsedIn": [ @@ -2607,7 +2870,9 @@ "v2/resources/media-kit.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/resources/compendium/media-kit.mdx" + ], "staleInJsDoc": [] } }, @@ -2728,7 +2993,7 @@ "name": "ScrollBox", "file": "snippets/components/layout/cards.jsx", "category": "layout", - "count": 8, + "count": 36, "pages": [ "v2/cn/home/solutions/showcase.mdx", "v2/cn/home/solutions/verticals.mdx", @@ -2737,19 +3002,75 @@ "v2/fr/home/solutions/showcase.mdx", "v2/fr/home/solutions/verticals.mdx", "v2/home/solutions/showcase.mdx", - "v2/home/solutions/verticals.mdx" + "v2/home/solutions/verticals.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx" ], "localeBreakdown": { - "en": 2, + "en": 30, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 2, + "englishCanonicalCount": 30, "englishCanonicalPages": [ "v2/home/solutions/showcase.mdx", - "v2/home/solutions/verticals.mdx" + "v2/home/solutions/verticals.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx" ], "declaredUsedIn": [ "v2/home/solutions/showcase.mdx", @@ -2760,7 +3081,36 @@ "v2/home/solutions/verticals.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx" + ], "staleInJsDoc": [] } }, @@ -2768,25 +3118,42 @@ "name": "SearchTable", "file": "snippets/components/layout/search-table.jsx", "category": "layout", - "count": 3, + "count": 8, "pages": [ + "v2/about/resources/compendium/glossary.mdx", "v2/cn/docs-guide/catalog/components-catalog.mdx", "v2/es/docs-guide/catalog/components-catalog.mdx", - "v2/fr/docs-guide/catalog/components-catalog.mdx" + "v2/fr/docs-guide/catalog/components-catalog.mdx", + "v2/resources/compendium/glossary.mdx", + "v2/resources/livepeer-glossary.mdx", + "v2/solutions/resources/compendium/glossary.mdx", + "v2/solutions/solution-providers.mdx" ], "localeBreakdown": { - "en": 0, + "en": 5, "es": 1, "fr": 1, "cn": 1, "other": 0 }, - "englishCanonicalCount": 0, - "englishCanonicalPages": [], + "englishCanonicalCount": 5, + "englishCanonicalPages": [ + "v2/about/resources/compendium/glossary.mdx", + "v2/resources/compendium/glossary.mdx", + "v2/resources/livepeer-glossary.mdx", + "v2/solutions/resources/compendium/glossary.mdx", + "v2/solutions/solution-providers.mdx" + ], "declaredUsedIn": [], "declaredUsedInEnglish": [], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/about/resources/compendium/glossary.mdx", + "v2/resources/compendium/glossary.mdx", + "v2/resources/livepeer-glossary.mdx", + "v2/solutions/resources/compendium/glossary.mdx", + "v2/solutions/solution-providers.mdx" + ], "staleInJsDoc": [] } }, @@ -2915,7 +3282,7 @@ "name": "StyledStep", "file": "snippets/components/layout/steps.jsx", "category": "layout", - "count": 73, + "count": 79, "pages": [ "v2/cn/gateways/run-a-gateway/configure/ai-configuration.mdx", "v2/cn/gateways/run-a-gateway/connect/discover-offerings.mdx", @@ -2975,6 +3342,7 @@ "v2/orchestrators/guides/ai-and-job-workloads/video-transcoding-operations.mdx", "v2/orchestrators/guides/config-and-optimisation/capacity-planning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/siphon-setup.mdx", "v2/orchestrators/guides/operator-considerations/requirements.mdx", "v2/orchestrators/guides/payments-and-pricing/payments.mdx", @@ -2989,16 +3357,21 @@ "v2/orchestrators/quickstart/video-transcoding.mdx", "v2/orchestrators/setup/connect-and-activate.mdx", "v2/orchestrators/setup/guide.mdx", - "v2/orchestrators/setup/test.mdx" + "v2/orchestrators/setup/test.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/overview.mdx" ], "localeBreakdown": { - "en": 40, + "en": 46, "es": 11, "fr": 11, "cn": 11, "other": 0 }, - "englishCanonicalCount": 40, + "englishCanonicalCount": 46, "englishCanonicalPages": [ "v2/gateways/guides/advanced-operations/gateway-discoverability.mdx", "v2/gateways/guides/advanced-operations/gateway-middleware.mdx", @@ -3025,6 +3398,7 @@ "v2/orchestrators/guides/ai-and-job-workloads/video-transcoding-operations.mdx", "v2/orchestrators/guides/config-and-optimisation/capacity-planning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/siphon-setup.mdx", "v2/orchestrators/guides/operator-considerations/requirements.mdx", "v2/orchestrators/guides/payments-and-pricing/payments.mdx", @@ -3039,7 +3413,12 @@ "v2/orchestrators/quickstart/video-transcoding.mdx", "v2/orchestrators/setup/connect-and-activate.mdx", "v2/orchestrators/setup/guide.mdx", - "v2/orchestrators/setup/test.mdx" + "v2/orchestrators/setup/test.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/overview.mdx" ], "declaredUsedIn": [ "v2/gateways/run-a-gateway/configure/ai-configuration.mdx", @@ -3105,6 +3484,7 @@ "v2/orchestrators/guides/ai-and-job-workloads/video-transcoding-operations.mdx", "v2/orchestrators/guides/config-and-optimisation/capacity-planning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/siphon-setup.mdx", "v2/orchestrators/guides/operator-considerations/requirements.mdx", "v2/orchestrators/guides/payments-and-pricing/payments.mdx", @@ -3119,7 +3499,12 @@ "v2/orchestrators/quickstart/video-transcoding.mdx", "v2/orchestrators/setup/connect-and-activate.mdx", "v2/orchestrators/setup/guide.mdx", - "v2/orchestrators/setup/test.mdx" + "v2/orchestrators/setup/test.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/overview.mdx" ], "staleInJsDoc": [ "v2/gateways/run-a-gateway/configure/ai-configuration.mdx", @@ -3145,7 +3530,7 @@ "name": "StyledSteps", "file": "snippets/components/layout/steps.jsx", "category": "layout", - "count": 73, + "count": 79, "pages": [ "v2/cn/gateways/run-a-gateway/configure/ai-configuration.mdx", "v2/cn/gateways/run-a-gateway/connect/discover-offerings.mdx", @@ -3205,6 +3590,7 @@ "v2/orchestrators/guides/ai-and-job-workloads/video-transcoding-operations.mdx", "v2/orchestrators/guides/config-and-optimisation/capacity-planning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/siphon-setup.mdx", "v2/orchestrators/guides/operator-considerations/requirements.mdx", "v2/orchestrators/guides/payments-and-pricing/payments.mdx", @@ -3219,16 +3605,21 @@ "v2/orchestrators/quickstart/video-transcoding.mdx", "v2/orchestrators/setup/connect-and-activate.mdx", "v2/orchestrators/setup/guide.mdx", - "v2/orchestrators/setup/test.mdx" + "v2/orchestrators/setup/test.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/overview.mdx" ], "localeBreakdown": { - "en": 40, + "en": 46, "es": 11, "fr": 11, "cn": 11, "other": 0 }, - "englishCanonicalCount": 40, + "englishCanonicalCount": 46, "englishCanonicalPages": [ "v2/gateways/guides/advanced-operations/gateway-discoverability.mdx", "v2/gateways/guides/advanced-operations/gateway-middleware.mdx", @@ -3255,6 +3646,7 @@ "v2/orchestrators/guides/ai-and-job-workloads/video-transcoding-operations.mdx", "v2/orchestrators/guides/config-and-optimisation/capacity-planning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/siphon-setup.mdx", "v2/orchestrators/guides/operator-considerations/requirements.mdx", "v2/orchestrators/guides/payments-and-pricing/payments.mdx", @@ -3269,7 +3661,12 @@ "v2/orchestrators/quickstart/video-transcoding.mdx", "v2/orchestrators/setup/connect-and-activate.mdx", "v2/orchestrators/setup/guide.mdx", - "v2/orchestrators/setup/test.mdx" + "v2/orchestrators/setup/test.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/overview.mdx" ], "declaredUsedIn": [ "v2/gateways/run-a-gateway/configure/ai-configuration.mdx", @@ -3335,6 +3732,7 @@ "v2/orchestrators/guides/ai-and-job-workloads/video-transcoding-operations.mdx", "v2/orchestrators/guides/config-and-optimisation/capacity-planning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/siphon-setup.mdx", "v2/orchestrators/guides/operator-considerations/requirements.mdx", "v2/orchestrators/guides/payments-and-pricing/payments.mdx", @@ -3349,7 +3747,12 @@ "v2/orchestrators/quickstart/video-transcoding.mdx", "v2/orchestrators/setup/connect-and-activate.mdx", "v2/orchestrators/setup/guide.mdx", - "v2/orchestrators/setup/test.mdx" + "v2/orchestrators/setup/test.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/streamplace/overview.mdx" ], "staleInJsDoc": [ "v2/gateways/run-a-gateway/configure/ai-configuration.mdx", @@ -3375,7 +3778,7 @@ "name": "StyledTable", "file": "snippets/components/layout/tables.jsx", "category": "layout", - "count": 106, + "count": 107, "pages": [ "v2/cn/gateways/run-a-gateway/requirements/setup.mdx", "v2/es/gateways/run-a-gateway/requirements/setup.mdx", @@ -3442,7 +3845,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -3474,6 +3876,8 @@ "v2/orchestrators/resources/community-guides.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -3485,13 +3889,13 @@ "v2/orchestrators/setup/test.mdx" ], "localeBreakdown": { - "en": 103, + "en": 104, "es": 1, "fr": 1, "cn": 1, "other": 0 }, - "englishCanonicalCount": 103, + "englishCanonicalCount": 104, "englishCanonicalPages": [ "v2/gateways/concepts/architecture.mdx", "v2/gateways/concepts/business-model.mdx", @@ -3555,7 +3959,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -3587,6 +3990,8 @@ "v2/orchestrators/resources/community-guides.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -3750,7 +4155,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -3782,6 +4186,8 @@ "v2/orchestrators/resources/community-guides.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -3837,7 +4243,7 @@ "name": "TableCell", "file": "snippets/components/layout/tables.jsx", "category": "layout", - "count": 106, + "count": 107, "pages": [ "v2/cn/gateways/run-a-gateway/requirements/setup.mdx", "v2/es/gateways/run-a-gateway/requirements/setup.mdx", @@ -3904,7 +4310,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -3936,6 +4341,8 @@ "v2/orchestrators/resources/community-guides.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -3947,13 +4354,13 @@ "v2/orchestrators/setup/test.mdx" ], "localeBreakdown": { - "en": 103, + "en": 104, "es": 1, "fr": 1, "cn": 1, "other": 0 }, - "englishCanonicalCount": 103, + "englishCanonicalCount": 104, "englishCanonicalPages": [ "v2/gateways/concepts/architecture.mdx", "v2/gateways/concepts/business-model.mdx", @@ -4017,7 +4424,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -4049,6 +4455,8 @@ "v2/orchestrators/resources/community-guides.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -4212,7 +4620,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -4244,6 +4651,8 @@ "v2/orchestrators/resources/community-guides.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -4299,7 +4708,7 @@ "name": "TableRow", "file": "snippets/components/layout/tables.jsx", "category": "layout", - "count": 106, + "count": 107, "pages": [ "v2/cn/gateways/run-a-gateway/requirements/setup.mdx", "v2/es/gateways/run-a-gateway/requirements/setup.mdx", @@ -4366,7 +4775,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -4398,6 +4806,8 @@ "v2/orchestrators/resources/community-guides.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -4409,13 +4819,13 @@ "v2/orchestrators/setup/test.mdx" ], "localeBreakdown": { - "en": 103, + "en": 104, "es": 1, "fr": 1, "cn": 1, "other": 0 }, - "englishCanonicalCount": 103, + "englishCanonicalCount": 104, "englishCanonicalPages": [ "v2/gateways/concepts/architecture.mdx", "v2/gateways/concepts/business-model.mdx", @@ -4479,7 +4889,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -4511,6 +4920,8 @@ "v2/orchestrators/resources/community-guides.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -4674,7 +5085,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -4706,6 +5116,8 @@ "v2/orchestrators/resources/community-guides.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -4827,7 +5239,7 @@ "name": "WidthCard", "file": "snippets/components/layout/customCards.jsx", "category": "layout", - "count": 10, + "count": 11, "pages": [ "v2/cn/home/about-livepeer/benefits.mdx", "v2/cn/home/about-livepeer/roadmap.mdx", @@ -4838,20 +5250,22 @@ "v2/gateways/quickstart/gateway-setup.mdx", "v2/home/about-livepeer/benefits.mdx", "v2/home/about-livepeer/roadmap.mdx", + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "localeBreakdown": { - "en": 4, + "en": 5, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 4, + "englishCanonicalCount": 5, "englishCanonicalPages": [ "v2/gateways/quickstart/gateway-setup.mdx", "v2/home/about-livepeer/benefits.mdx", "v2/home/about-livepeer/roadmap.mdx", + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "declaredUsedIn": [ @@ -4867,7 +5281,9 @@ "v2/resources/media-kit.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/resources/compendium/media-kit.mdx" + ], "staleInJsDoc": [] } }, @@ -4875,8 +5291,10 @@ "name": "CustomCardTitle", "file": "snippets/components/page-structure/customCards.jsx", "category": "page-structure", - "count": 10, + "count": 21, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/cn/home/about-livepeer/benefits.mdx", "v2/cn/home/primer.mdx", "v2/es/home/about-livepeer/benefits.mdx", @@ -4886,22 +5304,42 @@ "v2/gateways/portal.mdx", "v2/home/about-livepeer/benefits.mdx", "v2/home/primer.mdx", - "v2/internal/overview/docs-philosophy.mdx" + "v2/internal/overview/docs-philosophy.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/overview.mdx" ], "localeBreakdown": { - "en": 4, + "en": 15, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 4, + "englishCanonicalCount": 15, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/gateways/portal.mdx", "v2/home/about-livepeer/benefits.mdx", "v2/home/primer.mdx", - "v2/internal/overview/docs-philosophy.mdx" - ], + "v2/internal/overview/docs-philosophy.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/overview.mdx" + ], "declaredUsedIn": [ "v2/home/about-livepeer/benefits.mdx", "v2/home/primer.mdx", @@ -4914,7 +5352,18 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/overview.mdx" ], "staleInJsDoc": [] } @@ -5035,7 +5484,7 @@ "name": "H1", "file": "snippets/components/page-structure/frameMode.jsx", "category": "page-structure", - "count": 31, + "count": 32, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -5067,16 +5516,17 @@ "v2/gateways/portal.mdx", "v2/home/mission-control.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 7, + "en": 8, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 7, + "englishCanonicalCount": 8, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -5084,6 +5534,7 @@ "v2/gateways/portal.mdx", "v2/home/mission-control.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -5110,7 +5561,8 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -5123,7 +5575,7 @@ "name": "H2", "file": "snippets/components/page-structure/frameMode.jsx", "category": "page-structure", - "count": 31, + "count": 32, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -5155,16 +5607,17 @@ "v2/gateways/portal.mdx", "v2/home/mission-control.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 7, + "en": 8, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 7, + "englishCanonicalCount": 8, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -5172,6 +5625,7 @@ "v2/gateways/portal.mdx", "v2/home/mission-control.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -5198,7 +5652,8 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -5266,7 +5721,7 @@ "name": "H5", "file": "snippets/components/page-structure/frameMode.jsx", "category": "page-structure", - "count": 27, + "count": 28, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -5294,22 +5749,24 @@ "v2/fr/solutions/portal.mdx", "v2/gateways/portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 6, + "en": 7, "es": 7, "fr": 7, "cn": 7, "other": 0 }, - "englishCanonicalCount": 6, + "englishCanonicalCount": 7, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", "v2/developers/portal.mdx", "v2/gateways/portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -5334,7 +5791,8 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -5369,7 +5827,7 @@ "name": "HeroContentContainer", "file": "snippets/components/page-structure/portals.jsx", "category": "page-structure", - "count": 32, + "count": 34, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -5402,16 +5860,18 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 8, + "en": 10, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 8, + "englishCanonicalCount": 10, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -5420,6 +5880,8 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -5448,7 +5910,9 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -5461,7 +5925,7 @@ "name": "HeroImageBackgroundComponent", "file": "snippets/components/page-structure/portals.jsx", "category": "page-structure", - "count": 32, + "count": 34, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -5494,16 +5958,18 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 8, + "en": 10, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 8, + "englishCanonicalCount": 10, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -5512,6 +5978,8 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -5540,7 +6008,9 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -5575,7 +6045,7 @@ "name": "HeroSectionContainer", "file": "snippets/components/page-structure/portals.jsx", "category": "page-structure", - "count": 32, + "count": 34, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -5608,16 +6078,18 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 8, + "en": 10, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 8, + "englishCanonicalCount": 10, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -5626,6 +6098,8 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -5654,7 +6128,9 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -5667,19 +6143,21 @@ "name": "InlineImageCard", "file": "snippets/components/page-structure/customCards.jsx", "category": "page-structure", - "count": 1, + "count": 2, "pages": [ + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "localeBreakdown": { - "en": 1, + "en": 2, "es": 0, "fr": 0, "cn": 0, "other": 0 }, - "englishCanonicalCount": 1, + "englishCanonicalCount": 2, "englishCanonicalPages": [ + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "declaredUsedIn": [ @@ -5689,7 +6167,9 @@ "v2/resources/media-kit.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/resources/compendium/media-kit.mdx" + ], "staleInJsDoc": [] } }, @@ -5697,7 +6177,7 @@ "name": "LogoHeroContainer", "file": "snippets/components/page-structure/portals.jsx", "category": "page-structure", - "count": 32, + "count": 34, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -5730,16 +6210,18 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 8, + "en": 10, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 8, + "englishCanonicalCount": 10, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -5748,6 +6230,8 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -5776,7 +6260,9 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -5838,7 +6324,7 @@ "name": "P", "file": "snippets/components/page-structure/frameMode.jsx", "category": "page-structure", - "count": 31, + "count": 32, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -5870,16 +6356,17 @@ "v2/gateways/portal.mdx", "v2/home/mission-control.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 7, + "en": 8, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 7, + "englishCanonicalCount": 8, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -5887,6 +6374,7 @@ "v2/gateways/portal.mdx", "v2/home/mission-control.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -5913,7 +6401,8 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -5948,7 +6437,7 @@ "name": "PortalCardsHeader", "file": "snippets/components/page-structure/portals.jsx", "category": "page-structure", - "count": 32, + "count": 34, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -5981,16 +6470,18 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 8, + "en": 10, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 8, + "englishCanonicalCount": 10, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -5999,6 +6490,8 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -6027,7 +6520,9 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -6040,7 +6535,7 @@ "name": "PortalContentContainer", "file": "snippets/components/page-structure/portals.jsx", "category": "page-structure", - "count": 32, + "count": 34, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -6073,16 +6568,18 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 8, + "en": 10, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 8, + "englishCanonicalCount": 10, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -6091,6 +6588,8 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -6119,7 +6618,9 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -6132,7 +6633,7 @@ "name": "PortalHeroContent", "file": "snippets/components/page-structure/portals.jsx", "category": "page-structure", - "count": 32, + "count": 34, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -6165,16 +6666,18 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 8, + "en": 10, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 8, + "englishCanonicalCount": 10, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -6183,6 +6686,8 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -6211,7 +6716,9 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -6283,7 +6790,7 @@ "name": "Starfield", "file": "snippets/components/page-structure/heroGif.jsx", "category": "page-structure", - "count": 32, + "count": 34, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -6316,16 +6823,18 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 8, + "en": 10, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 8, + "englishCanonicalCount": 10, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -6334,6 +6843,8 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -6359,7 +6870,9 @@ "drift": { "missingFromJsDoc": [ "v2/gateways/portal.mdx", - "v2/orchestrators/portal.mdx" + "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -6371,7 +6884,7 @@ "name": "WidthCard", "file": "snippets/components/page-structure/customCards.jsx", "category": "page-structure", - "count": 10, + "count": 11, "pages": [ "v2/cn/home/about-livepeer/benefits.mdx", "v2/cn/home/about-livepeer/roadmap.mdx", @@ -6382,20 +6895,22 @@ "v2/gateways/quickstart/gateway-setup.mdx", "v2/home/about-livepeer/benefits.mdx", "v2/home/about-livepeer/roadmap.mdx", + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "localeBreakdown": { - "en": 4, + "en": 5, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 4, + "englishCanonicalCount": 5, "englishCanonicalPages": [ "v2/gateways/quickstart/gateway-setup.mdx", "v2/home/about-livepeer/benefits.mdx", "v2/home/about-livepeer/roadmap.mdx", + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "declaredUsedIn": [ @@ -6411,7 +6926,9 @@ "v2/resources/media-kit.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/resources/compendium/media-kit.mdx" + ], "staleInJsDoc": [] } }, @@ -6491,7 +7008,7 @@ "name": "BlinkingIcon", "file": "snippets/components/primitives/links.jsx", "category": "primitives", - "count": 40, + "count": 42, "pages": [ "v2/about/portal.mdx", "v2/cn/about/portal.mdx", @@ -6532,16 +7049,18 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "localeBreakdown": { - "en": 10, + "en": 12, "es": 10, "fr": 10, "cn": 10, "other": 0 }, - "englishCanonicalCount": 10, + "englishCanonicalCount": 12, "englishCanonicalPages": [ "v2/about/portal.mdx", "v2/community/community-portal.mdx", @@ -6552,6 +7071,8 @@ "v2/home/mission-control.mdx", "v2/lpt/token-portal.mdx", "v2/orchestrators/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", "v2/solutions/portal.mdx" ], "declaredUsedIn": [ @@ -6586,7 +7107,9 @@ "missingFromJsDoc": [ "v2/gateways/portal.mdx", "v2/gateways/setup/configure/ai-configuration.mdx", - "v2/gateways/setup/requirements/on-chain setup/on-chain.mdx" + "v2/gateways/setup/requirements/on-chain setup/on-chain.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx" ], "staleInJsDoc": [ "v2/gateways/gateways-portal.mdx", @@ -6691,7 +7214,7 @@ "name": "ComingSoonCallout", "file": "snippets/components/primitives/previewCallouts.jsx", "category": "primitives", - "count": 16, + "count": 17, "pages": [ "v2/cn/orchestrators/about-orchestrators/architecture.mdx", "v2/cn/orchestrators/about-orchestrators/economics.mdx", @@ -6708,18 +7231,20 @@ "v2/fr/orchestrators/orchestrator-tools-and-resources/community-pools.mdx", "v2/fr/resources/changelog/migration-guide.mdx", "v2/fr/resources/resources-portal.mdx", - "v2/resources/changelog/migration-guide.mdx" + "v2/resources/changelog/migration-guide.mdx", + "v2/resources/help-center.mdx" ], "localeBreakdown": { - "en": 1, + "en": 2, "es": 5, "fr": 5, "cn": 5, "other": 0 }, - "englishCanonicalCount": 1, + "englishCanonicalCount": 2, "englishCanonicalPages": [ - "v2/resources/changelog/migration-guide.mdx" + "v2/resources/changelog/migration-guide.mdx", + "v2/resources/help-center.mdx" ], "declaredUsedIn": [ "v2/resources/changelog/migration-guide.mdx" @@ -6728,7 +7253,9 @@ "v2/resources/changelog/migration-guide.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/resources/help-center.mdx" + ], "staleInJsDoc": [] } }, @@ -6736,23 +7263,27 @@ "name": "CopyText", "file": "snippets/components/primitives/text.jsx", "category": "primitives", - "count": 4, + "count": 6, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/cn/about/resources/blockchain-contracts.mdx", "v2/es/about/resources/blockchain-contracts.mdx", "v2/fr/about/resources/blockchain-contracts.mdx" ], "localeBreakdown": { - "en": 1, + "en": 3, "es": 1, "fr": 1, "cn": 1, "other": 0 }, - "englishCanonicalCount": 1, + "englishCanonicalCount": 3, "englishCanonicalPages": [ - "v2/about/resources/blockchain-contracts.mdx" + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx" ], "declaredUsedIn": [ "v2/about/resources/blockchain-contracts.mdx" @@ -6761,7 +7292,10 @@ "v2/about/resources/blockchain-contracts.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx" + ], "staleInJsDoc": [] } }, @@ -6812,8 +7346,10 @@ "name": "CustomCardTitle", "file": "snippets/components/primitives/customCardTitle.jsx", "category": "primitives", - "count": 10, + "count": 21, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/cn/home/about-livepeer/benefits.mdx", "v2/cn/home/primer.mdx", "v2/es/home/about-livepeer/benefits.mdx", @@ -6823,21 +7359,41 @@ "v2/gateways/portal.mdx", "v2/home/about-livepeer/benefits.mdx", "v2/home/primer.mdx", - "v2/internal/overview/docs-philosophy.mdx" + "v2/internal/overview/docs-philosophy.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/overview.mdx" ], "localeBreakdown": { - "en": 4, + "en": 15, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 4, + "englishCanonicalCount": 15, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/gateways/portal.mdx", "v2/home/about-livepeer/benefits.mdx", "v2/home/primer.mdx", - "v2/internal/overview/docs-philosophy.mdx" + "v2/internal/overview/docs-philosophy.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/overview.mdx" ], "declaredUsedIn": [ "v2/home/about-livepeer/benefits.mdx", @@ -6851,7 +7407,18 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/portal.mdx" + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", + "v2/gateways/portal.mdx", + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/overview.mdx" ], "staleInJsDoc": [] } @@ -6860,8 +7427,9 @@ "name": "CustomDivider", "file": "snippets/components/primitives/divider.jsx", "category": "primitives", - "count": 213, + "count": 256, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/about/livepeer-protocol/core-mechanisms.mdx", "v2/about/livepeer-protocol/governance-model.mdx", "v2/about/livepeer-protocol/livepeer-token.mdx", @@ -6870,6 +7438,8 @@ "v2/about/livepeer-protocol/treasury.mdx", "v2/about/portal.mdx", "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/compendium/glossary.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/cn/about/livepeer-protocol/core-mechanisms.mdx", "v2/cn/about/livepeer-protocol/governance-model.mdx", "v2/cn/about/livepeer-protocol/livepeer-token.mdx", @@ -7029,7 +7599,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -7064,6 +7633,8 @@ "v2/orchestrators/resources/faq.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -7073,18 +7644,58 @@ "v2/orchestrators/setup/rcs-requirements.mdx", "v2/orchestrators/setup/rs-install.mdx", "v2/orchestrators/setup/test.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/docs.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/resources/compendium/glossary.mdx", + "v2/resources/documentation-guide/ai-automations/research-and-fact-checking.mdx", "v2/resources/documentation-guide/research-and-fact-checking.mdx", - "v2/solutions/portal.mdx" + "v2/resources/livepeer-glossary.mdx", + "v2/resources/portal.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/resources/compendium/glossary.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" ], "localeBreakdown": { - "en": 132, + "en": 175, "es": 27, "fr": 27, "cn": 27, "other": 0 }, - "englishCanonicalCount": 132, + "englishCanonicalCount": 175, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/about/livepeer-protocol/core-mechanisms.mdx", "v2/about/livepeer-protocol/governance-model.mdx", "v2/about/livepeer-protocol/livepeer-token.mdx", @@ -7093,6 +7704,8 @@ "v2/about/livepeer-protocol/treasury.mdx", "v2/about/portal.mdx", "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/compendium/glossary.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/community/community-portal.mdx", "v2/community/livepeer-community/community-guidelines.mdx", "v2/developers/opportunities/bug-bounties.mdx", @@ -7171,7 +7784,6 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", - "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -7206,6 +7818,8 @@ "v2/orchestrators/resources/faq.mdx", "v2/orchestrators/resources/glossary.mdx", "v2/orchestrators/resources/gpu-support.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", "v2/orchestrators/resources/technical/cli-flags.mdx", "v2/orchestrators/resources/x-guides.mdx", "v2/orchestrators/setup/configure.mdx", @@ -7215,8 +7829,47 @@ "v2/orchestrators/setup/rcs-requirements.mdx", "v2/orchestrators/setup/rs-install.mdx", "v2/orchestrators/setup/test.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/docs.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/resources/compendium/glossary.mdx", + "v2/resources/documentation-guide/ai-automations/research-and-fact-checking.mdx", "v2/resources/documentation-guide/research-and-fact-checking.mdx", - "v2/solutions/portal.mdx" + "v2/resources/livepeer-glossary.mdx", + "v2/resources/portal.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/resources/compendium/glossary.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" ], "declaredUsedIn": [ "v2/about/livepeer-protocol/core-mechanisms.mdx", @@ -7487,16 +8140,65 @@ "v2/solutions/portal.mdx" ], "drift": { - "missingFromJsDoc": [], - "staleInJsDoc": [] + "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/compendium/glossary.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", + "v2/orchestrators/resources/reference/arbitrum-exchanges.mdx", + "v2/orchestrators/resources/reference/arbitrum-rpc.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/docs.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/resources/compendium/glossary.mdx", + "v2/resources/documentation-guide/ai-automations/research-and-fact-checking.mdx", + "v2/resources/livepeer-glossary.mdx", + "v2/resources/portal.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/resources/compendium/glossary.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" + ], + "staleInJsDoc": [ + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx" + ] } }, { "name": "DoubleIconLink", "file": "snippets/components/primitives/links.jsx", "category": "primitives", - "count": 47, + "count": 72, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/cn/gateways/about-gateways/gateway-architecture.mdx", "v2/cn/gateways/about/architecture.mdx", "v2/cn/gateways/quickstart/gateway-setup.mdx", @@ -7543,17 +8245,42 @@ "v2/gateways/setup/install/install-overview.mdx", "v2/gateways/setup/monitor/monitor-and-optimise.mdx", "v2/gateways/setup/requirements/on-chain setup/on-chain.mdx", - "v2/gateways/setup/requirements/setup.mdx" + "v2/gateways/setup/requirements/setup.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx" ], "localeBreakdown": { - "en": 11, + "en": 36, "es": 12, "fr": 12, "cn": 12, "other": 0 }, - "englishCanonicalCount": 11, + "englishCanonicalCount": 36, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/gateways/guides/deployment-details/setup-options.mdx", "v2/gateways/quickstart/gateway-setup.mdx", "v2/gateways/setup/configure/ai-configuration.mdx", @@ -7564,7 +8291,30 @@ "v2/gateways/setup/install/install-overview.mdx", "v2/gateways/setup/monitor/monitor-and-optimise.mdx", "v2/gateways/setup/requirements/on-chain setup/on-chain.mdx", - "v2/gateways/setup/requirements/setup.mdx" + "v2/gateways/setup/requirements/setup.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx" ], "declaredUsedIn": [ "v2/gateways/about/architecture.mdx", @@ -7600,6 +8350,8 @@ ], "drift": { "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/gateways/guides/deployment-details/setup-options.mdx", "v2/gateways/setup/configure/ai-configuration.mdx", "v2/gateways/setup/configure/dual-configuration.mdx", @@ -7609,7 +8361,30 @@ "v2/gateways/setup/install/install-overview.mdx", "v2/gateways/setup/monitor/monitor-and-optimise.mdx", "v2/gateways/setup/requirements/on-chain setup/on-chain.mdx", - "v2/gateways/setup/requirements/setup.mdx" + "v2/gateways/setup/requirements/setup.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx" ], "staleInJsDoc": [ "v2/gateways/about/architecture.mdx", @@ -7632,7 +8407,7 @@ "name": "DownloadButton", "file": "snippets/components/primitives/buttons.jsx", "category": "primitives", - "count": 10, + "count": 11, "pages": [ "v2/cn/gateways/quickstart/gateway-setup.mdx", "v2/cn/gateways/run-a-gateway/install/linux-install.mdx", @@ -7643,20 +8418,22 @@ "v2/gateways/quickstart/gateway-setup.mdx", "v2/gateways/setup/install/linux-install.mdx", "v2/internal/overview/docs-philosophy.mdx", + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "localeBreakdown": { - "en": 4, + "en": 5, "es": 2, "fr": 2, "cn": 2, "other": 0 }, - "englishCanonicalCount": 4, + "englishCanonicalCount": 5, "englishCanonicalPages": [ "v2/gateways/quickstart/gateway-setup.mdx", "v2/gateways/setup/install/linux-install.mdx", "v2/internal/overview/docs-philosophy.mdx", + "v2/resources/compendium/media-kit.mdx", "v2/resources/media-kit.mdx" ], "declaredUsedIn": [ @@ -7673,7 +8450,8 @@ ], "drift": { "missingFromJsDoc": [ - "v2/gateways/setup/install/linux-install.mdx" + "v2/gateways/setup/install/linux-install.mdx", + "v2/resources/compendium/media-kit.mdx" ], "staleInJsDoc": [ "v2/gateways/run-a-gateway/install/linux-install.mdx" @@ -7684,22 +8462,24 @@ "name": "FocusableScrollRegions", "file": "snippets/components/primitives/a11y.jsx", "category": "primitives", - "count": 4, + "count": 5, "pages": [ "v2/cn/resources/documentation-guide/style-guide.mdx", "v2/es/resources/documentation-guide/style-guide.mdx", "v2/fr/resources/documentation-guide/style-guide.mdx", + "v2/resources/documentation-guide/copy-style/style-guide.mdx", "v2/resources/documentation-guide/style-guide.mdx" ], "localeBreakdown": { - "en": 1, + "en": 2, "es": 1, "fr": 1, "cn": 1, "other": 0 }, - "englishCanonicalCount": 1, + "englishCanonicalCount": 2, "englishCanonicalPages": [ + "v2/resources/documentation-guide/copy-style/style-guide.mdx", "v2/resources/documentation-guide/style-guide.mdx" ], "declaredUsedIn": [ @@ -7709,7 +8489,9 @@ "v2/resources/documentation-guide/style-guide.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/resources/documentation-guide/copy-style/style-guide.mdx" + ], "staleInJsDoc": [] } }, @@ -7860,7 +8642,7 @@ "name": "GotoLink", "file": "snippets/components/primitives/links.jsx", "category": "primitives", - "count": 47, + "count": 46, "pages": [ "v2/about/livepeer-network/interfaces.mdx", "v2/about/livepeer-network/marketplace.mdx", @@ -7907,17 +8689,16 @@ "v2/gateways/setup/install/install-overview.mdx", "v2/gateways/setup/run-a-gateway.mdx", "v2/home/about-livepeer/vision.mdx", - "v2/home/primer.mdx", - "v2/solutions/product-hub.mdx" + "v2/home/primer.mdx" ], "localeBreakdown": { - "en": 11, + "en": 10, "es": 12, "fr": 12, "cn": 12, "other": 0 }, - "englishCanonicalCount": 11, + "englishCanonicalCount": 10, "englishCanonicalPages": [ "v2/about/livepeer-network/interfaces.mdx", "v2/about/livepeer-network/marketplace.mdx", @@ -7928,8 +8709,7 @@ "v2/gateways/setup/install/install-overview.mdx", "v2/gateways/setup/run-a-gateway.mdx", "v2/home/about-livepeer/vision.mdx", - "v2/home/primer.mdx", - "v2/solutions/product-hub.mdx" + "v2/home/primer.mdx" ], "declaredUsedIn": [ "v2/about/livepeer-network/interfaces.mdx", @@ -7984,7 +8764,8 @@ "v2/gateways/using-gateways/gateway-providers.mdx", "v2/orchestrators/old/advanced-setup/hosting-models.mdx", "v2/orchestrators/operations/hosting-models.mdx", - "v2/orchestrators/v2-dev/advanced/hosting-models.mdx" + "v2/orchestrators/v2-dev/advanced/hosting-models.mdx", + "v2/solutions/product-hub.mdx" ] } }, @@ -7995,7 +8776,7 @@ "count": 29, "pages": [ "v2/about/livepeer-protocol/technical-architecture.mdx", - "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/cn/about/livepeer-protocol/technical-architecture.mdx", "v2/cn/about/resources/blockchain-contracts.mdx", "v2/cn/home/about-livepeer/benefits.mdx", @@ -8030,7 +8811,7 @@ "englishCanonicalCount": 7, "englishCanonicalPages": [ "v2/about/livepeer-protocol/technical-architecture.mdx", - "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/community/livepeer-community/community-guidelines.mdx", "v2/home/about-livepeer/benefits.mdx", "v2/home/about-livepeer/evolution.mdx", @@ -8056,21 +8837,27 @@ "v2/home/primer.mdx" ], "drift": { - "missingFromJsDoc": [], - "staleInJsDoc": [] + "missingFromJsDoc": [ + "v2/about/resources/dep-blockchain-contracts.mdx" + ], + "staleInJsDoc": [ + "v2/about/resources/blockchain-contracts.mdx" + ] } }, { "name": "LinkArrow", "file": "snippets/components/primitives/links.jsx", "category": "primitives", - "count": 137, + "count": 168, "pages": [ "v2/about/livepeer-overview.mdx", + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/about/livepeer-protocol/governance-model.mdx", "v2/about/livepeer-protocol/livepeer-token.mdx", "v2/about/livepeer-protocol/overview.mdx", "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/cn/about/livepeer-overview.mdx", "v2/cn/about/livepeer-protocol/governance-model.mdx", "v2/cn/about/livepeer-protocol/livepeer-token.mdx", @@ -8181,6 +8968,7 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -8202,22 +8990,52 @@ "v2/orchestrators/setup/connect-and-activate.mdx", "v2/orchestrators/setup/rcs-requirements.mdx", "v2/orchestrators/setup/rs-install.mdx", - "v2/orchestrators/setup/test.mdx" + "v2/orchestrators/setup/test.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx" ], "localeBreakdown": { - "en": 83, + "en": 114, "es": 18, "fr": 18, "cn": 18, "other": 0 }, - "englishCanonicalCount": 83, + "englishCanonicalCount": 114, "englishCanonicalPages": [ "v2/about/livepeer-overview.mdx", + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/about/livepeer-protocol/governance-model.mdx", "v2/about/livepeer-protocol/livepeer-token.mdx", "v2/about/livepeer-protocol/overview.mdx", "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/community/livepeer-community/trending-topics.mdx", "v2/community/livepeer-connect/events-and-community-streams.mdx", "v2/developers/guides/contribution-guide.mdx", @@ -8274,6 +9092,7 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -8295,7 +9114,35 @@ "v2/orchestrators/setup/connect-and-activate.mdx", "v2/orchestrators/setup/rcs-requirements.mdx", "v2/orchestrators/setup/rs-install.mdx", - "v2/orchestrators/setup/test.mdx" + "v2/orchestrators/setup/test.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx" ], "declaredUsedIn": [ "v2/about/livepeer-overview.mdx", @@ -8345,6 +9192,8 @@ ], "drift": { "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/gateways/concepts/architecture.mdx", "v2/gateways/concepts/business-model.mdx", "v2/gateways/concepts/capabilities.mdx", @@ -8390,6 +9239,7 @@ "v2/orchestrators/guides/config-and-optimisation/pricing-strategy.mdx", "v2/orchestrators/guides/config-and-optimisation/reward-call-tuning.mdx", "v2/orchestrators/guides/deployment-details/dual-mode-configuration.mdx", + "v2/orchestrators/guides/deployment-details/join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/new-join-a-pool.mdx", "v2/orchestrators/guides/deployment-details/orchestrator-transcoder-setup.mdx", "v2/orchestrators/guides/deployment-details/setup-options.mdx", @@ -8411,7 +9261,35 @@ "v2/orchestrators/setup/connect-and-activate.mdx", "v2/orchestrators/setup/rcs-requirements.mdx", "v2/orchestrators/setup/rs-install.mdx", - "v2/orchestrators/setup/test.mdx" + "v2/orchestrators/setup/test.mdx", + "v2/resources/changelog/ai-compute/ai-runner.mdx", + "v2/resources/changelog/ai-compute/comfystream.mdx", + "v2/resources/changelog/ai-compute/pytrickle.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-go.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-ai-python.mdx", + "v2/resources/changelog/apis-sdks/livepeer-js.mdx", + "v2/resources/changelog/apis-sdks/livepeer-python.mdx", + "v2/resources/changelog/ecosystem/awesome-livepeer.mdx", + "v2/resources/changelog/ecosystem/website.mdx", + "v2/resources/changelog/protocol/go-livepeer.mdx", + "v2/resources/changelog/protocol/lips.mdx", + "v2/resources/changelog/protocol/naap.mdx", + "v2/resources/changelog/protocol/subgraph.mdx", + "v2/resources/changelog/tooling/explorer.mdx", + "v2/resources/changelog/tooling/livepeer-data.mdx", + "v2/resources/changelog/tooling/livepeer-python-gateway.mdx", + "v2/solutions/daydream/changelog.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/embody/changelog.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/frameworks/changelog.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/livepeer-studio/changelog.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/solution-providers.mdx", + "v2/solutions/streamplace/changelog.mdx", + "v2/solutions/streamplace/community.mdx" ], "staleInJsDoc": [ "v2/gateways/using-gateways/gateway-providers.mdx", @@ -8448,22 +9326,26 @@ "name": "LivepeerIcon", "file": "snippets/components/primitives/icons.jsx", "category": "primitives", - "count": 4, + "count": 6, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/cn/home/mission-control.mdx", "v2/es/home/mission-control.mdx", "v2/fr/home/mission-control.mdx", "v2/home/mission-control.mdx" ], "localeBreakdown": { - "en": 1, + "en": 3, "es": 1, "fr": 1, "cn": 1, "other": 0 }, - "englishCanonicalCount": 1, + "englishCanonicalCount": 3, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx", "v2/home/mission-control.mdx" ], "declaredUsedIn": [ @@ -8473,7 +9355,10 @@ "v2/home/mission-control.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx" + ], "staleInJsDoc": [] } }, @@ -8525,21 +9410,30 @@ "name": "LivepeerSVG", "file": "snippets/components/primitives/icons.jsx", "category": "primitives", - "count": 0, - "pages": [], + "count": 2, + "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx" + ], "localeBreakdown": { - "en": 0, + "en": 2, "es": 0, "fr": 0, "cn": 0, "other": 0 }, - "englishCanonicalCount": 0, - "englishCanonicalPages": [], + "englishCanonicalCount": 2, + "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx" + ], "declaredUsedIn": [], "declaredUsedInEnglish": [], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/blockchain-contracts.mdx" + ], "staleInJsDoc": [] } }, @@ -8775,7 +9669,7 @@ "name": "PreviewCallout", "file": "snippets/components/primitives/previewCallouts.jsx", "category": "primitives", - "count": 26, + "count": 25, "pages": [ "v2/cn/orchestrators/about-orchestrators/orchestrator-functions.mdx", "v2/cn/orchestrators/about-orchestrators/overview.mdx", @@ -8801,20 +9695,18 @@ "v2/fr/resources/changelog/changelog.mdx", "v2/fr/resources/documentation-guide/style-guide.mdx", "v2/fr/resources/livepeer-glossary.mdx", - "v2/resources/concepts/brief-history-of-video.mdx", - "v2/resources/references/contract-addresses.mdx" + "v2/resources/concepts/brief-history-of-video.mdx" ], "localeBreakdown": { - "en": 2, + "en": 1, "es": 8, "fr": 8, "cn": 8, "other": 0 }, - "englishCanonicalCount": 2, + "englishCanonicalCount": 1, "englishCanonicalPages": [ - "v2/resources/concepts/brief-history-of-video.mdx", - "v2/resources/references/contract-addresses.mdx" + "v2/resources/concepts/brief-history-of-video.mdx" ], "declaredUsedIn": [ "v2/developers/ai-inference-on-livepeer/overview.mdx", @@ -8841,7 +9733,8 @@ "v2/developers/ai-inference-on-livepeer/workload-fit.mdx", "v2/developers/livepeer-real-time-video/video-streaming-on-livepeer/video-streaming-101.mdx", "v2/developers/quickstart/video/video-streaming-101.mdx", - "v2/orchestrators/setup/publish-offerings.mdx" + "v2/orchestrators/setup/publish-offerings.mdx", + "v2/resources/references/contract-addresses.mdx" ] } }, @@ -8871,21 +9764,63 @@ "name": "SocialLinks", "file": "snippets/components/primitives/socialLinks.jsx", "category": "primitives", - "count": 0, - "pages": [], + "count": 13, + "pages": [ + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" + ], "localeBreakdown": { - "en": 0, + "en": 13, "es": 0, "fr": 0, "cn": 0, "other": 0 }, - "englishCanonicalCount": 0, - "englishCanonicalPages": [], + "englishCanonicalCount": 13, + "englishCanonicalPages": [ + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" + ], "declaredUsedIn": [], "declaredUsedInEnglish": [], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/resources/portal.mdx", + "v2/resources/resources-portal.mdx", + "v2/solutions/daydream/community.mdx", + "v2/solutions/daydream/overview.mdx", + "v2/solutions/embody/community.mdx", + "v2/solutions/embody/overview.mdx", + "v2/solutions/frameworks/community.mdx", + "v2/solutions/frameworks/overview.mdx", + "v2/solutions/livepeer-studio/community.mdx", + "v2/solutions/livepeer-studio/overview.mdx", + "v2/solutions/portal.mdx", + "v2/solutions/streamplace/community.mdx", + "v2/solutions/streamplace/overview.mdx" + ], "staleInJsDoc": [] } }, @@ -8915,10 +9850,12 @@ "name": "Subtitle", "file": "snippets/components/primitives/text.jsx", "category": "primitives", - "count": 16, + "count": 18, "pages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/about/mental-model.mdx", "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/cn/about/mental-model.mdx", "v2/cn/about/resources/blockchain-contracts.mdx", "v2/cn/home/solutions/showcase.mdx", @@ -8935,16 +9872,18 @@ "v2/home/solutions/verticals.mdx" ], "localeBreakdown": { - "en": 4, + "en": 6, "es": 4, "fr": 4, "cn": 4, "other": 0 }, - "englishCanonicalCount": 4, + "englishCanonicalCount": 6, "englishCanonicalPages": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", "v2/about/mental-model.mdx", "v2/about/resources/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx", "v2/home/solutions/showcase.mdx", "v2/home/solutions/verticals.mdx" ], @@ -8961,7 +9900,10 @@ "v2/home/solutions/verticals.mdx" ], "drift": { - "missingFromJsDoc": [], + "missingFromJsDoc": [ + "v2/about/livepeer-protocol/blockchain-contracts.mdx", + "v2/about/resources/dep-blockchain-contracts.mdx" + ], "staleInJsDoc": [] } }, @@ -9010,11 +9952,6 @@ "file": "snippets/components/content/video.jsx", "category": "content" }, - { - "name": "MarkdownEmbed", - "file": "snippets/components/content/embed.jsx", - "category": "content" - }, { "name": "ResponseFieldGroup", "file": "snippets/components/content/responseField.jsx", @@ -9030,11 +9967,6 @@ "file": "snippets/components/data/data.jsx", "category": "data" }, - { - "name": "MarkdownEmbed", - "file": "snippets/components/data/embed.jsx", - "category": "data" - }, { "name": "AccordionGroupList", "file": "snippets/components/layout/accordionGroupList.jsx", @@ -9135,21 +10067,11 @@ "file": "snippets/components/primitives/icons.jsx", "category": "primitives" }, - { - "name": "LivepeerSVG", - "file": "snippets/components/primitives/icons.jsx", - "category": "primitives" - }, { "name": "ReviewCallout", "file": "snippets/components/primitives/previewCallouts.jsx", "category": "primitives" }, - { - "name": "SocialLinks", - "file": "snippets/components/primitives/socialLinks.jsx", - "category": "primitives" - }, { "name": "Spacer", "file": "snippets/components/primitives/spacer.jsx", @@ -9161,151 +10083,151 @@ "rank": 1, "name": "CustomDivider", "category": "primitives", - "count": 213 + "count": 256 }, { "rank": 2, "name": "LinkArrow", "category": "primitives", - "count": 137 + "count": 168 }, { "rank": 3, "name": "StyledTable", "category": "layout", - "count": 106 + "count": 107 }, { "rank": 4, "name": "TableCell", "category": "layout", - "count": 106 + "count": 107 }, { "rank": 5, "name": "TableRow", "category": "layout", - "count": 106 + "count": 107 }, { "rank": 6, - "name": "StyledStep", + "name": "BorderedBox", "category": "layout", - "count": 73 + "count": 85 }, { "rank": 7, - "name": "StyledSteps", + "name": "StyledStep", "category": "layout", - "count": 73 + "count": 79 }, { "rank": 8, - "name": "DynamicTable", + "name": "StyledSteps", "category": "layout", - "count": 68 + "count": 79 }, { "rank": 9, - "name": "BorderedBox", + "name": "DynamicTable", "category": "layout", - "count": 64 + "count": 73 }, { "rank": 10, - "name": "GotoCard", + "name": "DoubleIconLink", "category": "primitives", - "count": 57 + "count": 72 }, { "rank": 11, "name": "ScrollableDiagram", "category": "content", - "count": 57 + "count": 58 }, { "rank": 12, - "name": "MathBlock", + "name": "GotoCard", "category": "primitives", - "count": 49 + "count": 57 }, { "rank": 13, - "name": "MathInline", - "category": "primitives", - "count": 49 + "name": "YouTubeVideo", + "category": "content", + "count": 54 }, { "rank": 14, - "name": "DoubleIconLink", + "name": "MathBlock", "category": "primitives", - "count": 47 + "count": 49 }, { "rank": 15, - "name": "GotoLink", + "name": "MathInline", "category": "primitives", - "count": 47 + "count": 49 }, { "rank": 16, - "name": "YouTubeVideo", - "category": "content", - "count": 47 + "name": "GotoLink", + "category": "primitives", + "count": 46 }, { "rank": 17, "name": "BlinkingIcon", "category": "primitives", - "count": 40 + "count": 42 }, { "rank": 18, - "name": "DisplayCard", + "name": "ScrollBox", "category": "layout", - "count": 34 + "count": 36 }, { "rank": 19, - "name": "DisplayCard", - "category": "page-structure", - "count": 34 + "name": "Quote", + "category": "content", + "count": 35 }, { "rank": 20, - "name": "Quote", - "category": "content", - "count": 33 + "name": "DisplayCard", + "category": "layout", + "count": 34 }, { "rank": 21, - "name": "HeroContentContainer", + "name": "DisplayCard", "category": "page-structure", - "count": 32 + "count": 34 }, { "rank": 22, - "name": "HeroImageBackgroundComponent", + "name": "HeroContentContainer", "category": "page-structure", - "count": 32 + "count": 34 }, { "rank": 23, - "name": "HeroSectionContainer", + "name": "HeroImageBackgroundComponent", "category": "page-structure", - "count": 32 + "count": 34 }, { "rank": 24, - "name": "LogoHeroContainer", + "name": "HeroSectionContainer", "category": "page-structure", - "count": 32 + "count": 34 }, { "rank": 25, - "name": "PortalCardsHeader", + "name": "LogoHeroContainer", "category": "page-structure", - "count": 32 + "count": 34 } ] } diff --git a/docs-index.json b/docs-index.json index 4a5172127..0470fb8e7 100644 --- a/docs-index.json +++ b/docs-index.json @@ -1,6 +1,6 @@ { "version": "docs-index.v1", - "generated": "2026-03-30T17:50:17.088Z", + "generated": "2026-04-03T11:28:24.979Z", "pages": [ { "url": "https://docs.livepeer.org/v2/home/mission-control", @@ -438,7 +438,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 172, - "lastVerified": "2026-03-18T19:00:47+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -460,7 +460,7 @@ "apiEndpoints": [], "difficulty": "beginner", "wordCount": 1090, - "lastVerified": "2026-03-18T19:00:47+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -507,7 +507,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 594, - "lastVerified": "2026-03-18T19:00:47+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 3, @@ -566,7 +566,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1432, - "lastVerified": "2026-03-18T19:00:47+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 1, @@ -612,7 +612,7 @@ "apiEndpoints": [], "difficulty": "beginner", "wordCount": 895, - "lastVerified": "2026-03-18T19:00:47+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 1, @@ -669,7 +669,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1860, - "lastVerified": "2026-03-18T19:00:47+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -734,8 +734,8 @@ ], "apiEndpoints": [], "difficulty": "intermediate", - "wordCount": 3628, - "lastVerified": "2026-03-30T17:50:06.157Z", + "wordCount": 3247, + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -791,7 +791,7 @@ }, { "level": 4, - "text": "**LivepeerTokenFaucet** " + "text": "**LivepeerTokenFaucet** " }, { "level": 2, @@ -857,7 +857,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 994, - "lastVerified": "2026-03-18T19:00:47+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -933,7 +933,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1070, - "lastVerified": "2026-03-18T19:00:47+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -994,7 +994,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 757, - "lastVerified": "2026-03-18T19:00:47+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -1134,7 +1134,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 115, - "lastVerified": "2026-03-17T06:36:42+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -1297,7 +1297,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 725, - "lastVerified": "2026-03-17T06:36:42+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 3, @@ -1339,7 +1339,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 448, - "lastVerified": "2026-03-17T06:36:42+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -1413,7 +1413,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 390, - "lastVerified": "2026-03-17T06:36:42+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -1493,7 +1493,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 282, - "lastVerified": "2026-03-17T06:36:42+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -1571,7 +1571,7 @@ { "url": "https://docs.livepeer.org/v2/about/resources/livepeer-contract-addresses", "title": "Canonical Contract Addresses", - "description": "Official Livepeer protocol contract addresses on Arbitrum One and Ethereum Mainnet. Verified on-chain and automatically updated from the canonical governor-scripts source. The only official reference outside the blockchain.", + "description": "Official Livepeer protocol contract addresses on Arbitrum One and Ethereum Mainnet. Verified from live chain state, upstream source provenance, and explorer evidence on every refresh. The canonical public reference surface.", "section": "about", "tags": [ "livepeer", @@ -1591,7 +1591,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 0, - "lastVerified": "2026-03-30T17:09:41.590Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -1636,7 +1636,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1678, - "lastVerified": "2026-03-30T17:09:41.589Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -2026,7 +2026,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 402, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -2047,7 +2047,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 458, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -2091,7 +2091,7 @@ "apiEndpoints": [], "difficulty": "beginner", "wordCount": 383, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -2180,7 +2180,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 3448, - "lastVerified": "2026-03-30T00:24:02+00:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -2206,7 +2206,7 @@ "apiEndpoints": [], "difficulty": "beginner", "wordCount": 465, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -2294,7 +2294,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 2236, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -2319,7 +2319,7 @@ "apiEndpoints": [], "difficulty": "beginner", "wordCount": 366, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -2364,7 +2364,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 54, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -2409,7 +2409,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 587, - "lastVerified": "2026-03-30T17:09:41.632Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -2432,7 +2432,7 @@ "apiEndpoints": [], "difficulty": "beginner", "wordCount": 344, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -2515,7 +2515,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 184, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [ "bash" @@ -2540,7 +2540,7 @@ "apiEndpoints": [], "difficulty": "beginner", "wordCount": 455, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -2624,7 +2624,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 2429, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -2709,7 +2709,7 @@ "apiEndpoints": [], "difficulty": "beginner", "wordCount": 108, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -2886,7 +2886,7 @@ "apiEndpoints": [], "difficulty": "beginner", "wordCount": 355, - "lastVerified": "2026-03-26T22:24:22+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -7858,7 +7858,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 942, - "lastVerified": "2026-03-17T05:05:46+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -11671,7 +11671,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 0, - "lastVerified": "2026-03-30T17:09:41.591Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -17515,7 +17515,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 0, - "lastVerified": "2026-03-30T17:09:41.593Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -19769,7 +19769,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 91, - "lastVerified": "2026-03-30T17:09:41.608Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -19961,7 +19961,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 2399, - "lastVerified": "2026-03-30T17:27:30.007Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -20248,7 +20248,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 6, - "lastVerified": "2026-03-18T18:00:11+11:00", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -20271,7 +20271,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1155, - "lastVerified": "2026-03-30T17:27:30.007Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -20419,7 +20419,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 306, - "lastVerified": "2026-03-30T17:50:06.177Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -20483,7 +20483,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 3933, - "lastVerified": "2026-03-30T17:27:30.006Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -20773,7 +20773,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 469, - "lastVerified": "2026-03-30T17:27:30.006Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -20824,7 +20824,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 3354, - "lastVerified": "2026-03-30T17:28:24.544Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -21174,7 +21174,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1309, - "lastVerified": "2026-03-30T17:50:06.188Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -21317,7 +21317,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1091, - "lastVerified": "2026-03-30T17:50:06.189Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 1, @@ -21460,8 +21460,8 @@ "entities": [], "apiEndpoints": [], "difficulty": "beginner", - "wordCount": 212, - "lastVerified": "2026-03-16T22:32:19+11:00", + "wordCount": 165, + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -21495,8 +21495,8 @@ "entities": [], "apiEndpoints": [], "difficulty": "intermediate", - "wordCount": 223, - "lastVerified": "2026-03-16T22:32:19+11:00", + "wordCount": 193, + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -21528,7 +21528,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1098, - "lastVerified": "2026-03-30T17:09:41.602Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -21674,7 +21674,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1348, - "lastVerified": "2026-03-30T17:09:41.602Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -21836,7 +21836,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 950, - "lastVerified": "2026-03-30T17:09:41.602Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -21954,7 +21954,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 1148, - "lastVerified": "2026-03-30T17:09:41.602Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -22072,7 +22072,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 984, - "lastVerified": "2026-03-30T17:09:41.602Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -22182,7 +22182,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 205, - "lastVerified": "2026-03-30T17:09:41.602Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -22224,7 +22224,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 0, - "lastVerified": "2026-03-30T17:09:41.604Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22250,7 +22250,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 807, - "lastVerified": "2026-03-30T17:50:06.191Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 2, @@ -22389,7 +22389,7 @@ "entities": [], "apiEndpoints": [], "difficulty": "intermediate", - "wordCount": 3257, + "wordCount": 3186, "lastVerified": "2026-03-16T22:32:19+11:00", "headings": [ { @@ -22444,7 +22444,7 @@ "entities": [], "apiEndpoints": [], "difficulty": "intermediate", - "wordCount": 5400, + "wordCount": 5630, "lastVerified": "2026-03-17T07:30:09+11:00", "headings": [ { @@ -22526,7 +22526,7 @@ "entities": [], "apiEndpoints": [], "difficulty": "intermediate", - "wordCount": 986, + "wordCount": 1146, "lastVerified": "2026-03-17T03:34:36+11:00", "headings": [], "codeLanguages": [] @@ -22548,7 +22548,7 @@ "entities": [], "apiEndpoints": [], "difficulty": "intermediate", - "wordCount": 478, + "wordCount": 758, "lastVerified": "2026-03-17T01:02:34+11:00", "headings": [ { @@ -22574,33 +22574,6 @@ ], "codeLanguages": [] }, - { - "url": "https://docs.livepeer.org/v2/resources/references/contract-addresses", - "title": "Canonical Contract Addresses", - "description": "Official Livepeer protocol contract addresses on Arbitrum One and Ethereum Mainnet. Verified on-chain and automatically updated from the canonical governor-scripts source. The only official reference outside the blockchain.", - "section": "resources", - "tags": [ - "livepeer", - "livepeer-contracts", - "livepeer-contract-address", - "livepeer-contract-addresses", - "lpt-contract-address", - "lpt-token-address", - "livepeer-token-address", - "livepeer-smart-contract-address", - "livepeer-arbitrum-contract-address", - "livepeer-ethereum-contract-address", - "livepeer-official-contract", - "livepeer-protocol-contracts" - ], - "entities": [], - "apiEndpoints": [], - "difficulty": "advanced", - "wordCount": 0, - "lastVerified": "2026-03-19T17:52:46+11:00", - "headings": [], - "codeLanguages": [] - }, { "url": "https://docs.livepeer.org/v2/resources/compendium/glossary", "title": "Resources Glossary", @@ -22699,7 +22672,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 557, - "lastVerified": "2026-03-30T17:09:41.597Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [ { "level": 3, @@ -22751,7 +22724,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 184, - "lastVerified": "2026-03-30T17:09:41.597Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22774,7 +22747,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 3402, - "lastVerified": "2026-03-30T17:49:15.346Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22797,7 +22770,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 534, - "lastVerified": "2026-03-30T17:09:41.598Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22823,7 +22796,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 759, - "lastVerified": "2026-03-30T17:09:41.594Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22849,7 +22822,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 662, - "lastVerified": "2026-03-30T17:09:41.594Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22875,7 +22848,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 473, - "lastVerified": "2026-03-30T17:50:06.170Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22899,7 +22872,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 25, - "lastVerified": "2026-03-30T17:09:41.599Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22921,7 +22894,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 618, - "lastVerified": "2026-03-30T17:09:41.599Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22943,7 +22916,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 176, - "lastVerified": "2026-03-30T17:09:41.599Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22967,7 +22940,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 63, - "lastVerified": "2026-03-30T17:09:41.595Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -22993,7 +22966,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 135, - "lastVerified": "2026-03-30T17:09:41.595Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -23017,7 +22990,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 27, - "lastVerified": "2026-03-30T17:09:41.595Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -23043,7 +23016,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 135, - "lastVerified": "2026-03-30T17:09:41.595Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -23069,7 +23042,7 @@ "apiEndpoints": [], "difficulty": "advanced", "wordCount": 123, - "lastVerified": "2026-03-30T17:09:41.595Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -23090,7 +23063,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 759, - "lastVerified": "2026-03-30T17:09:41.596Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -23111,7 +23084,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 264, - "lastVerified": "2026-03-30T17:09:41.596Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, @@ -23133,7 +23106,7 @@ "apiEndpoints": [], "difficulty": "intermediate", "wordCount": 0, - "lastVerified": "2026-03-30T17:09:41.604Z", + "lastVerified": "2026-03-31T05:07:00+11:00", "headings": [], "codeLanguages": [] }, diff --git a/docs.json b/docs.json index dee17b539..71ed17869 100644 --- a/docs.json +++ b/docs.json @@ -3278,7 +3278,7 @@ "group": "Technical References", "icon": "code", "pages": [ - "v2/resources/references/contract-addresses" + "v2/about/resources/livepeer-contract-addresses" ] }, { @@ -4802,9 +4802,25 @@ "source": "/v1/reference/api", "destination": "/v1/api-reference/overview/introduction" }, + { + "source": "/references/contract-addresses", + "destination": "/v2/about/resources/livepeer-contract-addresses" + }, + { + "source": "/v2/about/resources/contract-addresses", + "destination": "/v2/about/resources/livepeer-contract-addresses" + }, + { + "source": "/v2/resources/references/contract-addresses", + "destination": "/v2/about/resources/livepeer-contract-addresses" + }, { "source": "/v1/reference/deployed-contract-addresses", - "destination": "/v1/references/contract-addresses" + "destination": "/v2/about/resources/livepeer-contract-addresses" + }, + { + "source": "/v1/references/contract-addresses", + "destination": "/v2/about/resources/livepeer-contract-addresses" }, { "source": "/v1/reference/example-applications", diff --git a/operations/package.json b/operations/package.json new file mode 100644 index 000000000..0776609c2 --- /dev/null +++ b/operations/package.json @@ -0,0 +1,11 @@ +{ + "name": "livepeer-docs-operations", + "version": "1.0.0", + "private": true, + "dependencies": { + "@solidity-parser/parser": "^0.20.2", + "gray-matter": "^4.0.3", + "js-sha3": "^0.9.3", + "puppeteer": "^24.2.0" + } +} diff --git a/operations/scripts-library/fetch-contract-addresses.mdx b/operations/scripts-library/fetch-contract-addresses.mdx new file mode 100644 index 000000000..81101d849 --- /dev/null +++ b/operations/scripts-library/fetch-contract-addresses.mdx @@ -0,0 +1,237 @@ +--- +title: 'Fetch Contract Addresses' +sidebarTitle: 'Fetch Contract Addresses' +description: 'Internal reference for the contracts registry builder script used by the docs contracts pipeline.' +pageType: reference +purpose: reference +audience: internal +status: active +lastVerified: '2026-04-01' +keywords: + - livepeer + - contracts + - fetch-contract-addresses + - scripts-library + - internal +--- + +## Classification + +| Field | Value | +|---|---| +| **Current file** | `.github/scripts/fetch-contract-addresses.js` | +| **Type** | `automation` | +| **Concern** | `integrations` | +| **Purpose** | Build the published Livepeer contracts registry for docs consumers | +| **Mode** | Generate | +| **Primary workflow** | `.github/workflows/update-contract-addresses.yml` | + +## Summary + +`fetch-contract-addresses.js` builds the contract registry used by the Livepeer Docs contracts page and verifier widget. + +It is not a pure repo-file republisher, but it is also not a pure event-derived system today. It starts from governed manifest inputs, validates the live protocol state on-chain where applicable, enriches the result with explorer/runtime data, then emits grouped registry outputs for docs consumers. + +The script exists to answer one question reliably: + +> What contract addresses should the docs publish right now, and what evidence do we have that they are correct? + +## What The Script Uses As Inputs + +### 1. Canonical manifest inputs + +- `livepeer/governor-scripts/updates/addresses.js` +- `operations/scripts/config/contract-addresses-authority.json` + +These are the starting inputs, not the final proof on their own. + +### 2. On-chain runtime inputs + +- Arbitrum One public RPC endpoints +- Ethereum Mainnet public RPC endpoints +- live Controller addresses hardcoded in the script for both chains + +These are used to verify current controller-managed addresses and proxy runtime state. + +### 3. Explorer enrichment inputs + +- Blockscout APIs +- Arbiscan / Etherscan APIs + +These are used to enrich the registry with source verification, deployment metadata, activity metadata, and proxy details. + +### 4. Previous generated data + +- `snippets/data/contract-addresses/contractAddressesData.json` +- `snippets/data/contract-addresses/contractAddressesData.jsx` + +This is only used as a fallback for stale metadata fields when explorer enrichment is missing. It is not the canonical address source. + +## What The Script Does + +### Step 1. Fetch the governor manifest + +The script fetches `updates/addresses.js` from `livepeer/governor-scripts` via the GitHub API or `gh`, parses the `ADDRESSES` object, and records the resolved commit SHA. + +This gives it the canonical manifest values for contracts that are maintained in `governor-scripts`. + +### Step 2. Load the contracts catalog config + +The script loads `operations/scripts/automations/content/data/contracts/catalog-config.js`. + +This catalog config fills the gaps that `governor-scripts` does not cover and defines: + +- which contracts are governed by which source +- chain ownership +- lifecycle classification +- code repo / branch / path +- current implementation strategy for proxies + +This is how the script handles contracts that are not present in `governor-scripts`. + +### Step 3. Resolve each deployment deterministically + +For every deployment definition, the script resolves: + +- address +- chain +- lifecycle +- category +- deployment kind +- code source + +It does this by explicit authority rules. + +It does not infer “latest” from naming patterns such as `V2`, `Target`, or branch names. + +### Step 4. Check bytecode exists on-chain + +The script uses explorer RPC/API calls such as `eth_getCode` to confirm that the resolved address has contract bytecode on-chain. + +This becomes the `hasBytecode` signal. + +### Step 5. Reconcile controller-managed contracts on-chain + +For contracts that should be registered in the live Controller, the script calls: + +- `Controller.getContract(keccak256(slotName))` + +It compares that live result to the resolved address from the manifest/catalog. + +This is what establishes whether a controller-managed contract is actually current and registered. + +### Step 6. Verify active proxy runtime state + +For proxy contracts, the script performs runtime verification through the proxy itself: + +1. call `controller()` on the proxy +2. call `targetContractId()` on the proxy +3. call `Controller.getContract(targetContractId)` on the resolved Controller + +That gives the current downstream implementation address for active proxies. + +This is stronger than checking a static manifest alone because it verifies the currently wired runtime path. + +### Step 7. Enrich with explorer data + +Where explorer services are available, the script enriches entries with: + +- explorer contract label +- creator address +- source verification state +- compiler metadata +- deployment metadata +- recent activity metadata +- proxy metadata from explorer responses + +This enrichment improves the published evidence model, but it is not the primary address authority. + +### Step 8. Build structured verification data + +The script writes structured verification fields such as: + +- `controllerRegistered` +- `addressSource` +- `codeSource` +- `verification.controller` +- `verification.proxy` +- `verification.explorer` +- `verification.status` + +These fields are what the contracts widget and page can use to explain why an address is trusted. + +### Step 9. Build lifecycle-safe outputs + +The script groups contracts into lifecycle outputs including: + +- `active` +- `paused` +- `migration_residual` +- `legacy_operational` +- `currentImplementations` +- `historical` +- `inventory` + +This is what allows the page to show active contracts separately from historical or residual ones. + +### Step 10. Write the generated JSON files + +The script writes: + +- `snippets/data/contract-addresses/contractAddressesData.json` +- `snippets/data/contract-addresses/blockchainContractsPageData.json` +- `snippets/data/contract-addresses/_health-checks.json` + +These are the canonical generated outputs. MDX pages consume them through the checked-in adapter at `snippets/data/contract-addresses/index.jsx`. + +## What The Script Does Not Do + +It does not do these things: + +- It does not reconstruct the entire published registry from emitted protocol events alone. +- It does not rely only on `governor-scripts`. +- It does not assume every contract is controller-managed. +- It does not guess current deployments from naming conventions. +- It does not treat docs pages as a source of truth. + +## How To Explain The Current Trust Model + +The most accurate short description is: + +> The contracts script is manifest-driven on input, on-chain validated where applicable, and explorer-enriched before publishing. + +That means: + +- manifest files define what should exist +- on-chain controller and proxy checks confirm live current state for operational contracts +- explorer/runtime data adds extra evidence and metadata + +## Where The Security Committee Recommendation Fits + +The recommendation in `livepeer/governor-scripts` PR `#14` is to compare addresses against protocol events emitted by the Controller. + +That is a valid strengthening step for controller-managed contracts, especially for: + +- completeness checks +- historical controller state +- drift detection in `governor-scripts` + +But it would be an additional verification layer, not a full replacement for this docs script on its own, because the docs script still has to handle: + +- contracts not present in `governor-scripts` +- contracts not managed by the Controller +- lifecycle grouping +- code source links +- widget/page-facing structured verification data + +## Historical Contracts + +The script can emit historical and residual contract data, but that does not mean the main docs page must foreground it. + +This is an output-model capability, not a requirement for the main user-facing table. + +If product wants historical contracts deprioritised, hidden, or moved into reference-only sections, that can be handled at the page-consumer level without removing the underlying generation capability. + +## Human-Safe One Paragraph Description + +`fetch-contract-addresses.js` builds the Livepeer Docs contracts registry by pulling canonical manifest inputs from `governor-scripts` and the local authority catalog, resolving each contract through explicit authority rules, checking live controller-managed and proxy runtime state on-chain, enriching entries with explorer verification and metadata, then writing lifecycle-grouped output files used by the contracts page and verifier widget. It is not a pure repo-file mirror, but it is also not yet a pure event-derived registry. diff --git a/operations/scripts/automations/content/data/contracts/blockchain-page-spec.js b/operations/scripts/automations/content/data/contracts/blockchain-page-spec.js new file mode 100644 index 000000000..3ce0320dd --- /dev/null +++ b/operations/scripts/automations/content/data/contracts/blockchain-page-spec.js @@ -0,0 +1,7 @@ +const { buildBlockchainContractPageSpec } = require("./spec"); + +const BLOCKCHAIN_CONTRACT_PAGE_SPEC = buildBlockchainContractPageSpec(); + +module.exports = { + BLOCKCHAIN_CONTRACT_PAGE_SPEC, +}; diff --git a/operations/scripts/automations/content/data/contracts/branch-watch.js b/operations/scripts/automations/content/data/contracts/branch-watch.js new file mode 100644 index 000000000..ec9a7a8a3 --- /dev/null +++ b/operations/scripts/automations/content/data/contracts/branch-watch.js @@ -0,0 +1,77 @@ +const fs = require("node:fs"); +const path = require("node:path"); + +const { BRANCH_WATCH_STATE_PATH } = require("./constants"); + +function loadBranchWatchState() { + try { + if (!fs.existsSync(BRANCH_WATCH_STATE_PATH)) return null; + return JSON.parse(fs.readFileSync(BRANCH_WATCH_STATE_PATH, "utf8")); + } catch (_error) { + return null; + } +} + +function diffBranchWatchState(previousState = null, nextState = null) { + const previousRepos = new Map((previousState?.repos || []).map((repo) => [repo.repo, repo])); + const diffs = []; + + for (const repoState of nextState?.repos || []) { + const previous = previousRepos.get(repoState.repo); + if (!previous) { + diffs.push({ + type: "new-repo-watch", + repo: repoState.repo, + detail: "Repository entered branch watch inventory", + }); + continue; + } + + if (previous.defaultBranch !== repoState.defaultBranch) { + diffs.push({ + type: "default-branch-change", + repo: repoState.repo, + detail: `${previous.defaultBranch || "unknown"} -> ${repoState.defaultBranch || "unknown"}`, + }); + } + + const previousBranches = new Set(previous.branches || []); + const nextBranches = new Set(repoState.branches || []); + + for (const branch of repoState.branches || []) { + if (!previousBranches.has(branch)) { + diffs.push({ + type: "new-branch", + repo: repoState.repo, + branch, + detail: `Branch ${branch} was not present in the previous successful run`, + }); + } + } + + for (const branch of previous.branches || []) { + if (!nextBranches.has(branch)) { + diffs.push({ + type: "missing-branch", + repo: repoState.repo, + branch, + detail: `Branch ${branch} disappeared from the watched repo inventory`, + }); + } + } + } + + return diffs; +} + +function writeBranchWatchState(state, dryRun = false) { + if (dryRun) return; + fs.mkdirSync(path.dirname(BRANCH_WATCH_STATE_PATH), { recursive: true }); + fs.writeFileSync(BRANCH_WATCH_STATE_PATH, JSON.stringify(state, null, 2)); +} + +module.exports = { + diffBranchWatchState, + loadBranchWatchState, + writeBranchWatchState, +}; diff --git a/operations/scripts/automations/content/data/contracts/catalog-config.js b/operations/scripts/automations/content/data/contracts/catalog-config.js new file mode 100644 index 000000000..43abf6da0 --- /dev/null +++ b/operations/scripts/automations/content/data/contracts/catalog-config.js @@ -0,0 +1,689 @@ +const LATEST_RESOLUTION_POLICY = [ + "Current controller-managed addresses are recovered from live controller reads on every run.", + "Bridge and detached families must resolve from watched upstream repositories or official manifests, then survive runtime and explorer validation.", + "Branch names are discovery inputs only. Published code provenance must resolve to repo, commit, and file path.", + "Docs-local files do not define publishable address truth, lifecycle truth, implementation truth, or code-source truth.", + "Silent degradation is not a permitted outcome. Unresolved truth, provenance, or branch anomalies produce a blocking incident artifact.", +]; + +const BLOCKCHAIN_PAGE_SECTIONS = [ + { slug: "core-protocol-contracts", title: "Core Protocol Contracts" }, + { slug: "token-and-utility-contracts", title: "Token and Utility Contracts" }, + { slug: "governance-contracts", title: "Governance Contracts" }, + { slug: "migration-contracts", title: "Migration Contracts" }, +]; + +const CONTRACT_DEFINITIONS = [ + { + kind: "controller", + id: "arbitrumOne.controller", + canonicalName: "Controller", + chain: "arbitrumOne", + category: "core", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/Controller.sol", + }, + page: { + slug: "controller", + section: "core-protocol-contracts", + order: 10, + subtitle: "Contract Registry", + }, + }, + { + kind: "controller", + id: "arbitrumOne.livepeerToken", + canonicalName: "LivepeerToken", + chain: "arbitrumOne", + category: "token", + controllerSlot: "LivepeerToken", + codeAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "contracts/L2/token/LivepeerToken.sol", + }, + page: { + slug: "livepeer-token-arbitrum", + section: "token-and-utility-contracts", + order: 10, + subtitle: "ERC-20 Token", + sourceDisplayName: "LivepeerToken.sol (L2)", + }, + }, + { + kind: "controller", + id: "arbitrumOne.minter", + canonicalName: "Minter", + chain: "arbitrumOne", + category: "core", + controllerSlot: "Minter", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/token/Minter.sol", + }, + page: { + slug: "minter", + section: "core-protocol-contracts", + order: 50, + subtitle: "Token Inflation", + }, + }, + { + kind: "controller", + id: "arbitrumOne.bondingManager", + canonicalName: "BondingManager", + chain: "arbitrumOne", + category: "core", + deploymentKind: "proxy", + controllerSlot: "BondingManager", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/bonding/BondingManager.sol", + }, + currentImplementationStrategy: { + kind: "governor-versioned-latest", + baseKey: "bondingManagerTarget", + prefix: "bondingManagerTargetV", + }, + page: { + slug: "bonding-manager", + section: "core-protocol-contracts", + order: 20, + subtitle: "Staking and Rewards", + }, + }, + { + kind: "controller", + id: "arbitrumOne.ticketBroker", + canonicalName: "TicketBroker", + chain: "arbitrumOne", + category: "core", + deploymentKind: "proxy", + controllerSlot: "TicketBroker", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/pm/TicketBroker.sol", + }, + currentImplementationStrategy: { kind: "proxy-meta" }, + page: { + slug: "ticket-broker", + section: "core-protocol-contracts", + order: 30, + subtitle: "Micropayments", + }, + }, + { + kind: "controller", + id: "arbitrumOne.roundsManager", + canonicalName: "RoundsManager", + chain: "arbitrumOne", + category: "core", + deploymentKind: "proxy", + controllerSlot: "RoundsManager", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/rounds/RoundsManager.sol", + }, + currentImplementationStrategy: { kind: "proxy-meta" }, + page: { + slug: "rounds-manager", + section: "core-protocol-contracts", + order: 40, + subtitle: "Round Progression", + }, + }, + { + kind: "controller", + id: "arbitrumOne.serviceRegistry", + canonicalName: "ServiceRegistry", + chain: "arbitrumOne", + category: "core", + deploymentKind: "proxy", + controllerSlot: "ServiceRegistry", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/ServiceRegistry.sol", + }, + currentImplementationStrategy: { kind: "proxy-meta" }, + page: { + slug: "service-registry", + section: "core-protocol-contracts", + order: 60, + subtitle: "Orchestrator URI Mapping", + }, + }, + { + kind: "detached", + id: "arbitrumOne.aiServiceRegistry", + canonicalName: "AIServiceRegistry", + chain: "arbitrumOne", + category: "core", + artifactAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "deployments/arbitrumMainnet/AIServiceRegistry.json", + }, + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/ServiceRegistry.sol", + }, + runtimeEvidence: { + kind: "repo-address-literal", + repo: "livepeer/go-livepeer", + branch: "master", + path: "cmd/livepeer/starter/starter.go", + }, + requiredRuntimeEvidence: true, + searchTerms: ["AI Service Registry", "ServiceRegistry"], + notes: "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + page: { + slug: "ai-service-registry", + section: "core-protocol-contracts", + order: 70, + subtitle: "AI Capability Registration", + sourceContractName: "ServiceRegistry", + sourceDisplayName: "ServiceRegistry.sol", + }, + }, + { + kind: "detached", + id: "arbitrumOne.governor", + canonicalName: "Governor", + chain: "arbitrumOne", + category: "governance", + artifactAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "deployments/arbitrumMainnet/Governor.json", + }, + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/governance/Governor.sol", + }, + page: { + slug: "governor", + section: "governance-contracts", + order: 20, + subtitle: "Upgrade Executor", + }, + }, + { + kind: "controller", + id: "arbitrumOne.bondingVotes", + canonicalName: "BondingVotes", + chain: "arbitrumOne", + category: "governance", + deploymentKind: "proxy", + controllerSlot: "BondingVotes", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/bonding/BondingVotes.sol", + }, + currentImplementationStrategy: { + kind: "governor-versioned-latest", + baseKey: "bondingVotesTarget", + prefix: "bondingVotesTargetV", + }, + page: { + slug: "bonding-votes", + section: "governance-contracts", + order: 10, + subtitle: "Voting Power Checkpoints", + }, + }, + { + kind: "controller", + id: "arbitrumOne.livepeerGovernor", + canonicalName: "LivepeerGovernor", + chain: "arbitrumOne", + category: "governance", + deploymentKind: "proxy", + controllerSlot: "LivepeerGovernor", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/treasury/LivepeerGovernor.sol", + }, + currentImplementationStrategy: { + kind: "governor-key", + key: "livepeerGovernorTarget", + }, + page: { + slug: "livepeer-governor", + section: "governance-contracts", + order: 30, + subtitle: "On-chain Voting", + }, + }, + { + kind: "controller", + id: "arbitrumOne.treasury", + canonicalName: "Treasury", + chain: "arbitrumOne", + category: "governance", + controllerSlot: "Treasury", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/treasury/Treasury.sol", + }, + page: { + slug: "treasury", + section: "governance-contracts", + order: 40, + subtitle: "Protocol Treasury", + }, + }, + { + kind: "bridge", + id: "arbitrumOne.l2LPTGateway", + canonicalName: "L2LPTGateway", + chain: "arbitrumOne", + governorKey: "l2LPTGateway", + artifactAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "deployments/arbitrumMainnet/L2LPTGateway.json", + }, + codeAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "contracts/L2/gateway/L2LPTGateway.sol", + }, + page: { + slug: "l2-lpt-gateway", + section: "token-and-utility-contracts", + order: 40, + subtitle: "Token Bridge", + }, + }, + { + kind: "controller", + id: "arbitrumOne.l2LPTDataCache", + canonicalName: "L2LPTDataCache", + chain: "arbitrumOne", + category: "bridge", + controllerSlot: "L2LPTDataCache", + codeAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "contracts/L2/gateway/L2LPTDataCache.sol", + }, + }, + { + kind: "controller", + id: "arbitrumOne.l2Migrator", + canonicalName: "L2Migrator", + chain: "arbitrumOne", + category: "migration", + lifecycle: "migration_residual", + deploymentKind: "proxy", + controllerSlot: "L2Migrator", + codeAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "contracts/L2/gateway/L2Migrator.sol", + }, + currentImplementationStrategy: { kind: "proxy-meta" }, + page: { + slug: "l2-migrator", + section: "migration-contracts", + order: 10, + subtitle: "Stake Migration", + }, + }, + { + kind: "controller", + id: "arbitrumOne.merkleSnapshot", + canonicalName: "MerkleSnapshot", + chain: "arbitrumOne", + category: "migration", + lifecycle: "migration_residual", + controllerSlot: "MerkleSnapshot", + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/snapshots/MerkleSnapshot.sol", + }, + notes: "Migration proof registry retained for Confluence claim verification.", + page: { + slug: "merkle-snapshot", + section: "migration-contracts", + order: 20, + subtitle: "Migration Proof Verification", + }, + }, + { + kind: "controller", + id: "ethereumMainnet.controller", + canonicalName: "Controller", + chain: "ethereumMainnet", + category: "core", + lifecycle: "paused", + codeAuthority: { + repo: "livepeer/protocol", + branch: "master", + path: "contracts/Controller.sol", + }, + }, + { + kind: "controller", + id: "ethereumMainnet.livepeerToken", + canonicalName: "LivepeerToken", + chain: "ethereumMainnet", + category: "token", + controllerSlot: "LivepeerToken", + codeAuthority: { + repo: "livepeer/protocol", + branch: "master", + path: "contracts/token/LivepeerToken.sol", + }, + page: { + slug: "livepeer-token-ethereum", + section: "token-and-utility-contracts", + order: 20, + subtitle: "ERC-20 Token", + sourceDisplayName: "LivepeerToken.sol (L1)", + }, + }, + { + kind: "controller", + id: "ethereumMainnet.minter", + canonicalName: "Minter", + chain: "ethereumMainnet", + category: "core", + lifecycle: "paused", + controllerSlot: "Minter", + codeAuthority: { + repo: "livepeer/protocol", + branch: "master", + path: "contracts/token/Minter.sol", + }, + }, + { + kind: "bridge", + id: "ethereumMainnet.bridgeMinter", + canonicalName: "BridgeMinter", + chain: "ethereumMainnet", + governorKey: "bridgeMinter", + codeAuthority: { + repo: "livepeer/protocol", + branch: "streamflow", + path: "contracts/token/BridgeMinter.sol", + }, + page: { + slug: "bridge-minter", + section: "token-and-utility-contracts", + order: 30, + subtitle: "L1 Bridge Minting", + }, + }, + { + kind: "bridge", + id: "ethereumMainnet.l1LPTGateway", + canonicalName: "L1LPTGateway", + chain: "ethereumMainnet", + governorKey: "l1LPTGateway", + artifactAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "deployments/mainnet/L1LPTGateway.json", + }, + codeAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "contracts/L1/gateway/L1LPTGateway.sol", + }, + page: { + slug: "l1-lpt-gateway", + section: "token-and-utility-contracts", + order: 50, + subtitle: "Token Bridge", + }, + }, + { + kind: "bridge", + id: "ethereumMainnet.l1Escrow", + canonicalName: "L1Escrow", + chain: "ethereumMainnet", + artifactAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "deployments/mainnet/L1Escrow.json", + }, + codeAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "contracts/L1/escrow/L1Escrow.sol", + }, + page: { + slug: "l1-escrow", + section: "token-and-utility-contracts", + order: 60, + subtitle: "Token Bridge Escrow", + }, + }, + { + kind: "bridge", + id: "ethereumMainnet.l1LPTDataCache", + canonicalName: "L1LPTDataCache", + chain: "ethereumMainnet", + lifecycle: "legacy_operational", + governorKey: "l1LPTDataCache", + artifactAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "deployments/mainnet/L1LPTDataCache.json", + }, + codeAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "contracts/L1/gateway/L1LPTDataCache.sol", + }, + }, + { + kind: "detached", + id: "ethereumMainnet.genesisManager", + canonicalName: "GenesisManager", + chain: "ethereumMainnet", + category: "utility", + lifecycle: "legacy_operational", + addressStrategyOverride: { + kind: "verified-seed-address", + address: "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + expectedContractName: "GenesisManager", + }, + codeAuthority: { + repo: "livepeer/protocol", + branch: "master", + path: "contracts/GenesisManager.sol", + }, + }, + { + kind: "detached", + id: "ethereumMainnet.merkleMine", + canonicalName: "MerkleMine", + chain: "ethereumMainnet", + category: "utility", + lifecycle: "legacy_operational", + addressStrategyOverride: { + kind: "verified-seed-address", + address: "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + expectedContractName: "MerkleMine", + }, + codeAuthority: { + repo: "livepeer/protocol", + branch: "master", + path: "contracts/token/MerkleMine.sol", + }, + }, + { + kind: "detached", + id: "ethereumMainnet.multiMerkleMine", + canonicalName: "MultiMerkleMine", + chain: "ethereumMainnet", + category: "utility", + lifecycle: "legacy_operational", + addressStrategyOverride: { + kind: "verified-seed-address", + address: "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + expectedContractName: "MultiMerkleMine", + }, + notes: "Legacy utility contract preserved through direct explorer verification of the published seed address.", + }, + { + kind: "detached", + id: "ethereumMainnet.refunder", + canonicalName: "Refunder", + chain: "ethereumMainnet", + category: "utility", + lifecycle: "legacy_operational", + addressStrategyOverride: { + kind: "verified-seed-address", + address: "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + expectedContractName: "Refunder", + }, + codeAuthority: { + repo: "livepeer/protocol", + branch: "streamflow", + path: "contracts/refund/Refunder.sol", + }, + }, + { + kind: "detached", + id: "ethereumMainnet.sortedDoublyLL", + canonicalName: "SortedDoublyLL", + chain: "ethereumMainnet", + category: "utility", + lifecycle: "legacy_operational", + addressStrategyOverride: { + kind: "verified-seed-address", + address: "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + expectedContractName: "SortedDoublyLL", + }, + codeAuthority: { + repo: "livepeer/protocol", + branch: "master", + path: "contracts/libraries/SortedDoublyLL.sol", + }, + }, + { + kind: "bridge", + id: "ethereumMainnet.l1Migrator", + canonicalName: "L1Migrator", + chain: "ethereumMainnet", + category: "migration", + lifecycle: "migration_residual", + governorKey: "l1Migrator", + artifactAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "deployments/mainnet/L1Migrator.json", + }, + codeAuthority: { + repo: "livepeer/arbitrum-lpt-bridge", + branch: "main", + path: "contracts/L1/gateway/L1Migrator.sol", + }, + }, + { + kind: "controller", + id: "ethereumMainnet.bondingManager", + canonicalName: "BondingManager", + chain: "ethereumMainnet", + category: "core", + deploymentKind: "proxy", + lifecycle: "paused", + controllerSlot: "BondingManager", + codeAuthority: { + repo: "livepeer/protocol", + branch: "master", + path: "contracts/bonding/BondingManager.sol", + }, + }, + { + kind: "controller", + id: "ethereumMainnet.ticketBroker", + canonicalName: "TicketBroker", + chain: "ethereumMainnet", + category: "core", + deploymentKind: "proxy", + lifecycle: "paused", + controllerSlot: "TicketBroker", + codeAuthority: { + repo: "livepeer/protocol", + branch: "streamflow", + path: "contracts/pm/TicketBroker.sol", + }, + }, + { + kind: "controller", + id: "ethereumMainnet.roundsManager", + canonicalName: "RoundsManager", + chain: "ethereumMainnet", + category: "core", + deploymentKind: "proxy", + lifecycle: "paused", + controllerSlot: "RoundsManager", + codeAuthority: { + repo: "livepeer/protocol", + branch: "master", + path: "contracts/rounds/RoundsManager.sol", + }, + }, + { + kind: "controller", + id: "ethereumMainnet.serviceRegistry", + canonicalName: "ServiceRegistry", + chain: "ethereumMainnet", + category: "core", + deploymentKind: "proxy", + lifecycle: "paused", + controllerSlot: "ServiceRegistry", + codeAuthority: { + repo: "livepeer/protocol", + branch: "master", + path: "contracts/ServiceRegistry.sol", + }, + }, +]; + +const BLOCKCHAIN_PAGE_SOURCE_ONLY_CONTRACTS = [ + { + slug: "livepeer-token-faucet", + section: "token-and-utility-contracts", + order: 70, + name: "LivepeerTokenFaucet", + canonicalName: "LivepeerTokenFaucet", + subtitle: "Test Token Distribution", + category: "token", + chain: null, + bucket: null, + type: "standalone", + sourceContractName: "LivepeerTokenFaucet", + sourceOnly: true, + codeAuthority: { + repo: "livepeer/protocol", + branch: "delta", + path: "contracts/token/LivepeerTokenFaucet.sol", + }, + unsupportedNote: "Local development utility contract.", + }, +]; + +module.exports = { + BLOCKCHAIN_PAGE_SECTIONS, + BLOCKCHAIN_PAGE_SOURCE_ONLY_CONTRACTS, + CONTRACT_DEFINITIONS, + LATEST_RESOLUTION_POLICY, +}; diff --git a/operations/scripts/automations/content/data/contracts/constants.js b/operations/scripts/automations/content/data/contracts/constants.js new file mode 100644 index 000000000..dafd5c223 --- /dev/null +++ b/operations/scripts/automations/content/data/contracts/constants.js @@ -0,0 +1,155 @@ +const path = require("path"); + +const REPO_ROOT = path.resolve(__dirname, "../../../../../../"); + +const OUTPUT_JSON_PATH = path.join( + REPO_ROOT, + "snippets/data/contract-addresses/contractAddressesData.json" +); +const OUTPUT_JSX_PATH = path.join( + REPO_ROOT, + "snippets/data/contract-addresses/contractAddressesData.jsx" +); +const BLOCKCHAIN_PAGE_DATA_JSON_PATH = path.join( + REPO_ROOT, + "snippets/data/contract-addresses/blockchainContractsPageData.json" +); +const BLOCKCHAIN_PAGE_DATA_JSX_PATH = path.join( + REPO_ROOT, + "snippets/data/contract-addresses/blockchainContractsPageData.jsx" +); +const HEALTH_CHECK_PATH = path.join( + REPO_ROOT, + "snippets/data/contract-addresses/_health-checks.json" +); +const BRANCH_WATCH_STATE_PATH = path.join( + REPO_ROOT, + "snippets/data/contract-addresses/_branch-watch-state.json" +); +const ANOMALY_JSON_PATH = path.join( + REPO_ROOT, + "workspace/reports/contracts/contract-pipeline-anomaly-report.json" +); +const ANOMALY_MD_PATH = path.join( + REPO_ROOT, + "workspace/reports/contracts/contract-pipeline-anomaly-report.md" +); +const ISSUE_PAYLOAD_PATH = path.join( + REPO_ROOT, + "workspace/reports/contracts/contract-pipeline-issue-payload.json" +); + +const GOVERNOR_REPO = "livepeer/governor-scripts"; +const GOVERNOR_FILE = "updates/addresses.js"; + +const WATCHED_REPOS = [ + { + repo: "livepeer/protocol", + preferredBranches: ["delta", "streamflow", "master"], + role: "controller-and-provenance", + }, + { + repo: "livepeer/arbitrum-lpt-bridge", + preferredBranches: ["main"], + role: "bridge-and-token", + }, + { + repo: "livepeer/go-livepeer", + preferredBranches: ["master", "main"], + role: "runtime-consumer", + }, + { + repo: GOVERNOR_REPO, + preferredBranches: ["master", "main"], + role: "governance-discovery", + }, +]; + +const CONTROLLERS = { + arbitrumOne: "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + ethereumMainnet: "0xf96d54e490317c557a967abfa5d6e33006be69b3", +}; + +const LIVEPEER_DEPLOYER = "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5"; + +const EXPLORER_URLS = { + arbiscan: "https://arbiscan.io", + arbiscanAddress: "https://arbiscan.io/address/", + etherscan: "https://etherscan.io", + etherscanAddress: "https://etherscan.io/address/", + blockscoutArbitrum: "https://arbitrum.blockscout.com", + blockscoutEthereum: "https://eth.blockscout.com", +}; + +const DEFAULT_RPC_URLS = { + arbitrumOne: [ + process.env.ARBITRUM_RPC_URL, + process.env.ARBITRUM_RPC_FALLBACK_URL, + "https://arb1.arbitrum.io/rpc", + "https://arbitrum-one-rpc.publicnode.com", + "https://arbitrum.drpc.org", + ].filter(Boolean), + ethereumMainnet: [ + process.env.ETHEREUM_RPC_URL, + process.env.ETHEREUM_RPC_FALLBACK_URL, + "https://eth.llamarpc.com", + "https://ethereum-rpc.publicnode.com", + "https://eth.drpc.org", + ].filter(Boolean), +}; + +const CONTRACTS_PIPELINE_CADENCE = { + defaultLabel: "daily", + mainScheduleCron: "0 2 * * *", + shadowScheduleCron: "30 2 * * *", + configurable: true, +}; + +const BLOCKING_BRANCH_DIFF_TYPES = [ + "new-repo-watch", + "default-branch-change", + "new-branch", + "missing-branch", +]; + +const ACTIVE_LIFECYCLES = new Set(["active"]); +const PUBLISHED_LIFECYCLES = new Set([ + "active", + "paused", + "migration_residual", + "legacy_operational", + "historical", +]); +const FAILURE_CLASSES = { + rpc: "rpc-failure", + truth: "truth-reconciliation-failure", + provenance: "provenance-failure", + link: "explorer-link-failure", + branch: "branch-watch-anomaly", + output: "output-contract-failure", +}; + +module.exports = { + ACTIVE_LIFECYCLES, + ANOMALY_JSON_PATH, + ANOMALY_MD_PATH, + BLOCKCHAIN_PAGE_DATA_JSX_PATH, + BLOCKCHAIN_PAGE_DATA_JSON_PATH, + BRANCH_WATCH_STATE_PATH, + CONTROLLERS, + DEFAULT_RPC_URLS, + EXPLORER_URLS, + FAILURE_CLASSES, + GOVERNOR_FILE, + GOVERNOR_REPO, + HEALTH_CHECK_PATH, + ISSUE_PAYLOAD_PATH, + LIVEPEER_DEPLOYER, + BLOCKING_BRANCH_DIFF_TYPES, + CONTRACTS_PIPELINE_CADENCE, + OUTPUT_JSX_PATH, + OUTPUT_JSON_PATH, + PUBLISHED_LIFECYCLES, + REPO_ROOT, + WATCHED_REPOS, +}; diff --git a/operations/scripts/automations/content/data/contracts/incidents.js b/operations/scripts/automations/content/data/contracts/incidents.js new file mode 100644 index 000000000..1fbceef7d --- /dev/null +++ b/operations/scripts/automations/content/data/contracts/incidents.js @@ -0,0 +1,104 @@ +const crypto = require("node:crypto"); +const fs = require("node:fs"); +const path = require("node:path"); + +const { + ANOMALY_JSON_PATH, + ANOMALY_MD_PATH, + ISSUE_PAYLOAD_PATH, +} = require("./constants"); + +function stableStringify(value) { + if (Array.isArray(value)) { + return `[${value.map((item) => stableStringify(item)).join(",")}]`; + } + if (value && typeof value === "object") { + return `{${Object.keys(value).sort().map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`).join(",")}}`; + } + return JSON.stringify(value); +} + +function computeIncidentFingerprint(incident) { + const payload = { + failureClass: incident.failureClass || "unknown", + chain: incident.chain || null, + contract: incident.contract || null, + endpoint: incident.endpoint || null, + detail: incident.detail || null, + }; + return crypto.createHash("sha256").update(stableStringify(payload)).digest("hex").slice(0, 12); +} + +function buildIssuePayload(incidents = []) { + const fingerprints = incidents.map((incident) => computeIncidentFingerprint(incident)); + const primary = incidents[0] || { failureClass: "contracts-pipeline" }; + const fingerprint = fingerprints[0] || computeIncidentFingerprint(primary); + const title = `contracts pipeline incident: ${primary.failureClass} [${fingerprint}]`; + const labels = ["contracts", "pipeline", "verification", primary.failureClass || "unknown"]; + + const bodyLines = [ + `Incident fingerprint: \`${fingerprint}\``, + "", + "Blocking contracts pipeline incident.", + "", + "Incidents:", + ...incidents.map((incident) => `- ${incident.failureClass || "unknown"} | ${incident.endpoint || "unknown"} | ${incident.contract || "n/a"} | ${incident.detail || "n/a"}`), + ]; + + return { + title, + labels, + fingerprint, + body: bodyLines.join("\n"), + incidents, + }; +} + +function writeIncidentArtifacts({ + incidents = [], + summary = {}, + dryRun = false, +}) { + const issuePayload = buildIssuePayload(incidents); + const report = { + generatedAt: new Date().toISOString(), + summary, + incidents: incidents.map((incident) => ({ + ...incident, + fingerprint: computeIncidentFingerprint(incident), + })), + issue: issuePayload, + }; + const markdown = [ + "# Contracts Pipeline Incident Report", + "", + `Generated: ${report.generatedAt}`, + "", + "## Summary", + "", + `- Failure count: ${report.incidents.length}`, + `- Verification model: ${summary.verificationModel || "contracts-proof-v2"}`, + "", + "## Incidents", + "", + ...report.incidents.map((incident) => `- [${incident.failureClass}] ${incident.endpoint}: ${incident.contract || "n/a"} -> ${incident.detail}`), + ].join("\n"); + + if (!dryRun) { + [ANOMALY_JSON_PATH, ANOMALY_MD_PATH, ISSUE_PAYLOAD_PATH].forEach((filePath) => { + fs.mkdirSync(path.dirname(filePath), { recursive: true }); + }); + fs.writeFileSync(ANOMALY_JSON_PATH, JSON.stringify(report, null, 2)); + fs.writeFileSync(ANOMALY_MD_PATH, `${markdown}\n`); + fs.writeFileSync(ISSUE_PAYLOAD_PATH, JSON.stringify(issuePayload, null, 2)); + } + + return { report, markdown, issuePayload }; +} + +module.exports = { + buildIssuePayload, + computeIncidentFingerprint, + stableStringify, + writeIncidentArtifacts, +}; diff --git a/operations/scripts/automations/content/data/contracts/pipeline.js b/operations/scripts/automations/content/data/contracts/pipeline.js new file mode 100644 index 000000000..056e276df --- /dev/null +++ b/operations/scripts/automations/content/data/contracts/pipeline.js @@ -0,0 +1,2559 @@ +const https = require("node:https"); +const fs = require("node:fs"); +const path = require("node:path"); +const { execFileSync } = require("node:child_process"); +const { keccak256 } = require("js-sha3"); + +const { + ACTIVE_LIFECYCLES, + BLOCKCHAIN_PAGE_DATA_JSON_PATH, + BLOCKCHAIN_PAGE_DATA_JSX_PATH, + BLOCKING_BRANCH_DIFF_TYPES, + BRANCH_WATCH_STATE_PATH, + CONTRACTS_PIPELINE_CADENCE, + CONTROLLERS, + DEFAULT_RPC_URLS, + EXPLORER_URLS, + FAILURE_CLASSES, + GOVERNOR_FILE, + GOVERNOR_REPO, + HEALTH_CHECK_PATH, + OUTPUT_JSX_PATH, + OUTPUT_JSON_PATH, + PUBLISHED_LIFECYCLES, + REPO_ROOT, + WATCHED_REPOS, +} = require("./constants"); +const { diffBranchWatchState, loadBranchWatchState, writeBranchWatchState } = require("./branch-watch"); +const { writeIncidentArtifacts, computeIncidentFingerprint } = require("./incidents"); +const { buildContractProofCatalog } = require("./spec"); +const { BLOCKCHAIN_CONTRACT_PAGE_SPEC } = require("./blockchain-page-spec"); +const { extractContractMetadata } = require("./solidity-parser"); + +const REQUEST_TIMEOUT_MS = Number.parseInt(process.env.CONTRACTS_HTTP_TIMEOUT_MS || "15000", 10) || 15000; +const GET_CONTRACT_SELECTOR = `0x${keccak256("getContract(bytes32)").slice(0, 8)}`; +const TARGET_CONTRACT_ID_SELECTOR = `0x${keccak256("targetContractId()").slice(0, 8)}`; +const CONTROLLER_GETTER_SELECTOR = `0x${keccak256("controller()").slice(0, 8)}`; +const SET_CONTRACT_INFO_TOPIC = `0x${keccak256("SetContractInfo(bytes32,address,bytes20)")}`; +const ARBISCAN_API_KEY = process.env.ARBISCAN_API_KEY || ""; +const ETHERSCAN_API_KEY = process.env.ETHERSCAN_API_KEY || process.env.ETHERSCAN_API_KEY_2 || ""; +const GITHUB_TOKEN = process.env.GITHUB_TOKEN || ""; +const BRANCH_COMMIT_CACHE = new Map(); +const REPO_PATH_CACHE = new Map(); +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function httpsGet(url, headers = {}) { + return new Promise((resolve, reject) => { + const parsed = new URL(url); + const request = https.request({ + hostname: parsed.hostname, + path: parsed.pathname + parsed.search, + method: "GET", + timeout: REQUEST_TIMEOUT_MS, + headers: { + Accept: "application/vnd.github+json", + "User-Agent": "livepeer-docs-bot", + ...headers, + }, + }, (response) => { + let data = ""; + response.on("data", (chunk) => { + data += chunk; + }); + response.on("end", () => resolve({ status: response.statusCode, data })); + }); + request.on("error", reject); + request.on("timeout", () => request.destroy(new Error(`Request timed out after ${REQUEST_TIMEOUT_MS}ms: ${url}`))); + request.end(); + }); +} + +function httpsPost(url, body) { + return new Promise((resolve, reject) => { + const parsed = new URL(url); + const postData = typeof body === "string" ? body : JSON.stringify(body); + const request = https.request({ + hostname: parsed.hostname, + path: parsed.pathname + parsed.search, + method: "POST", + timeout: REQUEST_TIMEOUT_MS, + headers: { + "Content-Type": "application/json", + "Content-Length": Buffer.byteLength(postData), + }, + }, (response) => { + let data = ""; + response.on("data", (chunk) => { + data += chunk; + }); + response.on("end", () => resolve({ status: response.statusCode, data })); + }); + request.on("error", reject); + request.on("timeout", () => request.destroy(new Error(`Request timed out after ${REQUEST_TIMEOUT_MS}ms: ${url}`))); + request.write(postData); + request.end(); + }); +} + +async function ethCall(chain, to, data) { + return ethRpc(chain, "eth_call", [{ to, data }, "latest"]); +} + +async function ethRpc(chain, method, params) { + const urls = DEFAULT_RPC_URLS[chain] || []; + const failures = []; + for (const rpcUrl of urls) { + try { + const rpcResponse = await httpsPost(rpcUrl, { + jsonrpc: "2.0", + method, + params, + id: 1, + }); + const rpcData = JSON.parse(rpcResponse.data); + if (!rpcData.error && rpcData.result != null && rpcData.result !== "0x") { + return { result: rpcData.result, rpcUrl, failures }; + } + failures.push({ rpcUrl, detail: rpcData.error?.message || "empty result" }); + } catch (error) { + failures.push({ rpcUrl, detail: error.message }); + } + } + return { result: null, rpcUrl: null, failures }; +} + +function decodeAddressCallResult(result) { + if (typeof result !== "string" || result.length < 42) return null; + const address = `0x${result.slice(-40)}`; + if (!/^0x[a-fA-F0-9]{40}$/.test(address)) return null; + if (/^0x0{40}$/i.test(address)) return null; + return address; +} + +function decodeBytes32CallResult(result) { + if (typeof result !== "string" || !/^0x[a-fA-F0-9]{64}$/.test(result)) return null; + if (/^0x0{64}$/i.test(result)) return null; + return result; +} + +function decodeGitCommitHashWord(word) { + if (typeof word !== "string" || !/^[a-fA-F0-9]{64}$/.test(word)) return null; + const commit = word.slice(0, 40); + if (/^0{40}$/i.test(commit)) return null; + return commit; +} + +function normalizeAddress(value) { + return typeof value === "string" ? value.toLowerCase() : null; +} + +function addressesMatch(left, right) { + return Boolean(left && right && normalizeAddress(left) === normalizeAddress(right)); +} + +function compareVersions(left, right) { + const l = Number(String(left || "").replace(/^V/i, "")) || 0; + const r = Number(String(right || "").replace(/^V/i, "")) || 0; + return l - r; +} + +function parseVersionNumber(version) { + const value = Number(String(version || "").replace(/^V/i, "")); + return Number.isFinite(value) && value > 0 ? value : null; +} + +function formatVersion(versionNumber) { + return Number.isFinite(versionNumber) && versionNumber > 0 ? `V${versionNumber}` : null; +} + +function seriesGroupKey(entry) { + return `${entry.category || "other"}:${entry.canonicalName || entry.name}`; +} + +function seriesEntryKey(entry) { + return `${entry.chain || ""}:${entry.type || entry.deploymentKind || "standalone"}:${normalizeAddress(entry.address) || ""}`; +} + +function sortSeriesEntries(left, right) { + const leftVersion = parseVersionNumber(left.version); + const rightVersion = parseVersionNumber(right.version); + if (leftVersion != null && rightVersion != null && leftVersion !== rightVersion) { + return leftVersion - rightVersion; + } + if (leftVersion != null && rightVersion == null) return -1; + if (leftVersion == null && rightVersion != null) return 1; + const chainCompare = String(left.chain || "").localeCompare(String(right.chain || ""), "en", { sensitivity: "base" }); + if (chainCompare !== 0) return chainCompare; + const typeRank = { target: 0, proxy: 1, standalone: 2 }; + const typeCompare = (typeRank[left.type] ?? 99) - (typeRank[right.type] ?? 99); + if (typeCompare !== 0) return typeCompare; + return String(left.address || "").localeCompare(String(right.address || ""), "en", { sensitivity: "base" }); +} + +function inferNextSeriesVersion(entries = [], explicitVersion = null) { + if (explicitVersion) return explicitVersion; + const maxVersion = entries.reduce((winner, entry) => { + const parsed = parseVersionNumber(entry.version); + return parsed != null && parsed > winner ? parsed : winner; + }, 0); + return formatVersion(maxVersion + 1); +} + +function buildSeriesEntry(entry, overrides = {}) { + if (!entry?.address) return null; + const type = overrides.type || entry.type || entry.deploymentKind || "standalone"; + const chain = overrides.chain || entry.chain || null; + const version = overrides.version ?? entry.version ?? entry.meta?.currentImplementationVersion ?? null; + const address = overrides.address || entry.address; + return { + name: overrides.name || entry.name || entry.canonicalName, + canonicalName: overrides.canonicalName || entry.canonicalName || entry.name, + category: overrides.category || entry.category || "other", + chain, + type, + deploymentKind: type, + address, + version, + blockchainHref: overrides.blockchainHref || entry.blockchainHref || (address ? `${getExplorerAddressBase(chain)}${address}` : null), + isCurrent: Boolean(overrides.isCurrent), + status: null, + replacedBy: null, + }; +} + +function loadPreviousGeneratedContracts() { + const candidates = [OUTPUT_JSON_PATH]; + for (const candidate of candidates) { + if (!fs.existsSync(candidate)) continue; + try { + const parsed = JSON.parse(fs.readFileSync(candidate, "utf8")); + if (parsed?.arbitrumOne || parsed?.ethereumMainnet) { + return parsed; + } + } catch (_error) { + continue; + } + } + return null; +} + +function normalizeHistoricalSeriesMap(series = {}) { + const map = new Map(); + Object.entries(series || {}).forEach(([category, groups]) => { + if (!Array.isArray(groups)) return; + groups.forEach((group) => { + const canonicalName = group?.canonicalName || group?.name; + if (!canonicalName) return; + const key = `${category}:${canonicalName}`; + const entries = Array.isArray(group.entries) + ? group.entries + .filter((entry) => !entry?.isCurrent && entry?.meta?.currentImplementation !== true && String(entry?.status || "").toLowerCase() !== "current") + .map((entry) => buildSeriesEntry({ + ...entry, + category, + canonicalName, + name: group.name || canonicalName, + }, { isCurrent: false })) + .filter(Boolean) + : []; + map.set(key, { + category, + name: group.name || canonicalName, + canonicalName, + entries, + }); + }); + }); + return map; +} + +function buildCurrentSeriesCandidate(entry) { + if (!entry) return null; + const deploymentKind = entry.type || entry.deploymentKind || "standalone"; + if (deploymentKind === "proxy") { + const implementationAddress = entry.meta?.proxyTarget || entry.verification?.proxy?.implementationAddress || null; + if (!implementationAddress) return null; + return buildSeriesEntry(entry, { + address: implementationAddress, + type: "target", + version: entry.meta?.currentImplementationVersion || entry.verification?.proxy?.implementationVersion || entry.version || null, + blockchainHref: `${getExplorerAddressBase(entry.chain)}${implementationAddress}`, + isCurrent: true, + }); + } + if (!entry.address) return null; + return buildSeriesEntry(entry, { isCurrent: true }); +} + +function buildCurrentSeriesCandidates(entries = [], currentImplementations = []) { + const candidates = new Map(); + const addCandidate = (entry) => { + const candidate = buildCurrentSeriesCandidate(entry); + if (!candidate) return; + candidates.set(`${seriesGroupKey(candidate)}:${seriesEntryKey(candidate)}`, candidate); + }; + + currentImplementations.forEach(addCandidate); + entries.forEach(addCandidate); + + return [...candidates.values()]; +} + +function bootstrapHistoricalSeriesMap(chainPayload = {}, currentLifecycleEntries = [], currentImplementations = []) { + const normalizedCurrentEntries = currentLifecycleEntries.length > 0 + ? currentLifecycleEntries + : [ + ...(Array.isArray(chainPayload.active) ? chainPayload.active : []), + ...(Array.isArray(chainPayload.paused) ? chainPayload.paused : []), + ...(Array.isArray(chainPayload.migration_residual) ? chainPayload.migration_residual : []), + ...(Array.isArray(chainPayload.legacy_operational) ? chainPayload.legacy_operational : []), + ]; + const normalizedCurrentImplementations = currentImplementations.length > 0 + ? currentImplementations + : (Array.isArray(chainPayload.currentImplementations) ? chainPayload.currentImplementations : []); + + const normalizedExisting = normalizeHistoricalSeriesMap(chainPayload.historicalSeries); + if (normalizedExisting.size > 0) { + normalizedExisting.forEach((series) => { + series.entries.forEach((entry) => { + entry.isCurrent = false; + entry.status = null; + entry.replacedBy = null; + }); + }); + return normalizedExisting; + } + + const map = new Map(); + (Array.isArray(chainPayload.historical) ? chainPayload.historical : []).forEach((entry) => { + const seriesEntry = buildSeriesEntry(entry); + if (!seriesEntry) return; + const key = seriesGroupKey(seriesEntry); + if (!map.has(key)) { + map.set(key, { + category: seriesEntry.category, + name: seriesEntry.name, + canonicalName: seriesEntry.canonicalName, + entries: [], + }); + } + const series = map.get(key); + if (!series.entries.some((candidate) => seriesEntryKey(candidate) === seriesEntryKey(seriesEntry))) { + series.entries.push(seriesEntry); + } + }); + + buildCurrentSeriesCandidates(normalizedCurrentEntries, normalizedCurrentImplementations).forEach((candidate) => { + const key = seriesGroupKey(candidate); + if (!map.has(key)) { + map.set(key, { + category: candidate.category, + name: candidate.name, + canonicalName: candidate.canonicalName, + entries: [], + }); + } + const series = map.get(key); + const matches = series.entries.filter((entry) => entry.chain === candidate.chain && entry.type === candidate.type); + const existing = matches.find((entry) => addressesMatch(entry.address, candidate.address)); + if (existing) { + existing.isCurrent = true; + existing.version = existing.version || candidate.version || inferNextSeriesVersion(matches); + existing.blockchainHref = existing.blockchainHref || candidate.blockchainHref; + return; + } + series.entries.push({ + ...candidate, + version: inferNextSeriesVersion(matches, candidate.version), + isCurrent: true, + }); + }); + + return map; +} + +function pruneSeededHistoricalGroups(seriesMap = new Map(), seededHistoricalEntries = []) { + const seededKeys = new Set( + (Array.isArray(seededHistoricalEntries) ? seededHistoricalEntries : []) + .map((entry) => buildSeriesEntry(entry)) + .filter(Boolean) + .map((entry) => seriesGroupKey(entry)) + ); + seededKeys.forEach((key) => { + seriesMap.delete(key); + }); + return seriesMap; +} + +function finalizeHistoricalSeriesMap(seriesMap = new Map()) { + const categories = {}; + + seriesMap.forEach((series) => { + const entries = [...(series.entries || [])] + .filter((entry) => entry?.address && !entry.isCurrent && entry?.meta?.currentImplementation !== true) + .sort(sortSeriesEntries); + + const groups = new Map(); + entries.forEach((entry) => { + const key = `${entry.chain}:${entry.type}`; + if (!groups.has(key)) groups.set(key, []); + groups.get(key).push(entry); + }); + + groups.forEach((groupEntries) => { + groupEntries.sort(sortSeriesEntries); + groupEntries.forEach((entry, index) => { + const nextEntry = groupEntries[index + 1] || null; + entry.replacedBy = nextEntry?.version || null; + entry.status = nextEntry?.version + ? `Replaced by ${nextEntry.version}` + : "Deprecated"; + }); + }); + + const category = series.category || "other"; + if (!categories[category]) categories[category] = []; + categories[category].push({ + category, + name: series.name, + canonicalName: series.canonicalName, + entries, + }); + }); + + Object.values(categories).forEach((groups) => { + groups.sort((left, right) => String(left.name || "").localeCompare(String(right.name || ""), "en", { sensitivity: "base" })); + }); + + return categories; +} + +function flattenHistoricalSeries(historicalSeries = {}) { + const rows = []; + Object.values(historicalSeries || {}).forEach((groups) => { + (groups || []).forEach((group) => { + const includeGroup = (group.entries || []).some((entry) => !entry.isCurrent); + if (!includeGroup) return; + (group.entries || []).forEach((entry, index) => { + rows.push({ + id: `${group.category}.${group.canonicalName}.historicalSeries.${index + 1}`.replace(/[^a-zA-Z0-9.]+/g, "-"), + name: group.name, + canonicalName: group.canonicalName, + address: entry.address, + type: entry.type, + deploymentKind: entry.type, + category: group.category, + lifecycle: "historical", + chain: entry.chain, + proofChain: "historical-series", + version: entry.version, + addressAuthority: "historical-series", + runtimeAuthority: "archive", + repoSrc: null, + contractCodeHref: null, + blockchainHref: entry.blockchainHref || `${getExplorerAddressBase(entry.chain)}${entry.address}`, + hasBytecode: null, + sourceVerified: null, + verified: null, + verifiedAt: null, + verifiedAtISO: null, + isHistorical: true, + meta: { + statusLabel: entry.status, + notes: "Historical version emitted from the contracts pipeline historical series model.", + controllerSlot: null, + controllerResolvedAddress: null, + historicalSlotId: null, + historicalSlotName: group.canonicalName, + historicalProxyAddress: null, + }, + addressSource: { + kind: "historical-series", + repo: null, + path: null, + refMode: "generated-state", + resolvedCommit: null, + key: `${group.category}:${group.canonicalName}`, + }, + codeSource: null, + }); + }); + }); + }); + + return rows; +} + +function buildHistoricalArtifacts({ + chain, + entries = [], + currentImplementations = [], + previousChainPayload = null, + seededHistoricalEntries = [], + resetSeededGroups = false, +}) { + const currentLifecycleEntries = (Array.isArray(entries) ? entries : []) + .filter((entry) => entry?.address && entry.lifecycle !== "historical" && entry?.meta?.currentImplementation !== true); + const previousSeriesMap = bootstrapHistoricalSeriesMap( + previousChainPayload || {}, + currentLifecycleEntries, + Array.isArray(currentImplementations) ? currentImplementations : [] + ); + if (resetSeededGroups) { + pruneSeededHistoricalGroups(previousSeriesMap, seededHistoricalEntries); + } + const historicalEntries = [ + ...(Array.isArray(seededHistoricalEntries) ? seededHistoricalEntries : []), + ...(Array.isArray(entries) ? entries : []) + .filter((entry) => entry?.address && entry.lifecycle === "historical" && entry?.meta?.currentImplementation !== true && !entry?.isCurrent), + ]; + + historicalEntries.forEach((entry) => { + const seriesEntry = buildSeriesEntry(entry); + if (!seriesEntry) return; + const key = seriesGroupKey(seriesEntry); + if (!previousSeriesMap.has(key)) { + previousSeriesMap.set(key, { + category: seriesEntry.category, + name: seriesEntry.name, + canonicalName: seriesEntry.canonicalName, + entries: [], + }); + } + const series = previousSeriesMap.get(key); + if (!series.entries.some((candidate) => seriesEntryKey(candidate) === seriesEntryKey(seriesEntry))) { + series.entries.push(seriesEntry); + } + }); + + const historicalSeries = finalizeHistoricalSeriesMap(previousSeriesMap); + const historical = flattenHistoricalSeries(historicalSeries) + .filter((entry) => entry.chain === chain) + .sort((left, right) => + String(left.category || "").localeCompare(String(right.category || ""), "en", { sensitivity: "base" }) + || String(left.name || "").localeCompare(String(right.name || ""), "en", { sensitivity: "base" }) + || compareVersions(left.version, right.version) + ); + + return { historicalSeries, historical }; +} + +function buildRootHistoricalChainPayload(historicalSeries = {}) { + const grouped = {}; + + Object.values(historicalSeries || {}).forEach((groups) => { + (groups || []).forEach((group) => { + const canonicalName = group?.canonicalName || group?.name; + const entries = [...(group?.entries || [])] + .filter((entry) => entry?.address && !entry.isCurrent && entry?.meta?.currentImplementation !== true) + .sort(sortSeriesEntries) + .map((entry) => ({ + address: entry.address, + chain: entry.chain || null, + type: entry.type || entry.deploymentKind || null, + version: entry.version || null, + blockchainHref: entry.blockchainHref || `${getExplorerAddressBase(entry.chain)}${entry.address}`, + replacedBy: entry.replacedBy || null, + status: entry.status || null, + })); + if (!canonicalName || entries.length === 0) return; + grouped[canonicalName] = entries; + }); + }); + + return grouped; +} + +const CHAIN_LABELS = { + arbitrumOne: "Arbitrum One", + ethereumMainnet: "Ethereum Mainnet", +}; + +const LIFECYCLE_LABELS = { + active: "Active", + paused: "Paused", + migration_residual: "Migration", + legacy_operational: "Legacy operational", + historical: "Historical", + source_only: "Source only", +}; + +const PROOF_CHAIN_LABELS = { + controller: "Controller-managed", + bridge: "Bridge-derived", + detached: "Detached runtime-backed", + "source-only": "Source-backed", +}; + +function getChainLabel(chain) { + return CHAIN_LABELS[chain] || chain || null; +} + +function getLifecycleLabel(lifecycle) { + return LIFECYCLE_LABELS[lifecycle] || String(lifecycle || "").replaceAll("_", " ") || null; +} + +function getProofChainLabel(proofChain) { + return PROOF_CHAIN_LABELS[proofChain] || proofChain || null; +} + +function toRawGitHubHref(href) { + return href + ? href.replace("https://github.com/", "https://raw.githubusercontent.com/").replace("/blob/", "/") + : null; +} + +function sanitizeCodeSource(codeSource) { + if (!codeSource) return null; + return { + repo: codeSource.repo || null, + branch: codeSource.branch || null, + path: codeSource.path || null, + href: codeSource.href || null, + resolvedCommit: codeSource.resolvedCommit || null, + exists: codeSource.exists !== false, + resolutionError: codeSource.resolutionError || null, + }; +} + +function buildPageResolutionIndex(resolutions = []) { + const index = new Map(); + resolutions.forEach((item) => { + const chain = item?.entry?.chain || item?.definition?.chain || null; + const canonicalName = item?.entry?.canonicalName || item?.definition?.canonicalName || null; + if (!chain || !canonicalName) return; + index.set(`${chain}:${canonicalName}`, item?.resolution?.codeSource || null); + }); + return index; +} + +function getExactPublishedEntry(payload, chain, bucket, canonicalName, type = null) { + if (!chain || !bucket || !canonicalName) return null; + return (payload?.[chain]?.[bucket] || []).find((entry) => + entry?.canonicalName === canonicalName && + (type == null || (entry.type || entry.deploymentKind) === type) + ) || null; +} + +function getExactImplementationEntry(payload, chain, canonicalName) { + if (!chain || !canonicalName) return null; + return (payload?.[chain]?.currentImplementations || []).find((entry) => + entry?.canonicalName === canonicalName && (entry.type || entry.deploymentKind) === "target" + ) || null; +} + +function buildContractFacts(spec, entry, implementationEntry = null) { + if (!entry || !spec) return []; + + const facts = []; + const lifecycleLabel = getLifecycleLabel(entry.lifecycle); + const isProxy = (entry.type || entry.deploymentKind) === "proxy"; + const implementationAddress = implementationEntry?.address || entry.verification?.proxy?.implementationAddress || null; + const implementationVersion = implementationEntry?.version || entry.verification?.proxy?.implementationVersion || null; + const controllerRegistered = entry.verification?.controller?.applicable && entry.verification.controller.controllerRegistered === true; + const bridgeArtifactConfirmed = entry.verification?.bridge?.deploymentArtifactMatchesAddress === true; + const runtimeConsumerConfirmed = + entry.verification?.runtimeConsumer?.required && entry.verification.runtimeConsumer.exactAddressMatch === true; + + if (spec.slug === "controller") { + facts.push("Controller registry"); + if (lifecycleLabel) facts.push(lifecycleLabel); + return facts; + } + + if (entry.proofChain === "controller") { + if (controllerRegistered) facts.push("Controller registered"); + if (lifecycleLabel) facts.push(lifecycleLabel); + if (isProxy && implementationAddress) facts.push("Proxy target resolved"); + if (isProxy && implementationVersion) facts.push(`Target ${implementationVersion}`); + return facts; + } + + if (entry.proofChain === "bridge") { + facts.push("Bridge-derived"); + if (bridgeArtifactConfirmed) facts.push("Bridge artifact confirmed"); + if (lifecycleLabel) facts.push(lifecycleLabel); + return facts; + } + + if (entry.proofChain === "detached") { + if (bridgeArtifactConfirmed) facts.push("Deployment artifact confirmed"); + if (runtimeConsumerConfirmed) facts.push("Runtime consumer confirmed"); + if (lifecycleLabel) facts.push(lifecycleLabel); + return facts; + } + + if (controllerRegistered) facts.push("Controller registered"); + if (bridgeArtifactConfirmed) facts.push("Deployment artifact confirmed"); + if (runtimeConsumerConfirmed) facts.push("Runtime consumer confirmed"); + if (lifecycleLabel) facts.push(lifecycleLabel); + if (isProxy && implementationAddress) facts.push("Proxy target resolved"); + if (isProxy && implementationVersion) facts.push(`Target ${implementationVersion}`); + + return facts; +} + +function buildBlockchainPageContractEntry({ + spec, + registryEntry = null, + implementationEntry = null, + resolvedSource = null, +}) { + const parsedSource = extractContractMetadata(resolvedSource?.content || "", spec.sourceContractName || spec.canonicalName || spec.name); + const supported = Boolean(registryEntry) && !spec.sourceOnly; + const proxyAddress = registryEntry && (registryEntry.type || registryEntry.deploymentKind) === "proxy" + ? registryEntry.address + : null; + const targetAddress = proxyAddress + ? (implementationEntry?.address || registryEntry?.verification?.proxy?.implementationAddress || null) + : null; + const currentAddress = registryEntry?.address || null; + const sourceDisplayName = spec.sourceDisplayName || (resolvedSource?.path ? path.basename(resolvedSource.path) : null); + const unsupportedNote = spec.sourceOnly + ? spec.unsupportedNote + : (!registryEntry ? `No canonical ${getLifecycleLabel(spec.bucket || spec.lifecycle || "published").toLowerCase()} entry resolved from the contracts pipeline.` : null); + const subtitle = spec.sourceOnly + ? spec.unsupportedNote || spec.subtitle || null + : (spec.subtitle || registryEntry?.subtitle || null); + + return { + slug: spec.slug, + name: spec.name, + canonicalName: spec.canonicalName, + subtitle, + category: spec.category || registryEntry?.category || null, + chain: spec.chain || registryEntry?.chain || null, + chainLabel: getChainLabel(spec.chain || registryEntry?.chain || null), + lifecycle: registryEntry?.lifecycle || (spec.sourceOnly ? "source_only" : null), + lifecycleLabel: getLifecycleLabel(registryEntry?.lifecycle || (spec.sourceOnly ? "source_only" : null)), + proofChain: registryEntry?.proofChain || (spec.sourceOnly ? "source-only" : null), + proofChainLabel: getProofChainLabel(registryEntry?.proofChain || (spec.sourceOnly ? "source-only" : null)), + type: registryEntry?.type || spec.type || "standalone", + currentAddress, + proxyAddress, + targetAddress, + blockchainHref: registryEntry?.blockchainHref || null, + proxyBlockchainHref: proxyAddress ? `${getExplorerAddressBase(spec.chain || registryEntry?.chain)}${proxyAddress}` : null, + targetBlockchainHref: targetAddress ? `${getExplorerAddressBase(spec.chain || registryEntry?.chain)}${targetAddress}` : null, + contractCodeHref: registryEntry?.contractCodeHref || resolvedSource?.href || null, + rawContractCodeHref: toRawGitHubHref(registryEntry?.contractCodeHref || resolvedSource?.href || null), + contractCodeLabel: sourceDisplayName, + codeSource: sanitizeCodeSource(registryEntry?.codeSource || resolvedSource), + addressSource: registryEntry?.addressSource || null, + verification: registryEntry?.verification || null, + supported, + unsupportedNote, + functions: parsedSource.functions, + sourceContractName: spec.sourceContractName || spec.canonicalName || spec.name, + sourceContractKind: parsedSource.contractKind, + sourceInheritance: parsedSource.bases, + sourceContractFound: parsedSource.contractFound, + sourceParseError: parsedSource.error, + facts: supported ? buildContractFacts(spec, registryEntry, implementationEntry) : [], + }; +} + +async function buildBlockchainContractsPageData({ + payload, + resolutions = [], + meta = {}, +}) { + const resolutionIndex = buildPageResolutionIndex(resolutions); + const contracts = {}; + + for (const spec of BLOCKCHAIN_CONTRACT_PAGE_SPEC.contracts) { + const registryEntry = spec.sourceOnly + ? null + : getExactPublishedEntry(payload, spec.chain, spec.bucket, spec.canonicalName, spec.type); + const implementationEntry = registryEntry && (registryEntry.type || registryEntry.deploymentKind) === "proxy" + ? getExactImplementationEntry(payload, spec.chain, spec.canonicalName) + : null; + const resolvedSource = spec.sourceOnly + ? await resolveRepoPath(spec.codeAuthority) + : (resolutionIndex.get(`${spec.chain}:${spec.canonicalName}`) || null); + + contracts[spec.slug] = buildBlockchainPageContractEntry({ + spec, + registryEntry, + implementationEntry, + resolvedSource, + }); + } + + return { + meta: { + lastUpdated: meta.lastUpdated || null, + lastVerified: meta.lastVerified || null, + verificationModel: meta.verificationModel || "contracts-proof-v2", + sourceCommit: meta.sourceCommit || null, + explorerUrls: meta.explorerUrls || EXPLORER_URLS, + }, + sections: BLOCKCHAIN_CONTRACT_PAGE_SPEC.sections, + contracts, + }; +} + +function resolveGovernorSeries(governorChain, prefix) { + return Object.entries(governorChain || {}) + .filter(([key]) => key.startsWith(prefix)) + .map(([key, address]) => { + const version = key.slice(prefix.length); + if (!/^(\d+)$/.test(version)) return null; + return { key, address, version: `V${version}` }; + }) + .filter(Boolean) + .sort((a, b) => compareVersions(a.version, b.version)); +} + +function resolveAuthority(strategy, governorChain) { + if (!strategy) return { address: null, version: null, authorityKind: "unknown", sourceKey: null }; + if (strategy.kind === "governor-key") { + return { + address: governorChain?.[strategy.key] || null, + version: strategy.version || null, + authorityKind: "governor-manifest", + sourceKey: strategy.key, + }; + } + if (strategy.kind === "governor-versioned-latest") { + const candidates = resolveGovernorSeries(governorChain || {}, strategy.prefix || ""); + const winner = candidates[candidates.length - 1] || null; + return { + address: winner?.address || governorChain?.[strategy.baseKey] || null, + version: winner?.version || strategy.baseVersion || null, + authorityKind: "governor-manifest", + sourceKey: winner?.key || strategy.baseKey || null, + }; + } + if (strategy.kind === "proxy-meta") { + return { + address: null, + version: null, + authorityKind: "proxy-runtime", + sourceKey: null, + }; + } + return { address: null, version: null, authorityKind: "unknown", sourceKey: null }; +} + +function githubCliGet(endpoint) { + try { + const output = execFileSync("gh", ["api", endpoint], { + cwd: REPO_ROOT, + encoding: "utf8", + stdio: ["ignore", "pipe", "pipe"], + }); + return { status: 200, data: output }; + } catch (error) { + const message = (error.stderr || error.stdout || error.message || "").toString(); + const statusMatch = message.match(/HTTP (\d{3})/i); + return { status: statusMatch ? Number(statusMatch[1]) : 500, data: message }; + } +} + +async function githubGet(endpoint) { + const headers = {}; + if (GITHUB_TOKEN) { + headers.Authorization = `Bearer ${GITHUB_TOKEN}`; + } + if (GITHUB_TOKEN) { + const response = await httpsGet(`https://api.github.com${endpoint}`, headers); + if (response.status === 200) return response; + } + return githubCliGet(endpoint); +} + +async function resolveRepoPath(authority) { + if (!authority?.repo || !authority?.branch || !authority?.path) return null; + const cacheKey = `${authority.repo}@${authority.branch}:${authority.path}`; + if (REPO_PATH_CACHE.has(cacheKey)) { + return REPO_PATH_CACHE.get(cacheKey); + } + + const branchKey = `${authority.repo}@${authority.branch}`; + let resolvedCommit = BRANCH_COMMIT_CACHE.get(branchKey) || null; + if (!resolvedCommit) { + const commitResponse = await githubGet(`/repos/${authority.repo}/commits/${authority.branch}`); + resolvedCommit = commitResponse.status === 200 + ? String(JSON.parse(commitResponse.data).sha || "").slice(0, 7) || null + : null; + BRANCH_COMMIT_CACHE.set(branchKey, resolvedCommit); + } + + const contentsResponse = await githubGet(`/repos/${authority.repo}/contents/${authority.path}?ref=${authority.branch}`); + const exists = contentsResponse.status === 200; + const fileJson = exists ? JSON.parse(contentsResponse.data) : null; + const content = fileJson?.content ? Buffer.from(fileJson.content, "base64").toString("utf8") : null; + + const resolved = { + ...authority, + resolvedCommit, + href: resolvedCommit + ? `https://github.com/${authority.repo}/blob/${resolvedCommit}/${authority.path}` + : `https://github.com/${authority.repo}/blob/${authority.branch}/${authority.path}`, + exists, + content, + blobSha: fileJson?.sha || null, + resolutionError: exists ? null : `contents lookup returned ${contentsResponse.status}`, + }; + REPO_PATH_CACHE.set(cacheKey, resolved); + return resolved; +} + +function getCompilationTargetPath(artifactJson) { + const rawMetadata = artifactJson?.metadata; + if (!rawMetadata) return null; + + try { + const metadata = typeof rawMetadata === "string" ? JSON.parse(rawMetadata) : rawMetadata; + const compilationTarget = metadata?.settings?.compilationTarget || {}; + const [sourcePath] = Object.keys(compilationTarget); + return sourcePath || null; + } catch (_error) { + return null; + } +} + +async function resolveDeploymentArtifact(authority) { + const repoPath = await resolveRepoPath(authority); + if (!repoPath) return null; + + let artifactJson = null; + try { + artifactJson = repoPath.content ? JSON.parse(repoPath.content) : null; + } catch (_error) { + artifactJson = null; + } + + return { + ...repoPath, + address: artifactJson?.address || artifactJson?.receipt?.contractAddress || null, + compilationPath: artifactJson ? getCompilationTargetPath(artifactJson) : null, + contractName: artifactJson?.contractName || null, + }; +} + +async function fetchGovernorAddresses() { + const response = await githubGet(`/repos/${GOVERNOR_REPO}/contents/${GOVERNOR_FILE}`); + if (response.status !== 200) { + throw new Error(`Unable to fetch ${GOVERNOR_REPO}/${GOVERNOR_FILE}: ${String(response.data).slice(0, 200)}`); + } + const json = JSON.parse(response.data); + const content = Buffer.from(json.content, "base64").toString("utf8"); + const sha = json.sha.slice(0, 7); + const match = content.match(/const ADDRESSES\s*=\s*(\{[\s\S]*?\});/); + if (!match) throw new Error("Could not parse ADDRESSES from governor-scripts"); + const addresses = new Function(`return ${match[1]}`)(); + return { addresses, sha }; +} + +function getGovernorChain(governorAddresses, chain) { + return chain === "arbitrumOne" + ? (governorAddresses.arbitrumMainnet || {}) + : (governorAddresses.mainnet || {}); +} + +async function fetchRepoInventory(repoConfig) { + const repoInfoResponse = await githubGet(`/repos/${repoConfig.repo}`); + const repoInfo = repoInfoResponse.status === 200 ? JSON.parse(repoInfoResponse.data) : {}; + const branchesResponse = await githubGet(`/repos/${repoConfig.repo}/branches?per_page=100`); + const branches = branchesResponse.status === 200 ? JSON.parse(branchesResponse.data).map((branch) => branch.name).sort() : []; + return { + repo: repoConfig.repo, + role: repoConfig.role, + defaultBranch: repoInfo.default_branch || repoConfig.preferredBranches?.[0] || null, + branches, + }; +} + +async function resolveCodeSource(codeAuthority) { + if (!codeAuthority) return null; + const resolved = await resolveRepoPath(codeAuthority); + if (!resolved) return null; + return { + ...resolved, + isPrivate: false, + }; +} + +async function resolveControllerSlotAddress(chain, slotName) { + if (!CONTROLLERS[chain] || !slotName) return { address: null, rpcUrl: null, failures: [] }; + const call = await ethCall(chain, CONTROLLERS[chain], `${GET_CONTRACT_SELECTOR}${keccak256(slotName)}`); + return { + address: decodeAddressCallResult(call.result), + rpcUrl: call.rpcUrl, + failures: call.failures, + }; +} + +async function resolveProxyRuntimeVerification(chain, proxyAddress, canonicalName) { + if (!proxyAddress) { + return { + controllerAddress: null, + controllerMatchesExpected: null, + targetContractId: null, + targetContractName: null, + implementationAddress: null, + implementationSource: null, + }; + } + + const controllerCall = await ethCall(chain, proxyAddress, CONTROLLER_GETTER_SELECTOR); + const controllerAddress = decodeAddressCallResult(controllerCall.result) || CONTROLLERS[chain] || null; + const targetIdCall = await ethCall(chain, proxyAddress, TARGET_CONTRACT_ID_SELECTOR); + const targetContractId = decodeBytes32CallResult(targetIdCall.result); + const targetContractName = targetContractId ? `${canonicalName}Target` : null; + + let implementationAddress = null; + if (controllerAddress && targetContractId) { + const implementationCall = await ethCall( + chain, + controllerAddress, + `${GET_CONTRACT_SELECTOR}${targetContractId.slice(2)}` + ); + implementationAddress = decodeAddressCallResult(implementationCall.result); + } + + return { + controllerAddress, + controllerMatchesExpected: controllerAddress ? addressesMatch(controllerAddress, CONTROLLERS[chain]) : null, + targetContractId, + targetContractName, + implementationAddress, + implementationSource: implementationAddress ? "proxy-runtime-controller" : null, + }; +} + +async function searchRepoForAddress(strategy) { + if (!strategy?.repos?.length || !strategy.searchTerms?.length) { + return { address: null, authorityKind: "repo-search", repo: null, path: null, refMode: "code-search", resolvedCommit: null, sourceKey: null }; + } + + for (const repo of strategy.repos) { + for (const term of strategy.searchTerms) { + const query = encodeURIComponent(`${term} repo:${repo}`); + const response = await githubGet(`/search/code?q=${query}&per_page=5`); + if (response.status !== 200) continue; + const data = JSON.parse(response.data); + for (const item of data.items || []) { + const fileResponse = await githubGet(`/repos/${repo}/contents/${item.path}?ref=${item.repository.default_branch}`); + if (fileResponse.status !== 200) continue; + const fileJson = JSON.parse(fileResponse.data); + const content = fileJson.content ? Buffer.from(fileJson.content, "base64").toString("utf8") : ""; + const addressMatch = content.match(/0x[a-fA-F0-9]{40}/); + if (addressMatch) { + return { + address: addressMatch[0], + authorityKind: "repo-search", + repo, + path: item.path, + refMode: "code-search", + resolvedCommit: String(fileJson.sha || "").slice(0, 7) || null, + sourceKey: term, + }; + } + } + } + } + + return { address: null, authorityKind: "repo-search", repo: null, path: null, refMode: "code-search", resolvedCommit: null, sourceKey: null }; +} + +function getExplorerSiteBase(chain) { + return chain === "arbitrumOne" ? "https://arbiscan.io" : "https://etherscan.io"; +} + +function normalizeWhitespace(value) { + return String(value || "").replace(/\s+/g, " ").trim(); +} + +function includesNormalized(haystack, needle) { + return normalizeWhitespace(haystack).toLowerCase().includes(normalizeWhitespace(needle).toLowerCase()); +} + +function extractHtmlTitle(html) { + const match = String(html || "").match(/\s*([^<]+?)\s*<\/title>/i); + return normalizeWhitespace(match?.[1] || null); +} + +function extractExplorerContractName(html) { + const patterns = [ + /Contract Name:<\/div>\s*<div[^>]*>\s*<span[^>]*>\s*([^<]+?)\s*<\/span>/i, + /Contract Name<\/div>\s*<div[^>]*>\s*<span[^>]*>\s*([^<]+?)\s*<\/span>/i, + ]; + for (const pattern of patterns) { + const match = String(html || "").match(pattern); + if (match?.[1]) { + return normalizeWhitespace(match[1]); + } + } + return null; +} + +async function fetchExplorerSearchHandlerHits(chain, query) { + if (!query) return []; + const response = await httpsGet(`${getExplorerSiteBase(chain)}/searchHandler?term=${encodeURIComponent(query)}`, { + Accept: "application/json, text/plain, */*", + "User-Agent": "Mozilla/5.0", + "X-Requested-With": "XMLHttpRequest", + }); + if (response.status !== 200) return []; + try { + const parsed = JSON.parse(response.data); + return Array.isArray(parsed) ? parsed : []; + } catch (_error) { + return []; + } +} + +async function fetchExplorerSearchPageAddresses(chain, query) { + if (!query) return []; + const response = await httpsGet(`${getExplorerSiteBase(chain)}/search?f=0&q=${encodeURIComponent(query)}`, { + Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "User-Agent": "Mozilla/5.0", + }); + if (response.status !== 200) return []; + const seen = new Set(); + const matches = String(response.data || "").match(/\/address\/(0x[a-fA-F0-9]{40})/g) || []; + for (const match of matches) { + const address = match.replace("/address/", "").toLowerCase(); + seen.add(address); + if (seen.size >= 20) break; + } + return [...seen]; +} + +async function fetchExplorerAddressPage(chain, address) { + if (!address) return null; + const normalizedAddress = normalizeAddress(address); + const response = await httpsGet(`${getExplorerSiteBase(chain)}/address/${normalizedAddress}`, { + Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", + "User-Agent": "Mozilla/5.0", + }); + if (response.status !== 200) return null; + return { + address: normalizedAddress, + html: response.data, + title: extractHtmlTitle(response.data), + }; +} + +function explorerHitMatches(hit, strategy) { + if (!hit?.address) return false; + const group = String(hit.group || ""); + const groupId = String(hit.groupid || ""); + if (group !== "Addresses" && groupId !== "2") return false; + const title = normalizeWhitespace(hit.title); + if (strategy.expectedSearchTitle && title !== normalizeWhitespace(strategy.expectedSearchTitle)) return false; + if (strategy.searchTitleIncludes && !includesNormalized(title, strategy.searchTitleIncludes)) return false; + return true; +} + +function explorerAddressPageMatches(page, strategy) { + if (!page?.html) return false; + if (strategy.expectedPageTitle && page.title !== normalizeWhitespace(strategy.expectedPageTitle)) return false; + if (strategy.expectedContractName) { + const contractName = extractExplorerContractName(page.html); + if (contractName !== normalizeWhitespace(strategy.expectedContractName)) return false; + } + if (strategy.requiredCreatorLabel && !includesNormalized(page.html, strategy.requiredCreatorLabel)) return false; + return (strategy.pageMustInclude || []).every((needle) => includesNormalized(page.html, needle)); +} + +async function resolveExplorerSearchLabel(definition) { + const strategy = definition?.addressStrategy || {}; + const searchTerms = [strategy.query, ...(strategy.fallbackQueries || [])].filter(Boolean); + + for (const query of searchTerms) { + const searchHits = await fetchExplorerSearchHandlerHits(definition.chain, query); + for (const hit of searchHits) { + if (!explorerHitMatches(hit, strategy)) continue; + const page = await fetchExplorerAddressPage(definition.chain, hit.address); + if (!explorerAddressPageMatches(page, strategy)) continue; + return { + address: hit.address, + authorityKind: "explorer-search", + repo: null, + path: hit.link || `/address/${hit.address}`, + refMode: "search-handler", + resolvedCommit: null, + sourceKey: query, + version: null, + }; + } + + if (strategy.searchPageFallback === false) continue; + const candidates = await fetchExplorerSearchPageAddresses(definition.chain, query); + for (const candidate of candidates) { + const page = await fetchExplorerAddressPage(definition.chain, candidate); + if (!explorerAddressPageMatches(page, strategy)) continue; + return { + address: candidate, + authorityKind: "explorer-search", + repo: null, + path: `/address/${candidate}`, + refMode: "search-page", + resolvedCommit: null, + sourceKey: query, + version: null, + }; + } + } + + return { + address: null, + authorityKind: "explorer-search", + repo: null, + path: null, + refMode: "search-handler", + resolvedCommit: null, + sourceKey: strategy.query || null, + version: null, + }; +} + +async function resolveVerifiedSeedAddress(definition) { + const strategy = definition?.addressStrategy || {}; + const address = normalizeAddress(strategy.address); + const page = await fetchExplorerAddressPage(definition.chain, address); + if (!explorerAddressPageMatches(page, strategy)) { + return { + address: null, + authorityKind: "verified-seed-address", + repo: null, + path: null, + refMode: "seed-address", + resolvedCommit: null, + sourceKey: address, + version: null, + }; + } + return { + address, + authorityKind: "verified-seed-address", + repo: null, + path: `/address/${address}`, + refMode: "seed-address", + resolvedCommit: null, + sourceKey: address, + version: null, + }; +} + +async function resolveRuntimeConsumerEvidence(strategy, address) { + if (!strategy?.repo || !address) { + return null; + } + + if (strategy.path && strategy.branch) { + const repoPath = await resolveRepoPath({ + repo: strategy.repo, + branch: strategy.branch, + path: strategy.path, + }); + const exactAddressMatch = Boolean( + repoPath?.content && repoPath.content.toLowerCase().includes(String(address).toLowerCase()) + ); + return { + repo: strategy.repo, + path: strategy.path, + branch: strategy.branch, + resolvedCommit: repoPath?.resolvedCommit || null, + href: repoPath?.href || null, + exactAddressMatch, + resolutionError: repoPath?.resolutionError || (exactAddressMatch ? null : "address literal not found in runtime consumer file"), + }; + } + + const query = encodeURIComponent(`${address} repo:${strategy.repo}`); + const response = await githubGet(`/search/code?q=${query}&per_page=10`); + if (response.status !== 200) { + return { + repo: strategy.repo, + path: null, + branch: strategy.branch || null, + resolvedCommit: null, + exactAddressMatch: false, + resolutionError: `code search returned ${response.status}`, + }; + } + + const data = JSON.parse(response.data); + for (const item of data.items || []) { + const repoPath = await resolveRepoPath({ + repo: strategy.repo, + branch: strategy.branch || item.repository?.default_branch || "master", + path: item.path, + }); + if (repoPath?.content?.toLowerCase().includes(String(address).toLowerCase())) { + return { + repo: strategy.repo, + path: item.path, + branch: repoPath.branch, + resolvedCommit: repoPath.resolvedCommit, + href: repoPath.href, + exactAddressMatch: true, + resolutionError: null, + }; + } + } + + return { + repo: strategy.repo, + path: null, + branch: strategy.branch || null, + resolvedCommit: null, + exactAddressMatch: false, + resolutionError: "address literal not found in runtime consumer repo", + }; +} + +async function resolveDeployment(definition, governorAddresses) { + const governorChain = getGovernorChain(governorAddresses, definition.chain); + const artifact = definition.artifactAuthority ? await resolveDeploymentArtifact(definition.artifactAuthority) : null; + let resolved; + + if (definition.addressStrategy.kind === "controller-root") { + resolved = { + address: CONTROLLERS[definition.chain], + authorityKind: "controller-runtime", + repo: null, + path: null, + refMode: "onchain-root", + resolvedCommit: null, + sourceKey: definition.canonicalName, + version: null, + }; + } else if (definition.addressStrategy.kind === "controller-slot") { + const slot = await resolveControllerSlotAddress(definition.chain, definition.addressStrategy.controllerSlot); + resolved = { + address: slot.address, + authorityKind: "controller-runtime", + repo: null, + path: null, + refMode: "onchain-controller", + resolvedCommit: null, + sourceKey: definition.addressStrategy.controllerSlot, + version: null, + rpcFailures: slot.failures || [], + }; + } else if (definition.addressStrategy.kind === "governor-manifest") { + const authority = resolveAuthority({ kind: "governor-key", key: definition.addressStrategy.governorKey }, governorChain); + resolved = { + address: authority.address, + authorityKind: authority.authorityKind, + repo: GOVERNOR_REPO, + path: GOVERNOR_FILE, + refMode: "default_branch", + resolvedCommit: governorAddresses._sha || null, + sourceKey: authority.sourceKey, + version: authority.version, + }; + } else if (definition.addressStrategy.kind === "deployment-artifact") { + const artifactResolution = artifact || await resolveDeploymentArtifact(definition.addressStrategy); + resolved = { + address: artifactResolution?.address || null, + authorityKind: "deployment-artifact", + repo: artifactResolution?.repo || definition.addressStrategy.repo || null, + path: artifactResolution?.path || definition.addressStrategy.path || null, + refMode: "resolved-commit", + resolvedCommit: artifactResolution?.resolvedCommit || null, + sourceKey: artifactResolution?.path || definition.addressStrategy.path || null, + version: null, + }; + } else if (definition.addressStrategy.kind === "repo-search") { + resolved = await searchRepoForAddress(definition.addressStrategy); + } else if (definition.addressStrategy.kind === "explorer-search-label") { + resolved = await resolveExplorerSearchLabel(definition); + } else if (definition.addressStrategy.kind === "verified-seed-address") { + resolved = await resolveVerifiedSeedAddress(definition); + } else { + resolved = { + address: null, + authorityKind: "unknown", + repo: null, + path: null, + refMode: null, + resolvedCommit: null, + sourceKey: null, + version: null, + }; + } + + let codeSource = await resolveCodeSource(definition.codeAuthority); + if ((!codeSource || codeSource.exists === false) && artifact?.compilationPath) { + codeSource = await resolveCodeSource({ + repo: artifact.repo, + branch: artifact.branch, + path: artifact.compilationPath, + }); + } + const runtimeConsumerEvidence = definition.runtimeEvidence && resolved.address + ? await resolveRuntimeConsumerEvidence(definition.runtimeEvidence, resolved.address) + : null; + + return { + definition, + governorChain, + resolved, + codeSource, + artifact, + runtimeConsumerEvidence, + }; +} + +function getExplorerAddressBase(chain) { + return chain === "arbitrumOne" ? EXPLORER_URLS.arbiscanAddress : EXPLORER_URLS.etherscanAddress; +} + +function getBlockscoutBase(chain) { + return chain === "arbitrumOne" ? EXPLORER_URLS.blockscoutArbitrum : EXPLORER_URLS.blockscoutEthereum; +} + +function sortLogsByBlockAndIndex(left, right) { + const blockCompare = Number.parseInt(left.blockNumber || "0x0", 16) - Number.parseInt(right.blockNumber || "0x0", 16); + if (blockCompare !== 0) return blockCompare; + return Number.parseInt(left.logIndex || "0x0", 16) - Number.parseInt(right.logIndex || "0x0", 16); +} + +function decodeSetContractInfoLog(log) { + const words = String(log?.data || "").replace(/^0x/, "").match(/.{1,64}/g) || []; + if (words.length < 3) return null; + const id = `0x${words[0]}`; + const address = decodeAddressCallResult(`0x${words[1]}`); + const gitCommitHash = decodeGitCommitHashWord(words[2]); + if (!id || !address) return null; + return { + id: id.toLowerCase(), + address, + gitCommitHash, + blockNumber: log.blockNumber || "0x0", + logIndex: log.logIndex || "0x0", + transactionHash: log.transactionHash || null, + }; +} + +async function fetchControllerSetContractInfoLogs(chain) { + const controllerAddress = CONTROLLERS[chain]; + if (!controllerAddress) { + return { logs: [], rpcUrl: null, failures: [{ detail: `No controller configured for ${chain}` }] }; + } + const rpcResult = await ethRpc(chain, "eth_getLogs", [{ + address: controllerAddress, + fromBlock: "0x0", + toBlock: "latest", + topics: [SET_CONTRACT_INFO_TOPIC], + }]); + return { + logs: Array.isArray(rpcResult.result) ? rpcResult.result : [], + rpcUrl: rpcResult.rpcUrl, + failures: rpcResult.failures || [], + }; +} + +function buildHistoricalEntriesFromEventLogs(chainEntries, logs = []) { + const decodedLogs = (Array.isArray(logs) ? logs : []) + .map(decodeSetContractInfoLog) + .filter(Boolean) + .sort(sortLogsByBlockAndIndex); + + const logsById = new Map(); + decodedLogs.forEach((log) => { + const key = String(log.id || "").toLowerCase(); + if (!logsById.has(key)) logsById.set(key, []); + logsById.get(key).push(log); + }); + + const historicalEntries = []; + chainEntries.forEach(({ definition, entry }) => { + if (definition.proofChain !== "controller" || definition.chain !== "arbitrumOne") return; + + const isProxy = (entry.deploymentKind || entry.type) === "proxy"; + const slotId = isProxy + ? entry.meta?.proxyTargetContractId || null + : (entry.meta?.controllerSlot ? `0x${keccak256(entry.meta.controllerSlot)}` : null); + if (!slotId) return; + + const slotName = isProxy + ? entry.meta?.proxyTargetContractName || `${entry.canonicalName}Target` + : entry.meta?.controllerSlot || entry.canonicalName; + const currentAddress = isProxy ? (entry.meta?.proxyTarget || null) : entry.address; + const seriesLogs = logsById.get(String(slotId).toLowerCase()) || []; + if (!seriesLogs.length) return; + + const ordered = []; + const seenAddresses = new Set(); + seriesLogs.forEach((log) => { + const normalized = normalizeAddress(log.address); + if (!normalized || seenAddresses.has(normalized)) return; + seenAddresses.add(normalized); + ordered.push(log); + }); + + const historicalSeries = ordered.filter((log) => !addressesMatch(log.address, currentAddress)); + historicalSeries.forEach((log, index) => { + const resolvedCommit = log.gitCommitHash || entry.codeSource?.resolvedCommit || null; + const codeSource = entry.codeSource + ? { + ...entry.codeSource, + resolvedCommit, + href: resolvedCommit + ? `https://github.com/${entry.codeSource.repo}/blob/${resolvedCommit}/${entry.codeSource.path}` + : entry.codeSource.href, + } + : null; + + historicalEntries.push({ + id: `${definition.id}.historical.${index + 1}`, + name: definition.canonicalName, + canonicalName: definition.canonicalName, + address: log.address, + type: isProxy ? "target" : (entry.type || entry.deploymentKind || "standalone"), + deploymentKind: isProxy ? "target" : (entry.deploymentKind || entry.type || "standalone"), + category: definition.category, + lifecycle: "historical", + chain: definition.chain, + proofChain: "controller-history", + version: `V${index + 1}`, + addressAuthority: "controller-event-history", + runtimeAuthority: "controller", + repoSrc: codeSource?.repo && resolvedCommit ? `${codeSource.repo}@${resolvedCommit}` : null, + contractCodeHref: codeSource?.href || entry.contractCodeHref || null, + blockchainHref: `${getExplorerAddressBase(definition.chain)}${log.address}`, + hasBytecode: null, + sourceVerified: null, + verified: null, + verifiedAt: null, + verifiedAtISO: null, + isHistorical: true, + meta: { + statusLabel: "Historical", + notes: `Historical controller entry reconstructed from SetContractInfo for ${slotName}.`, + keccakHash: `0x${keccak256(slotName)}`, + registrationState: "unknown", + registeredInController: null, + controllerSlot: slotName, + controllerResolvedAddress: null, + governorKey: slotName, + currentImplementation: false, + currentImplementationVersion: null, + proxyTarget: null, + repoIsPrivate: false, + onchainGitCommitHash: log.gitCommitHash || null, + historicalSlotId: slotId, + historicalSlotName: slotName, + historicalProxyAddress: isProxy ? entry.address : null, + }, + addressSource: { + kind: "controller-event-history", + repo: codeSource?.repo || null, + path: codeSource?.path || null, + refMode: "onchain-event", + resolvedCommit, + key: slotName, + }, + codeSource, + }); + }); + }); + + return historicalEntries; +} + +function getExplorerProfile(chain) { + const addressBaseUrl = getExplorerAddressBase(chain); + return { + family: chain === "arbitrumOne" ? "etherscan" : "etherscan", + host: new URL(addressBaseUrl).host, + addressBaseUrl, + }; +} + +function buildBaseEntry(definition, resolution) { + const address = resolution.resolved.address || null; + const codeSource = resolution.codeSource; + return { + id: definition.id, + name: definition.canonicalName, + canonicalName: definition.canonicalName, + address, + type: definition.deploymentKind, + deploymentKind: definition.deploymentKind, + category: definition.category, + lifecycle: definition.lifecycle, + chain: definition.chain, + proofChain: definition.proofChain, + version: resolution.resolved.version || null, + addressAuthority: resolution.resolved.authorityKind, + runtimeAuthority: definition.runtimeAuthority?.kind || "explorer", + repoSrc: codeSource?.repo && (codeSource.resolvedCommit || codeSource.branch) + ? `${codeSource.repo}@${codeSource.resolvedCommit || codeSource.branch}` + : null, + contractCodeHref: codeSource?.href || null, + blockchainHref: address ? `${getExplorerAddressBase(definition.chain)}${address}` : null, + hasBytecode: null, + sourceVerified: null, + verified: null, + verifiedAt: null, + verifiedAtISO: null, + isHistorical: definition.lifecycle === "historical", + meta: { + statusLabel: definition.lifecycle === "active" ? "Active" : definition.lifecycle.replaceAll("_", " "), + notes: definition.notes || null, + keccakHash: `0x${keccak256(definition.canonicalName)}`, + registrationState: definition.runtimeAuthority?.kind === "controller" ? "unknown" : "not_applicable", + registeredInController: definition.runtimeAuthority?.kind === "controller" ? null : false, + controllerSlot: definition.runtimeAuthority?.controllerSlot || null, + controllerResolvedAddress: null, + governorKey: resolution.resolved.sourceKey || null, + currentImplementation: false, + currentImplementationVersion: null, + proxyTarget: null, + repoIsPrivate: false, + creatorAddress: null, + blockscoutLabel: null, + sourceResolvedCommit: codeSource?.resolvedCommit || null, + sourceResolutionError: codeSource?.resolutionError || null, + deploymentArtifactAddress: resolution.artifact?.address || null, + deploymentArtifactRepo: resolution.artifact?.repo || null, + deploymentArtifactPath: resolution.artifact?.path || null, + deploymentArtifactResolvedCommit: resolution.artifact?.resolvedCommit || null, + deploymentArtifactMatchesAddress: resolution.artifact?.address && address + ? addressesMatch(resolution.artifact.address, address) + : null, + runtimeConsumerRepo: resolution.runtimeConsumerEvidence?.repo || null, + runtimeConsumerPath: resolution.runtimeConsumerEvidence?.path || null, + runtimeConsumerResolvedCommit: resolution.runtimeConsumerEvidence?.resolvedCommit || null, + runtimeConsumerExactAddressMatch: resolution.runtimeConsumerEvidence?.exactAddressMatch ?? null, + runtimeConsumerRequired: Boolean(definition.requiredRuntimeEvidence), + }, + addressSource: { + kind: resolution.resolved.authorityKind || "unknown", + repo: resolution.resolved.repo || null, + path: resolution.resolved.path || null, + refMode: resolution.resolved.refMode || null, + resolvedCommit: resolution.resolved.resolvedCommit || null, + key: resolution.resolved.sourceKey || null, + }, + codeSource: codeSource + ? { + repo: codeSource.repo, + branch: codeSource.branch, + path: codeSource.path, + href: codeSource.href, + isPrivate: false, + resolvedCommit: codeSource.resolvedCommit || null, + exists: codeSource.exists !== false, + resolutionError: codeSource.resolutionError || null, + } + : null, + }; +} + +async function verifyAddresses(entries, chain, skipVerify = false) { + if (skipVerify) return entries; + const baseUrl = chain === "arbitrumOne" ? "https://api.arbiscan.io" : "https://api.etherscan.io"; + const apiKey = chain === "arbitrumOne" ? ARBISCAN_API_KEY : ETHERSCAN_API_KEY; + const now = new Date(); + const nowFormatted = now.toLocaleDateString("en-GB", { day: "numeric", month: "short", year: "numeric" }); + const nowISO = now.toISOString(); + const results = []; + + for (const entry of entries) { + if (!entry.address) { + results.push(entry); + continue; + } + + let hasBytecode = null; + try { + let url = `${baseUrl}/api?module=proxy&action=eth_getCode&address=${entry.address}&tag=latest`; + if (apiKey) url += `&apikey=${apiKey}`; + const response = await httpsGet(url); + const data = JSON.parse(response.data); + hasBytecode = Boolean(data.result && data.result !== "0x" && data.result.length > 2); + } catch (_error) { + hasBytecode = false; + } + + results.push({ + ...entry, + hasBytecode, + verifiedAt: nowFormatted, + verifiedAtISO: nowISO, + }); + await sleep(apiKey ? 100 : 250); + } + + return results; +} + +async function enrichFromBlockscout(entry) { + const addressResponse = await httpsGet(`${getBlockscoutBase(entry.chain)}/api/v2/addresses/${entry.address}`); + if (addressResponse.status !== 200) { + throw new Error(`Blockscout address lookup failed: ${addressResponse.status}`); + } + const data = JSON.parse(addressResponse.data); + return { + creatorAddress: data.creator_address_hash || null, + blockscoutLabel: data.name || null, + bsVerified: data.is_verified, + isContract: data.is_contract, + balance: data.coin_balance || null, + compilerVersion: data.compiler_version || null, + isProxy: data.proxy_type ? true : null, + }; +} + +async function enrichMetadata(entries, skipVerify = false) { + const results = []; + const warnings = []; + + for (const entry of entries) { + const next = { ...entry, meta: { ...(entry.meta || {}) } }; + if (!entry.address) { + results.push(next); + continue; + } + + if (!skipVerify) { + try { + const blockscoutMeta = await enrichFromBlockscout(entry); + Object.entries(blockscoutMeta).forEach(([key, value]) => { + if (value != null) next.meta[key] = value; + }); + next.sourceVerified = typeof blockscoutMeta.bsVerified === "boolean" ? blockscoutMeta.bsVerified : next.sourceVerified; + } catch (error) { + warnings.push({ + failureClass: FAILURE_CLASSES.truth, + endpoint: "blockscout-enrichment", + chain: entry.chain, + contract: entry.name, + detail: error.message, + }); + } + } + + if (entry.runtimeAuthority === "controller" && entry.meta.controllerSlot) { + const controllerResolution = await resolveControllerSlotAddress(entry.chain, entry.meta.controllerSlot); + next.meta.controllerResolvedAddress = controllerResolution.address; + next.meta.registrationState = controllerResolution.address && addressesMatch(controllerResolution.address, entry.address) + ? "registered" + : "not_registered"; + next.meta.registeredInController = next.meta.registrationState === "registered"; + } else { + next.meta.registrationState = "not_applicable"; + next.meta.registeredInController = false; + } + + if (entry.deploymentKind === "proxy") { + const proxyRuntime = await resolveProxyRuntimeVerification(entry.chain, entry.address, entry.canonicalName); + next.meta.proxyControllerAddress = proxyRuntime.controllerAddress; + next.meta.proxyControllerMatchesExpected = proxyRuntime.controllerMatchesExpected; + next.meta.proxyTargetContractId = proxyRuntime.targetContractId; + next.meta.proxyTargetContractName = proxyRuntime.targetContractName; + next.meta.proxyTarget = proxyRuntime.implementationAddress; + next.meta.proxyImplementationSource = proxyRuntime.implementationSource; + } + + next.verified = next.sourceVerified; + results.push(next); + } + + results._warnings = warnings; + return results; +} + +function buildImplementationEntries(entries, governorAddresses) { + const implementations = []; + for (const entry of entries) { + const strategy = entry.definition?.currentImplementationStrategy; + if (!strategy) continue; + let implementationAddress = null; + let implementationVersion = null; + let implementationSource = null; + if (strategy.kind === "proxy-meta") { + implementationAddress = entry.entry.meta.proxyTarget || null; + implementationSource = entry.entry.meta.proxyImplementationSource || "proxy-runtime"; + } else { + const authority = resolveAuthority(strategy, getGovernorChain(governorAddresses, entry.definition.chain)); + implementationAddress = authority.address; + implementationVersion = authority.version || null; + implementationSource = authority.authorityKind; + } + if (!implementationAddress) continue; + implementations.push({ + id: `${entry.definition.id}.implementation`, + name: entry.definition.canonicalName, + canonicalName: entry.definition.canonicalName, + address: implementationAddress, + type: "target", + deploymentKind: "target", + category: entry.definition.category, + lifecycle: "historical", + chain: entry.definition.chain, + version: implementationVersion, + addressAuthority: implementationSource, + runtimeAuthority: "explorer", + repoSrc: entry.entry.repoSrc, + contractCodeHref: entry.entry.contractCodeHref, + blockchainHref: `${getExplorerAddressBase(entry.definition.chain)}${implementationAddress}`, + hasBytecode: null, + sourceVerified: null, + verified: null, + verifiedAt: null, + verifiedAtISO: null, + isHistorical: true, + meta: { + statusLabel: "Implementation target", + notes: "Implementation behind the published proxy address.", + keccakHash: `0x${keccak256(entry.definition.canonicalName)}`, + registrationState: "not_applicable", + registeredInController: false, + controllerSlot: entry.definition.runtimeAuthority?.controllerSlot || null, + controllerResolvedAddress: null, + governorKey: strategy.key || null, + currentImplementation: true, + currentImplementationVersion: implementationVersion, + proxyAddress: entry.entry.address, + proxyTarget: implementationAddress, + proxyImplementationSource: implementationSource, + expectedProxyImplementationAddress: implementationAddress, + expectedProxyImplementationSource: implementationSource, + proxyImplementationMatchesExpected: true, + repoIsPrivate: false, + }, + addressSource: { + kind: implementationSource || "proxy-runtime", + repo: GOVERNOR_REPO, + path: GOVERNOR_FILE, + refMode: implementationSource === "proxy-runtime" ? "runtime" : "default_branch", + resolvedCommit: governorAddresses._sha || null, + key: strategy.key || null, + }, + codeSource: entry.entry.codeSource, + }); + } + return implementations; +} + +function deriveControllerRegistered(registrationState, legacyValue) { + if (registrationState === "registered") return true; + if (registrationState === "not_registered") return false; + if (registrationState === "not_applicable") return null; + if (typeof legacyValue === "boolean") return legacyValue; + return null; +} + +function buildVerificationStatus(entry, controllerRegistered, proxyVerification) { + const bridgeArtifactMatch = entry.meta?.deploymentArtifactMatchesAddress; + const runtimeConsumerMatch = entry.meta?.runtimeConsumerExactAddressMatch; + const runtimeConsumerRequired = entry.meta?.runtimeConsumerRequired; + + if (entry.runtimeAuthority === "controller" && controllerRegistered === true && entry.hasBytecode === true) { + return "strong"; + } + if (proxyVerification.applicable && proxyVerification.implementationMatchesExpected === true && entry.hasBytecode === true) { + return "strong"; + } + if (entry.proofChain === "bridge" && bridgeArtifactMatch === true && entry.hasBytecode === true) { + return "strong"; + } + if (runtimeConsumerRequired && runtimeConsumerMatch === true && entry.hasBytecode === true) { + return "strong"; + } + if ((entry.hasBytecode === true || entry.sourceVerified === true) && entry.addressSource?.kind && entry.addressSource.kind !== "unknown") { + return "partial"; + } + if (entry.addressSource?.kind && entry.addressSource.kind !== "unknown") { + return "partial"; + } + return "unverified"; +} + +function decorateEntryForOutput(entry) { + const meta = { ...(entry.meta || {}) }; + const controllerRegistered = deriveControllerRegistered(meta.registrationState || null, meta.registeredInController); + meta.controllerRegistered = controllerRegistered; + + const isProxyEntry = (entry.deploymentKind || entry.type) === "proxy"; + const isImplementationEntry = Boolean(meta.currentImplementation); + const proxyAddress = isImplementationEntry ? meta.proxyAddress || null : (isProxyEntry ? entry.address : null); + const implementationAddress = isImplementationEntry ? entry.address || null : meta.proxyTarget || null; + + const proxyVerification = { + applicable: Boolean(isProxyEntry || isImplementationEntry || meta.proxyTarget || meta.proxyAddress), + proxyAddress, + controllerAddress: meta.proxyControllerAddress || null, + controllerMatchesExpected: typeof meta.proxyControllerMatchesExpected === "boolean" ? meta.proxyControllerMatchesExpected : null, + targetContractId: meta.proxyTargetContractId || null, + targetContractName: meta.proxyTargetContractName || null, + implementationAddress, + implementationName: isImplementationEntry ? entry.canonicalName : meta.proxyTargetName || null, + implementationVersion: meta.currentImplementationVersion || null, + implementationSource: meta.proxyImplementationSource || null, + expectedImplementationAddress: meta.expectedProxyImplementationAddress || null, + expectedImplementationSource: meta.expectedProxyImplementationSource || null, + implementationMatchesExpected: typeof meta.proxyImplementationMatchesExpected === "boolean" + ? meta.proxyImplementationMatchesExpected + : (meta.expectedProxyImplementationAddress && implementationAddress + ? addressesMatch(meta.expectedProxyImplementationAddress, implementationAddress) + : null), + controllerCurrentProxyMatches: proxyAddress && meta.controllerResolvedAddress + ? addressesMatch(proxyAddress, meta.controllerResolvedAddress) + : null, + }; + + return { + ...entry, + controllerRegistered, + verification: { + status: buildVerificationStatus(entry, controllerRegistered, proxyVerification), + lastVerifiedAt: entry.verifiedAtISO || null, + explorer: { + ...getExplorerProfile(entry.chain), + addressUrl: entry.blockchainHref || null, + }, + controller: { + applicable: entry.runtimeAuthority === "controller", + controllerAddress: entry.runtimeAuthority === "controller" ? CONTROLLERS[entry.chain] || null : null, + controllerSlot: meta.controllerSlot || null, + registrationState: meta.registrationState || null, + controllerRegistered, + resolvedAddress: meta.controllerResolvedAddress || null, + currentAddressMatches: meta.controllerResolvedAddress ? addressesMatch(entry.address, meta.controllerResolvedAddress) : null, + }, + bridge: { + applicable: entry.proofChain === "bridge", + deploymentArtifactAddress: meta.deploymentArtifactAddress || null, + deploymentArtifactRepo: meta.deploymentArtifactRepo || null, + deploymentArtifactPath: meta.deploymentArtifactPath || null, + deploymentArtifactResolvedCommit: meta.deploymentArtifactResolvedCommit || null, + deploymentArtifactMatchesAddress: typeof meta.deploymentArtifactMatchesAddress === "boolean" + ? meta.deploymentArtifactMatchesAddress + : null, + }, + runtimeConsumer: { + applicable: Boolean(meta.runtimeConsumerRepo || meta.runtimeConsumerRequired), + required: Boolean(meta.runtimeConsumerRequired), + repo: meta.runtimeConsumerRepo || null, + path: meta.runtimeConsumerPath || null, + resolvedCommit: meta.runtimeConsumerResolvedCommit || null, + exactAddressMatch: typeof meta.runtimeConsumerExactAddressMatch === "boolean" + ? meta.runtimeConsumerExactAddressMatch + : null, + }, + proxy: proxyVerification, + }, + meta, + }; +} + +function buildChainPayload(entries, currentImplementations = [], historical = [], historicalSeriesOrGovernorSha = {}, governorSha = null) { + const historicalSeries = typeof historicalSeriesOrGovernorSha === "string" || historicalSeriesOrGovernorSha == null + ? {} + : historicalSeriesOrGovernorSha; + const resolvedGovernorSha = typeof historicalSeriesOrGovernorSha === "string" && governorSha == null + ? historicalSeriesOrGovernorSha + : governorSha; + const decorate = (item) => { + const entry = decorateEntryForOutput(item); + if (entry.addressSource?.kind === "governor-manifest" && !entry.addressSource.resolvedCommit) { + entry.addressSource.resolvedCommit = resolvedGovernorSha || null; + } + return entry; + }; + const historicalEntries = Array.isArray(historical) ? historical : []; + const inventory = [ + ...entries.map(decorate), + ...currentImplementations.map(decorate), + ...historicalEntries.map(decorate), + ]; + const sortByCategoryThenName = (left, right) => + String(left.category || "").localeCompare(String(right.category || "")) + || String(left.name || "").localeCompare(String(right.name || "")) + || String(left.address || "").localeCompare(String(right.address || "")); + const active = inventory.filter((entry) => entry.lifecycle === "active").sort(sortByCategoryThenName); + const paused = inventory.filter((entry) => entry.lifecycle === "paused").sort(sortByCategoryThenName); + const migrationResidual = inventory.filter((entry) => entry.lifecycle === "migration_residual").sort(sortByCategoryThenName); + const legacyOperational = inventory.filter((entry) => entry.lifecycle === "legacy_operational").sort(sortByCategoryThenName); + return { + inventory, + current: active, + active, + paused, + migration_residual: migrationResidual, + legacy_operational: legacyOperational, + historical: historicalEntries.map(decorate).sort(sortByCategoryThenName), + historicalSeries, + currentImplementations: currentImplementations.map(decorate).sort(sortByCategoryThenName), + }; +} + +function validateExplorerLink(entry) { + if (!entry.blockchainHref) return null; + const expectedHost = entry.chain === "arbitrumOne" ? "arbiscan.io" : "etherscan.io"; + const match = entry.blockchainHref.match(/^https:\/\/([^/]+)\/address\/(0x[a-fA-F0-9]{40})$/); + if (!match) { + return `${entry.name} has malformed explorer link ${entry.blockchainHref}`; + } + if (match[1] !== expectedHost) { + return `${entry.name} uses ${match[1]} instead of ${expectedHost}`; + } + if (!addressesMatch(match[2], entry.address)) { + return `${entry.name} explorer link address does not match entry address`; + } + return null; +} + +function summarizeVerification(chainPayload) { + const published = [ + ...chainPayload.active, + ...chainPayload.paused, + ...chainPayload.migration_residual, + ...chainPayload.legacy_operational, + ]; + return { + total: published.length, + bytecode: published.filter((entry) => entry.hasBytecode === true).length, + verified: published.filter((entry) => entry.sourceVerified === true).length, + }; +} + +function writeHealthChecks(checks, dryRun = false) { + if (dryRun) return; + fs.mkdirSync(path.dirname(HEALTH_CHECK_PATH), { recursive: true }); + fs.writeFileSync(HEALTH_CHECK_PATH, JSON.stringify({ + timestamp: new Date().toISOString(), + checks, + }, null, 2)); +} + +function normalizeComparableJsonPayload(value) { + const clone = JSON.parse(JSON.stringify(value)); + const scrub = (node, parentKey = null) => { + if (!node || typeof node !== "object") return; + + if (Array.isArray(node)) { + node.forEach((item) => scrub(item, parentKey)); + return; + } + + Object.entries(node).forEach(([key, child]) => { + if (key === "_generated" && child && typeof child === "object" && child.at) { + child.at = "__VOLATILE_GENERATED_AT__"; + } + if (key === "meta" && child && typeof child === "object" && child.lastUpdated) { + child.lastUpdated = "__VOLATILE_LAST_UPDATED__"; + } + if (key === "verifiedAt" || key === "verifiedAtISO" || key === "lastVerifiedAt") { + node[key] = "__VOLATILE_VERIFIED_AT__"; + return; + } + scrub(child, key); + }); + }; + + scrub(clone); + if (clone._generated?.at) { + clone._generated.at = "__VOLATILE_GENERATED_AT__"; + } + if (clone.meta?.lastUpdated) { + clone.meta.lastUpdated = "__VOLATILE_LAST_UPDATED__"; + } + return JSON.stringify(clone, null, 2); +} + +function normalizeComparableJsx(text) { + return String(text) + .replace(/^ \* Last updated: .+$/m, " * Last updated: __VOLATILE_LAST_UPDATED__") + .replace(/"lastUpdated": "[^"]+"/g, '"lastUpdated": "__VOLATILE_LAST_UPDATED__"') + .replace(/"verifiedAtISO": "[^"]+"/g, '"verifiedAtISO": "__VOLATILE_VERIFIED_AT__"') + .replace(/"verifiedAt": "[^"]+"/g, '"verifiedAt": "__VOLATILE_VERIFIED_AT__"') + .replace(/"lastVerifiedAt": "[^"]+"/g, '"lastVerifiedAt": "__VOLATILE_VERIFIED_AT__"'); +} + +function renderGeneratedDataModule(exportName, payload, metadata = {}) { + return [ + "/**", + " * Auto-generated by fetch-contract-addresses.js", + ` * Source: ${GOVERNOR_REPO} (${metadata.governorSha || "unknown"})`, + ` * Last updated: ${metadata.generatedAt || new Date().toISOString()}`, + " * DO NOT EDIT MANUALLY", + " */", + "", + `export const ${exportName} = ${JSON.stringify(payload, null, 2)};`, + "", + `export default ${exportName};`, + "", + ].join("\n"); +} + +function assertCanonicalOutputsMatch(expectedFiles) { + const drift = []; + + for (const [filePath, descriptor] of Object.entries(expectedFiles)) { + if (!fs.existsSync(filePath)) { + drift.push(`${path.relative(REPO_ROOT, filePath)} is missing`); + continue; + } + + const current = fs.readFileSync(filePath, "utf8"); + const normalizedCurrent = descriptor.kind === "json" + ? normalizeComparableJsonPayload(JSON.parse(current)) + : normalizeComparableJsx(current); + const normalizedExpected = descriptor.kind === "json" + ? normalizeComparableJsonPayload(descriptor.value) + : normalizeComparableJsx(descriptor.value); + + if (normalizedCurrent !== normalizedExpected) { + drift.push(`${path.relative(REPO_ROOT, filePath)} is out of date`); + } + } + + if (drift.length) { + const error = new Error(`Contracts output drift detected:\n- ${drift.join("\n- ")}`); + error.failures = drift.map((detail) => ({ + failureClass: FAILURE_CLASSES.output, + endpoint: "output-check", + chain: "multi", + contract: "contracts-pipeline", + detail, + })); + throw error; + } +} + +function buildDataArtifacts(data, blockchainPageData, governorSha, catalog) { + const now = new Date(); + const nowISO = now.toISOString(); + const nowFormatted = now.toLocaleDateString("en-GB", { day: "numeric", month: "short", year: "numeric" }); + const arbSummary = summarizeVerification(data.arbitrumOne); + const ethSummary = summarizeVerification(data.ethereumMainnet); + const payload = { + arbitrumOne: data.arbitrumOne, + ethereumMainnet: data.ethereumMainnet, + historical: { + arbitrumOne: buildRootHistoricalChainPayload(data.arbitrumOne?.historicalSeries || {}), + ethereumMainnet: buildRootHistoricalChainPayload(data.ethereumMainnet?.historicalSeries || {}), + }, + meta: { + lastUpdated: nowISO, + lastVerified: nowFormatted, + sourceRepo: GOVERNOR_REPO, + sourceCommit: governorSha, + verificationSummary: `${arbSummary.verified}/${arbSummary.total} Arbitrum source-verified, ${ethSummary.verified}/${ethSummary.total} Mainnet source-verified`, + bytecodeSummary: `${arbSummary.bytecode}/${arbSummary.total} Arbitrum with bytecode, ${ethSummary.bytecode}/${ethSummary.total} Mainnet with bytecode`, + explorerUrls: EXPLORER_URLS, + rpcUrls: DEFAULT_RPC_URLS, + verificationModel: "contracts-proof-v2", + watchedRepos: catalog._meta.watchedRepos, + latestResolutionPolicy: catalog._meta.latestResolutionPolicy, + cadence: CONTRACTS_PIPELINE_CADENCE, + }, + }; + const blockchainPayload = { + ...blockchainPageData, + meta: { + ...(blockchainPageData?.meta || {}), + lastUpdated: nowISO, + lastVerified: nowFormatted, + verificationModel: "contracts-proof-v2", + sourceCommit: governorSha, + explorerUrls: EXPLORER_URLS, + }, + }; + const jsonPayload = { + _generated: { + by: "fetch-contract-addresses.js", + at: nowISO, + source: `${GOVERNOR_REPO} (${governorSha})`, + }, + ...payload, + }; + const blockchainJsonPayload = { + _generated: { + by: "fetch-contract-addresses.js", + at: nowISO, + source: `${GOVERNOR_REPO} (${governorSha})`, + }, + ...blockchainPayload, + }; + const contractAddressesJsx = renderGeneratedDataModule("contractAddresses", payload, { + generatedAt: nowISO, + governorSha, + }); + const blockchainContractsPageDataJsx = renderGeneratedDataModule("blockchainContractsPageData", blockchainPayload, { + generatedAt: nowISO, + governorSha, + }); + return { + contractAddresses: payload, + blockchainContractsPageData: blockchainPayload, + files: { + [OUTPUT_JSON_PATH]: { + kind: "json", + value: jsonPayload, + }, + [OUTPUT_JSX_PATH]: { + kind: "jsx", + value: contractAddressesJsx, + }, + [BLOCKCHAIN_PAGE_DATA_JSON_PATH]: { + kind: "json", + value: blockchainJsonPayload, + }, + [BLOCKCHAIN_PAGE_DATA_JSX_PATH]: { + kind: "jsx", + value: blockchainContractsPageDataJsx, + }, + }, + }; +} + +function writeDataFiles(data, blockchainPageData, governorSha, catalog, options = {}) { + const { dryRun = false, check = false } = options; + const artifacts = buildDataArtifacts(data, blockchainPageData, governorSha, catalog); + + if (check) { + assertCanonicalOutputsMatch(artifacts.files); + return { + contractAddresses: artifacts.contractAddresses, + blockchainContractsPageData: artifacts.blockchainContractsPageData, + }; + } + + if (dryRun) { + return { + contractAddresses: artifacts.contractAddresses, + blockchainContractsPageData: artifacts.blockchainContractsPageData, + }; + } + + fs.mkdirSync(path.dirname(OUTPUT_JSON_PATH), { recursive: true }); + fs.mkdirSync(path.dirname(OUTPUT_JSX_PATH), { recursive: true }); + fs.mkdirSync(path.dirname(BLOCKCHAIN_PAGE_DATA_JSON_PATH), { recursive: true }); + fs.mkdirSync(path.dirname(BLOCKCHAIN_PAGE_DATA_JSX_PATH), { recursive: true }); + fs.writeFileSync(OUTPUT_JSON_PATH, JSON.stringify(artifacts.files[OUTPUT_JSON_PATH].value, null, 2)); + fs.writeFileSync(OUTPUT_JSX_PATH, artifacts.files[OUTPUT_JSX_PATH].value); + fs.writeFileSync( + BLOCKCHAIN_PAGE_DATA_JSON_PATH, + JSON.stringify(artifacts.files[BLOCKCHAIN_PAGE_DATA_JSON_PATH].value, null, 2), + ); + fs.writeFileSync(BLOCKCHAIN_PAGE_DATA_JSX_PATH, artifacts.files[BLOCKCHAIN_PAGE_DATA_JSX_PATH].value); + + return { + contractAddresses: artifacts.contractAddresses, + blockchainContractsPageData: artifacts.blockchainContractsPageData, + }; +} + +function buildValidationReport({ + catalog, + payload, + branchDiffs, + resolutions, +}) { + const failures = []; + const warnings = []; + const publishedEntries = [ + ...payload.arbitrumOne.inventory, + ...payload.ethereumMainnet.inventory, + ]; + + for (const resolution of resolutions) { + const entry = resolution.entry; + const deploymentResolution = resolution.resolution || {}; + if (!entry.address) { + failures.push({ + failureClass: FAILURE_CLASSES.truth, + endpoint: "address-resolution", + chain: entry.chain, + contract: entry.name, + detail: `${resolution.definition.id} did not resolve a publishable address`, + }); + } + if (!PUBLISHED_LIFECYCLES.has(entry.lifecycle)) { + failures.push({ + failureClass: FAILURE_CLASSES.output, + endpoint: "lifecycle-classification", + chain: entry.chain, + contract: entry.name, + detail: `${entry.lifecycle} is not a supported lifecycle`, + }); + } + if (entry.codeSource && !entry.codeSource.resolvedCommit) { + failures.push({ + failureClass: FAILURE_CLASSES.provenance, + endpoint: "code-provenance", + chain: entry.chain, + contract: entry.name, + detail: `Missing commit-specific provenance for ${entry.codeSource.repo}:${entry.codeSource.path}`, + }); + } + if (entry.codeSource && entry.codeSource.exists === false) { + failures.push({ + failureClass: FAILURE_CLASSES.provenance, + endpoint: "code-provenance", + chain: entry.chain, + contract: entry.name, + detail: `Resolved source path does not exist: ${entry.codeSource.repo}:${entry.codeSource.path}`, + }); + } + if (resolution.definition.artifactAuthority && deploymentResolution.artifact?.address && entry.address + && !addressesMatch(deploymentResolution.artifact.address, entry.address)) { + failures.push({ + failureClass: FAILURE_CLASSES.truth, + endpoint: "deployment-artifact", + chain: entry.chain, + contract: entry.name, + detail: "Deployment artifact address does not match the published row", + }); + } + if (resolution.definition.requiredRuntimeEvidence && deploymentResolution.runtimeConsumerEvidence?.exactAddressMatch !== true) { + failures.push({ + failureClass: FAILURE_CLASSES.truth, + endpoint: "runtime-consumer", + chain: entry.chain, + contract: entry.name, + detail: "Required runtime consumer evidence did not confirm the published address", + }); + } + } + + const activeTargets = publishedEntries.filter((entry) => entry.lifecycle === "active" && (entry.type || entry.deploymentKind) === "target"); + if (activeTargets.length) { + failures.push({ + failureClass: FAILURE_CLASSES.output, + endpoint: "active-surface-leak", + chain: "multi", + contract: "active-output", + detail: `Found ${activeTargets.length} target rows in the active publish surface`, + }); + } + + for (const entry of publishedEntries) { + if (ACTIVE_LIFECYCLES.has(entry.lifecycle) && entry.runtimeAuthority === "controller" && entry.verification?.controller?.controllerRegistered !== true) { + failures.push({ + failureClass: FAILURE_CLASSES.truth, + endpoint: "controller-reconciliation", + chain: entry.chain, + contract: entry.name, + detail: `Controller current address does not match the published row`, + }); + } + if ((entry.type || entry.deploymentKind) === "proxy" && entry.lifecycle === "active" && !entry.verification?.proxy?.implementationAddress) { + failures.push({ + failureClass: FAILURE_CLASSES.truth, + endpoint: "proxy-runtime", + chain: entry.chain, + contract: entry.name, + detail: "Active proxy row is missing a runtime-resolved implementation address", + }); + } + const explorerIssue = validateExplorerLink(entry); + if (explorerIssue) { + failures.push({ + failureClass: FAILURE_CLASSES.link, + endpoint: "explorer-link", + chain: entry.chain, + contract: entry.name, + detail: explorerIssue, + }); + } + } + + for (const diff of branchDiffs) { + const branchFailure = { + failureClass: FAILURE_CLASSES.branch, + endpoint: diff.type, + chain: null, + contract: diff.repo, + detail: diff.detail, + }; + if (BLOCKING_BRANCH_DIFF_TYPES.includes(diff.type)) { + failures.push(branchFailure); + } else { + warnings.push(branchFailure); + } + } + + if (JSON.stringify(payload).includes("snippets/data/changelogs/contractAddressesData.jsx")) { + failures.push({ + failureClass: FAILURE_CLASSES.output, + endpoint: "historical-cutover", + chain: "multi", + contract: "historical-series", + detail: "Generated contracts payload still references the archived historical changelog path", + }); + } + + return { failures, warnings, catalog, payload }; +} + +async function runContractsPipeline(options = {}) { + const { dryRun = false, check = false, skipVerify = false } = options; + const noWrite = dryRun || check; + const catalog = buildContractProofCatalog(); + const { addresses, sha } = await fetchGovernorAddresses(); + addresses._sha = sha; + const previousPayload = loadPreviousGeneratedContracts(); + + const previousBranchState = loadBranchWatchState(); + const nextBranchState = { + generatedAt: new Date().toISOString(), + repos: [], + }; + for (const repo of WATCHED_REPOS) { + nextBranchState.repos.push(await fetchRepoInventory(repo)); + } + const branchDiffs = diffBranchWatchState(previousBranchState, nextBranchState); + + const resolutions = []; + for (const definition of catalog.deployments) { + const resolution = await resolveDeployment(definition, addresses); + const entry = buildBaseEntry(definition, resolution); + resolutions.push({ definition, entry, resolution }); + } + + const byChain = { + arbitrumOne: resolutions.filter((item) => item.entry.chain === "arbitrumOne"), + ethereumMainnet: resolutions.filter((item) => item.entry.chain === "ethereumMainnet"), + }; + + const arbVerified = await verifyAddresses(byChain.arbitrumOne.map((item) => item.entry), "arbitrumOne", skipVerify); + const ethVerified = await verifyAddresses(byChain.ethereumMainnet.map((item) => item.entry), "ethereumMainnet", skipVerify); + byChain.arbitrumOne = byChain.arbitrumOne.map((item, index) => ({ ...item, entry: arbVerified[index] })); + byChain.ethereumMainnet = byChain.ethereumMainnet.map((item, index) => ({ ...item, entry: ethVerified[index] })); + + const arbEnriched = await enrichMetadata(byChain.arbitrumOne.map((item) => item.entry), skipVerify); + const ethEnriched = await enrichMetadata(byChain.ethereumMainnet.map((item) => item.entry), skipVerify); + byChain.arbitrumOne = byChain.arbitrumOne.map((item, index) => ({ ...item, entry: arbEnriched[index] })); + byChain.ethereumMainnet = byChain.ethereumMainnet.map((item, index) => ({ ...item, entry: ethEnriched[index] })); + + const arbImplementations = await verifyAddresses( + buildImplementationEntries(byChain.arbitrumOne, addresses), + "arbitrumOne", + skipVerify + ); + const ethImplementations = await verifyAddresses( + buildImplementationEntries(byChain.ethereumMainnet, addresses), + "ethereumMainnet", + skipVerify + ); + const arbHistoricalLogResult = await fetchControllerSetContractInfoLogs("arbitrumOne"); + const arbHistoricalSeedEntries = buildHistoricalEntriesFromEventLogs(byChain.arbitrumOne, arbHistoricalLogResult.logs); + const supplementalFailures = []; + if (arbHistoricalLogResult.failures?.length && arbHistoricalSeedEntries.length === 0) { + supplementalFailures.push({ + failureClass: FAILURE_CLASSES.rpc, + endpoint: "controller-history", + chain: "arbitrumOne", + contract: "controller-history", + detail: "Failed to recover authoritative Arbitrum controller event history", + }); + } + const arbHistoricalArtifacts = buildHistoricalArtifacts({ + chain: "arbitrumOne", + entries: arbEnriched, + currentImplementations: arbImplementations, + previousChainPayload: previousPayload?.arbitrumOne || null, + seededHistoricalEntries: arbHistoricalSeedEntries, + resetSeededGroups: arbHistoricalSeedEntries.length > 0, + }); + const ethHistoricalArtifacts = buildHistoricalArtifacts({ + chain: "ethereumMainnet", + entries: ethEnriched, + currentImplementations: ethImplementations, + previousChainPayload: previousPayload?.ethereumMainnet || null, + seededHistoricalEntries: ethEnriched.filter((entry) => entry.lifecycle === "historical"), + resetSeededGroups: ethEnriched.some((entry) => entry.lifecycle === "historical"), + }); + + const payload = { + arbitrumOne: buildChainPayload(arbEnriched, arbImplementations, arbHistoricalArtifacts.historical, arbHistoricalArtifacts.historicalSeries, sha), + ethereumMainnet: buildChainPayload(ethEnriched, ethImplementations, ethHistoricalArtifacts.historical, ethHistoricalArtifacts.historicalSeries, sha), + }; + const blockchainPageData = await buildBlockchainContractsPageData({ + payload, + resolutions: [...byChain.arbitrumOne, ...byChain.ethereumMainnet], + meta: { + verificationModel: "contracts-proof-v2", + sourceCommit: sha, + explorerUrls: EXPLORER_URLS, + }, + }); + + const validation = buildValidationReport({ + catalog, + payload, + branchDiffs, + resolutions: [...byChain.arbitrumOne, ...byChain.ethereumMainnet], + }); + const supplementalWarnings = []; + const allFailures = [...validation.failures, ...supplementalFailures]; + const allWarnings = [...validation.warnings, ...supplementalWarnings]; + const checks = [ + ...allFailures.map((failure) => ({ + endpoint: failure.endpoint, + status: "FAIL", + detail: failure.detail, + affects: failure.contract || failure.chain || "contracts-pipeline", + })), + ...allWarnings.map((warning) => ({ + endpoint: warning.endpoint, + status: "WARN", + detail: warning.detail, + affects: warning.contract || warning.chain || "contracts-pipeline", + })), + ]; + writeHealthChecks(checks, noWrite); + + if (allFailures.length) { + writeIncidentArtifacts({ + incidents: allFailures, + summary: { + verificationModel: "contracts-proof-v2", + branchWatchStatePath: path.relative(REPO_ROOT, BRANCH_WATCH_STATE_PATH), + }, + dryRun: noWrite, + }); + const error = new Error(`${allFailures.length} blocking validation failure(s)`); + error.failures = allFailures; + throw error; + } + + const writtenPayload = writeDataFiles(payload, blockchainPageData, sha, catalog, { dryRun, check }); + writeBranchWatchState(nextBranchState, noWrite); + return { + payload: writtenPayload?.contractAddresses || payload, + blockchainContractsPageData: writtenPayload?.blockchainContractsPageData || blockchainPageData, + branchWatch: nextBranchState, + warnings: allWarnings, + sourceCommit: sha, + }; +} + +module.exports = { + buildBlockchainContractsPageData, + buildChainPayload, + buildDataArtifacts, + buildHistoricalArtifacts, + buildHistoricalEntriesFromEventLogs, + buildRootHistoricalChainPayload, + buildValidationReport, + buildContractProofCatalog, + computeIncidentFingerprint, + decodeSetContractInfoLog, + diffBranchWatchState, + fetchControllerSetContractInfoLogs, + resolveCodeSource, + resolveDeploymentArtifact, + resolveRepoPath, + resolveRuntimeConsumerEvidence, + resolveAuthority, + resolveGovernorSeries, + runContractsPipeline, +}; diff --git a/operations/scripts/automations/content/data/contracts/solidity-parser.js b/operations/scripts/automations/content/data/contracts/solidity-parser.js new file mode 100644 index 000000000..222ae6987 --- /dev/null +++ b/operations/scripts/automations/content/data/contracts/solidity-parser.js @@ -0,0 +1,119 @@ +const parser = require("@solidity-parser/parser"); + +function toParameterArray(parameters) { + if (!parameters) return []; + if (Array.isArray(parameters)) return parameters; + if (Array.isArray(parameters.parameters)) return parameters.parameters; + return []; +} + +function stringifyTypeName(node) { + if (!node) return "unknown"; + + switch (node.type) { + case "ElementaryTypeName": + return node.name; + case "UserDefinedTypeName": + return node.namePath; + case "ArrayTypeName": + return `${stringifyTypeName(node.baseTypeName)}[]`; + case "Mapping": + return `mapping(${stringifyTypeName(node.keyType)} => ${stringifyTypeName(node.valueType)})`; + case "FunctionTypeName": { + const params = toParameterArray(node.parameterTypes).map(stringifyParameter).join(", "); + const returns = toParameterArray(node.returnTypes).map(stringifyParameter).join(", "); + return `function(${params})${returns ? ` returns (${returns})` : ""}`; + } + default: + return node.name || node.type || "unknown"; + } +} + +function stringifyParameter(parameter) { + if (!parameter) return "unknown"; + const type = stringifyTypeName(parameter.typeName); + const location = parameter.storageLocation && parameter.storageLocation !== "default" + ? ` ${parameter.storageLocation}` + : ""; + const name = parameter.name ? ` ${parameter.name}` : ""; + return `${type}${location}${name}`.trim(); +} + +function stringifyReturns(parameters = []) { + const items = toParameterArray(parameters).map(stringifyParameter).filter(Boolean); + if (!items.length) return null; + return items.length === 1 ? items[0] : `(${items.join(", ")})`; +} + +function formatFunctionSignature(contractName, fn) { + const visibility = fn.visibility || "public"; + const params = toParameterArray(fn.parameters).map(stringifyParameter).filter(Boolean); + const returns = stringifyReturns(fn.returnParameters); + const mutability = fn.stateMutability && fn.stateMutability !== "nonpayable" + ? ` ${fn.stateMutability}` + : ""; + return `${contractName}.${fn.name}(${params.join(", ")})${returns ? ` returns ${returns}` : ""}${mutability}`; +} + +function extractContractMetadata(source, contractName) { + if (!source || !contractName) { + return { + contractFound: false, + contractKind: null, + bases: [], + functions: [], + error: null, + }; + } + + try { + const ast = parser.parse(source, { tolerant: true }); + const contract = (ast.children || []).find( + (node) => node.type === "ContractDefinition" && node.name === contractName + ); + + if (!contract) { + return { + contractFound: false, + contractKind: null, + bases: [], + functions: [], + error: `Contract ${contractName} not found in parsed source.`, + }; + } + + const functions = (contract.subNodes || []) + .filter((node) => node.type === "FunctionDefinition") + .filter((node) => node.visibility === "public" || node.visibility === "external") + .filter((node) => node.isConstructor !== true && node.name) + .map((node) => ({ + name: node.name, + params: toParameterArray(node.parameters).map(stringifyParameter).filter(Boolean), + returns: stringifyReturns(node.returnParameters), + stateMutability: node.stateMutability || null, + declaredIn: contract.name, + signature: formatFunctionSignature(contract.name, node), + })); + + return { + contractFound: true, + contractKind: contract.kind || "contract", + bases: (contract.baseContracts || []).map((base) => base.baseName?.namePath).filter(Boolean), + functions, + error: null, + }; + } catch (error) { + return { + contractFound: false, + contractKind: null, + bases: [], + functions: [], + error: error.message, + }; + } +} + +module.exports = { + extractContractMetadata, + stringifyParameter, +}; diff --git a/operations/scripts/automations/content/data/contracts/spec.js b/operations/scripts/automations/content/data/contracts/spec.js new file mode 100644 index 000000000..5d9b7516f --- /dev/null +++ b/operations/scripts/automations/content/data/contracts/spec.js @@ -0,0 +1,208 @@ +const { WATCHED_REPOS } = require("./constants"); +const { + BLOCKCHAIN_PAGE_SECTIONS, + BLOCKCHAIN_PAGE_SOURCE_ONLY_CONTRACTS, + CONTRACT_DEFINITIONS, + LATEST_RESOLUTION_POLICY, +} = require("./catalog-config"); + +function controllerDeployment({ + id, + canonicalName, + chain, + category, + deploymentKind = "standalone", + lifecycle = "active", + controllerSlot = canonicalName, + codeAuthority = null, + currentImplementationStrategy = null, + notes = null, +}) { + return { + id, + canonicalName, + chain, + category, + deploymentKind, + lifecycle, + proofChain: "controller", + addressStrategy: { + kind: canonicalName === "Controller" ? "controller-root" : "controller-slot", + controllerSlot: canonicalName === "Controller" ? null : controllerSlot, + }, + runtimeAuthority: { + kind: canonicalName === "Controller" ? "explorer" : "controller", + controllerSlot: canonicalName === "Controller" ? null : controllerSlot, + }, + codeAuthority, + currentImplementationStrategy, + notes, + }; +} + +function bridgeDeployment({ + id, + canonicalName, + chain, + category = "bridge", + lifecycle = "active", + deploymentKind = "standalone", + governorKey = null, + artifactAuthority = null, + codeAuthority = null, + notes = null, +}) { + return { + id, + canonicalName, + chain, + category, + deploymentKind, + lifecycle, + proofChain: "bridge", + addressStrategy: governorKey + ? { + kind: "governor-manifest", + governorKey, + } + : { + kind: "deployment-artifact", + ...artifactAuthority, + }, + runtimeAuthority: { + kind: "bridge", + }, + artifactAuthority, + codeAuthority, + notes, + }; +} + +function detachedDeployment({ + id, + canonicalName, + chain, + category, + lifecycle = "active", + addressStrategyOverride = null, + artifactAuthority = null, + codeAuthority = null, + runtimeEvidence = null, + requiredRuntimeEvidence = false, + searchTerms = [], + notes = null, +}) { + return { + id, + canonicalName, + chain, + category, + deploymentKind: "standalone", + lifecycle, + proofChain: "detached", + addressStrategy: addressStrategyOverride || (artifactAuthority + ? { + kind: "deployment-artifact", + ...artifactAuthority, + } + : { + kind: "repo-search", + repos: ["livepeer/go-livepeer", "livepeer/protocol", "livepeer/arbitrum-lpt-bridge"], + searchTerms: [canonicalName, ...searchTerms], + }), + runtimeAuthority: { + kind: "explorer", + }, + artifactAuthority, + codeAuthority, + runtimeEvidence, + requiredRuntimeEvidence, + notes, + }; +} + +function materializeDeployment(definition = {}) { + if (definition.kind === "controller") { + return controllerDeployment(definition); + } + + if (definition.kind === "bridge") { + return bridgeDeployment(definition); + } + + if (definition.kind === "detached") { + return detachedDeployment(definition); + } + + throw new Error(`Unsupported contract definition kind: ${definition.kind || "unknown"}`); +} + +function buildBlockchainContractPageSpec() { + const sectionOrder = new Map(BLOCKCHAIN_PAGE_SECTIONS.map((section, index) => [section.slug, index])); + const pageContracts = [ + ...CONTRACT_DEFINITIONS + .filter((definition) => definition?.page?.slug && definition?.page?.section) + .map((definition) => ({ + slug: definition.page.slug, + name: definition.page.name || definition.canonicalName, + canonicalName: definition.canonicalName, + subtitle: definition.page.subtitle || null, + category: definition.category, + chain: definition.chain || null, + bucket: definition.lifecycle || "active", + type: definition.deploymentKind || "standalone", + sourceContractName: definition.page.sourceContractName || definition.canonicalName, + sourceDisplayName: definition.page.sourceDisplayName || null, + codeAuthority: definition.codeAuthority || null, + __section: definition.page.section, + __order: definition.page.order || 0, + })), + ...BLOCKCHAIN_PAGE_SOURCE_ONLY_CONTRACTS.map((contract) => ({ + ...contract, + __section: contract.section, + __order: contract.order || 0, + })), + ].sort((left, right) => { + const sectionCompare = (sectionOrder.get(left.__section) ?? Number.MAX_SAFE_INTEGER) + - (sectionOrder.get(right.__section) ?? Number.MAX_SAFE_INTEGER); + if (sectionCompare !== 0) return sectionCompare; + if ((left.__order || 0) !== (right.__order || 0)) { + return (left.__order || 0) - (right.__order || 0); + } + return String(left.canonicalName || left.name || "").localeCompare( + String(right.canonicalName || right.name || ""), + "en", + { sensitivity: "base" }, + ); + }); + + return { + sections: BLOCKCHAIN_PAGE_SECTIONS + .map((section) => ({ + slug: section.slug, + title: section.title, + contracts: pageContracts + .filter((contract) => contract.__section === section.slug) + .map((contract) => contract.slug), + })) + .filter((section) => section.contracts.length > 0), + contracts: pageContracts.map(({ __section, __order, section, order, ...contract }) => contract), + }; +} + +function buildContractProofCatalog() { + return { + _meta: { + watchedRepos: WATCHED_REPOS, + latestResolutionPolicy: LATEST_RESOLUTION_POLICY, + blockchainPageSections: BLOCKCHAIN_PAGE_SECTIONS, + }, + deployments: CONTRACT_DEFINITIONS.map(materializeDeployment), + }; +} + +module.exports = { + WATCHED_REPOS, + buildBlockchainContractPageSpec, + buildContractProofCatalog, +}; diff --git a/operations/scripts/generators/content/seo/generate-ai-sitemap.js b/operations/scripts/generators/content/seo/generate-ai-sitemap.js new file mode 100644 index 000000000..12a3bbbf9 --- /dev/null +++ b/operations/scripts/generators/content/seo/generate-ai-sitemap.js @@ -0,0 +1,385 @@ +#!/usr/bin/env node +/** + * @script generate-ai-sitemap + * @type generator + * @concern content + * @niche seo + * @purpose governance:index-management + * @description AI sitemap generator — produces AI-optimised sitemap files. Dual-mode: --check (enforcer) / --write (generator). + * @mode generate + * @pipeline manual, P6 + * @scope operations/scripts, docs.json, v2 + * @usage node operations/scripts/generators/content/seo/generate-ai-sitemap.js [flags] + * @policy R-R16, R-R17 + */ + +const fs = require('fs'); +const path = require('path'); +const { + getRepoRoot, + normalizeRel, + normalizeDocPathForUrl, + mapLegacyRepoPathToModern, + resolveDocPath, + extractFrontmatter, + stripForWordCount, + countWords, + buildGitLastModifiedMap, + getLastVerified +} = require('../../../../../tools/lib/docs-index-utils'); + +const BASE_URL = 'https://docs.livepeer.org'; +const DOCS_JSON = 'docs.json'; +const OUTPUT_FILE = 'sitemap-ai.xml'; +const AI_NAMESPACE = 'https://docs.livepeer.org/schemas/ai-sitemap/1.0'; +const ROUTE_DEPENDENCIES = { + 'v2/about/resources/livepeer-contract-addresses': [ + 'snippets/data/contract-addresses/contractAddressesData.json', + 'snippets/data/contract-addresses/_health-checks.json', + ], + 'v2/resources/references/contract-addresses': [ + 'snippets/data/contract-addresses/contractAddressesData.json', + 'snippets/data/contract-addresses/_health-checks.json', + ], + 'v2/gateways/resources/reference/technical/contract-addresses': [ + 'snippets/data/contract-addresses/contractAddressesData.json', + 'snippets/data/contract-addresses/_health-checks.json', + ], + 'v2/orchestrators/resources/reference/technical/contract-addresses': [ + 'snippets/data/contract-addresses/contractAddressesData.json', + 'snippets/data/contract-addresses/_health-checks.json', + ], + 'v2/about/livepeer-protocol/blockchain-contracts': [ + 'snippets/data/contract-addresses/blockchainContractsPageData.json', + 'snippets/data/contract-addresses/contractAddressesData.json', + ], +}; + +const REPO_ROOT = getRepoRoot(); + +function usage() { + console.log('Usage: node operations/scripts/generators/content/seo/generate-ai-sitemap.js --write|--check'); +} + +function normalizeRoute(route) { + if (!route) return ''; + const trimmed = String(route).trim(); + if (!trimmed || trimmed === '-') return ''; + return trimmed.replace(/^\//, '').replace(/\.(md|mdx)$/i, ''); +} + +function isSeparatorValue(value) { + return !value || String(value).trim().length === 0; +} + +function isExcludedRoute(route) { + const normalized = normalizeRoute(route); + if (!normalized) return true; + const legacyMapped = normalized.startsWith('v2/pages/') + ? mapLegacyRepoPathToModern(normalized) + : normalized; + if (!legacyMapped.startsWith('v2/')) return true; + if (legacyMapped.startsWith('v2/internal')) return true; + if (legacyMapped.startsWith('v2/x-')) return true; + return false; +} + +function collectPagesFromList(pages, routes) { + for (const entry of pages || []) { + if (typeof entry === 'string') { + if (!isSeparatorValue(entry)) routes.push(entry); + continue; + } + + if (entry && typeof entry === 'object') { + if (Array.isArray(entry.pages)) { + collectPagesFromList(entry.pages, routes); + } + } + } +} + +function collectRoutesFromAnchor(anchor, routes) { + if (!anchor || typeof anchor !== 'object') return; + if (Array.isArray(anchor.pages)) { + collectPagesFromList(anchor.pages, routes); + } + if (Array.isArray(anchor.groups)) { + for (const group of anchor.groups) { + if (!group || typeof group !== 'object') continue; + if (Array.isArray(group.pages)) { + collectPagesFromList(group.pages, routes); + } + } + } +} + +function collectRoutesFromTab(tab) { + const routes = []; + if (!tab || typeof tab !== 'object') return routes; + if (tab.hidden) return routes; + + if (Array.isArray(tab.anchors)) { + for (const anchor of tab.anchors) { + collectRoutesFromAnchor(anchor, routes); + } + } + + if (Array.isArray(tab.pages)) { + collectPagesFromList(tab.pages, routes); + } + + return routes; +} + +function collectV2Routes(docsJson) { + const v2Version = (docsJson.navigation?.versions || []).find((version) => version.version === 'v2'); + if (!v2Version) { + throw new Error('Could not find v2 navigation in docs.json.'); + } + + const language = (v2Version.languages || []).find((lang) => lang.language === 'en') || v2Version.languages?.[0]; + if (!language) { + throw new Error('Could not find language config for v2 in docs.json.'); + } + + const tabs = Array.isArray(language.tabs) ? language.tabs : []; + const routes = []; + + for (const tab of tabs) { + routes.push(...collectRoutesFromTab(tab)); + } + + return routes; +} + +function xmlEscape(value) { + return String(value || '') + .replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>') + .replace(/"/g, '"') + .replace(/'/g, '''); +} + +function normalizeForUrl(route) { + const normalized = normalizeRoute(route); + if (!normalized) return ''; + const mapped = normalized.startsWith('v2/pages/') + ? mapLegacyRepoPathToModern(normalized) + : normalized; + if (!mapped.startsWith('v2/')) return ''; + return normalizeDocPathForUrl(mapped); +} + +function joinUrl(route) { + const normalized = normalizeForUrl(route); + if (!normalized) return ''; + return `${BASE_URL.replace(/\/$/, '')}/${normalized}`; +} + +function getSection(route) { + const normalized = normalizeForUrl(route); + if (!normalized.startsWith('v2/')) return ''; + const rest = normalized.slice('v2/'.length); + return rest.split('/').filter(Boolean)[0] || ''; +} + +function coerceStringArray(value) { + if (!value) return []; + if (Array.isArray(value)) return value.map((item) => String(item)); + if (typeof value === 'string') return [value]; + return []; +} + +function collectFrontmatterList(frontmatter, keys) { + const items = []; + keys.forEach((key) => { + coerceStringArray(frontmatter?.[key]).forEach((item) => { + const trimmed = String(item || '').trim(); + if (trimmed) items.push(trimmed); + }); + }); + const deduped = []; + items.forEach((item) => { + if (!deduped.includes(item)) deduped.push(item); + }); + return deduped; +} + +function getLastModified(relPath, gitMap) { + if (gitMap && gitMap.has(relPath)) { + return gitMap.get(relPath); + } + try { + const stats = fs.statSync(path.join(REPO_ROOT, relPath)); + return stats.mtime.toISOString(); + } catch (_err) { + return new Date().toISOString(); + } +} + +function getDependencyLastModified(route, gitMap) { + const normalized = normalizeRoute(route); + const dependencies = ROUTE_DEPENDENCIES[normalized] || []; + const timestamps = dependencies + .map((dependency) => getLastModified(dependency, gitMap)) + .filter(Boolean) + .map((value) => new Date(value).toISOString()); + + if (!timestamps.length) return null; + return timestamps.sort().slice(-1)[0]; +} + +function buildEntries() { + const docsJsonPath = path.join(REPO_ROOT, DOCS_JSON); + const docsJson = JSON.parse(fs.readFileSync(docsJsonPath, 'utf8')); + const rawRoutes = collectV2Routes(docsJson); + const gitMap = buildGitLastModifiedMap(REPO_ROOT); + const missingRoutes = new Set(); + const entriesMap = new Map(); + + rawRoutes.forEach((route) => { + if (isExcludedRoute(route)) return; + const normalized = normalizeRoute(route); + if (!normalized) return; + const mapped = normalized.startsWith('v2/pages/') + ? mapLegacyRepoPathToModern(normalized) + : normalized; + if (!mapped.startsWith('v2/')) return; + + const resolvedPath = resolveDocPath(mapped, REPO_ROOT); + if (!resolvedPath) { + missingRoutes.add(normalized); + return; + } + + const absPath = path.join(REPO_ROOT, resolvedPath); + const content = fs.readFileSync(absPath, 'utf8'); + const frontmatter = extractFrontmatter(content); + const body = frontmatter.body || content; + + const loc = joinUrl(mapped); + if (!loc) return; + + const wordCount = countWords(stripForWordCount(body)); + const fileLastmod = getLastModified(resolvedPath, gitMap); + const dependencyLastmod = getDependencyLastModified(mapped, gitMap); + const lastmod = [fileLastmod, dependencyLastmod].filter(Boolean).sort().slice(-1)[0] || fileLastmod; + const lastVerified = getLastVerified(resolvedPath, frontmatter.data || {}, gitMap, REPO_ROOT); + const section = getSection(mapped); + const tags = collectFrontmatterList(frontmatter.data || {}, ['tags', 'tag', 'keywords']); + const entities = collectFrontmatterList(frontmatter.data || {}, ['entities']); + const difficulty = typeof frontmatter.data?.difficulty === 'string' ? frontmatter.data.difficulty.trim() : ''; + + if (!entriesMap.has(loc)) { + entriesMap.set(loc, { + loc, + lastmod, + section, + wordCount, + lastVerified, + tags, + entities, + difficulty + }); + } + }); + + const entries = Array.from(entriesMap.values()).sort((a, b) => a.loc.localeCompare(b.loc)); + return { entries, missingRoutes: Array.from(missingRoutes) }; +} + +function buildXml({ entries }) { + const lines = []; + lines.push('<?xml version="1.0" encoding="UTF-8"?>'); + lines.push( + `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:ai="${xmlEscape(AI_NAMESPACE)}">` + ); + + entries.forEach((entry) => { + lines.push(' <url>'); + lines.push(` <loc>${xmlEscape(entry.loc)}</loc>`); + if (entry.lastmod) { + lines.push(` <lastmod>${xmlEscape(entry.lastmod)}</lastmod>`); + } + if (entry.section) { + lines.push(` <ai:section>${xmlEscape(entry.section)}</ai:section>`); + } + lines.push(` <ai:wordCount>${entry.wordCount}</ai:wordCount>`); + if (entry.lastVerified) { + lines.push(` <ai:lastVerified>${xmlEscape(entry.lastVerified)}</ai:lastVerified>`); + } + if (entry.tags && entry.tags.length) { + lines.push(` <ai:tags>${xmlEscape(entry.tags.join(', '))}</ai:tags>`); + } + if (entry.difficulty) { + lines.push(` <ai:difficulty>${xmlEscape(entry.difficulty)}</ai:difficulty>`); + } + if (entry.entities && entry.entities.length) { + lines.push(` <ai:entities>${xmlEscape(entry.entities.join(', '))}</ai:entities>`); + } + lines.push(' </url>'); + }); + + lines.push('</urlset>'); + return lines.join('\n').trimEnd() + '\n'; +} + +function readFile(filePath) { + if (!fs.existsSync(filePath)) return null; + return fs.readFileSync(filePath, 'utf8'); +} + +function main() { + const args = process.argv.slice(2); + const shouldWrite = args.includes('--write'); + const shouldCheck = args.includes('--check'); + + if (!shouldWrite && !shouldCheck) { + usage(); + process.exit(1); + } + + const result = buildEntries(); + const xml = buildXml(result); + + if (result.missingRoutes.length) { + console.warn('Missing docs pages referenced in docs.json:'); + result.missingRoutes.forEach((route) => console.warn(`- ${route}`)); + } + + const outputPath = path.join(REPO_ROOT, OUTPUT_FILE); + + if (shouldWrite) { + fs.writeFileSync(outputPath, xml, 'utf8'); + } + + if (shouldCheck) { + const existing = readFile(outputPath); + if (existing === null) { + console.error('Missing sitemap-ai.xml output.'); + process.exit(1); + } + + const normalize = (value) => String(value || '').trimEnd() + '\n'; + const matches = normalize(existing) === normalize(xml); + if (!matches || result.missingRoutes.length) { + console.error('sitemap-ai.xml is stale or incomplete.'); + process.exit(1); + } + } + + process.exit(0); +} + +if (require.main === module) { + main(); +} + +module.exports = { + ROUTE_DEPENDENCIES, + buildEntries, + buildXml, + getDependencyLastModified, +}; diff --git a/operations/tests/contracts-validator-contract.js b/operations/tests/contracts-validator-contract.js new file mode 100644 index 000000000..32ec647bb --- /dev/null +++ b/operations/tests/contracts-validator-contract.js @@ -0,0 +1,276 @@ +#!/usr/bin/env node +/** + * Shared validator contract for contracts recovery tests. + * + * This module keeps smoke and browser validators on the same fresh bundle by: + * - persisting the resolved base URL for the current validation session + * - starting Mintlify on a fresh, non-common port when no live session exists + * - refusing to fall back to ambient common-port reuse + */ + +const crypto = require('crypto'); +const fs = require('fs'); +const http = require('http'); +const net = require('net'); +const os = require('os'); +const path = require('path'); +const { execSync } = require('child_process'); + +function getRepoRoot() { + try { + return execSync('git rev-parse --show-toplevel', { + encoding: 'utf8', + cwd: process.cwd() + }).trim(); + } catch (_error) { + return process.cwd(); + } +} + +const REPO_ROOT = getRepoRoot(); +const REPO_KEY = crypto.createHash('sha1').update(REPO_ROOT).digest('hex').slice(0, 12); +const HTTP_PROBE_TIMEOUT_MS = Number.parseInt(process.env.CONTRACTS_PROBE_TIMEOUT_MS || '30000', 10); +const HTTP_PROBE_MAX_ATTEMPTS = Number.parseInt(process.env.CONTRACTS_PROBE_MAX_ATTEMPTS || '10', 10); +const HTTP_PROBE_RETRY_INTERVAL_MS = Number.parseInt(process.env.CONTRACTS_PROBE_RETRY_INTERVAL_MS || '2000', 10); +const CONTRACTS_SCOPE_PREFIXES = [ + 'v2/about/resources/livepeer-contract-addresses', + 'v2/about/livepeer-protocol/blockchain-contracts', + 'v2/resources/references/contract-addresses', + 'v2/gateways/resources/reference/technical/contract-addresses', + 'v2/orchestrators/resources/reference/technical/contract-addresses', + 'snippets/composables/pages/canonical', + 'snippets/data/contract-addresses', + 'v2/about/livepeer-protocol/data', +].join(','); +const CONTRACTS_SCOPE_TABS = 'About,Resource HUB,Gateways,Orchestrators'; +const SESSION_FILE = path.join(os.tmpdir(), `contracts-validation-session-${REPO_KEY}.json`); +const PID_FILE = path.join(os.tmpdir(), `mint-dev-test-${REPO_KEY}.pid`); +const SERVER_MANAGER_PATH = path.join(REPO_ROOT, '.githooks', 'server-manager.js'); + +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function normalizeBaseUrl(value) { + const raw = String(value || '').trim(); + return raw ? raw.replace(/\/$/, '') : ''; +} + +function normalizeProbePath(probePath) { + const raw = String(probePath || '').trim(); + if (!raw) { + return '/'; + } + return raw.startsWith('/') ? raw : `/${raw}`; +} + +function readSession() { + if (!fs.existsSync(SESSION_FILE)) { + return null; + } + + try { + const parsed = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf8')); + const baseUrl = normalizeBaseUrl(parsed?.baseUrl); + if (!baseUrl) { + return null; + } + + return { + baseUrl, + pid: Number.isInteger(parsed?.pid) ? parsed.pid : null, + startedAt: String(parsed?.startedAt || ''), + source: String(parsed?.source || '') + }; + } catch (_error) { + return null; + } +} + +function writeSession(session) { + const payload = { + baseUrl: normalizeBaseUrl(session?.baseUrl), + pid: Number.isInteger(session?.pid) ? session.pid : null, + startedAt: String(session?.startedAt || new Date().toISOString()), + source: String(session?.source || 'fresh') + }; + + fs.writeFileSync(SESSION_FILE, `${JSON.stringify(payload, null, 2)}\n`); +} + +function readPidFile() { + if (!fs.existsSync(PID_FILE)) { + return null; + } + + try { + const pid = parseInt(fs.readFileSync(PID_FILE, 'utf8').trim(), 10); + return Number.isInteger(pid) ? pid : null; + } catch (_error) { + return null; + } +} + +function deletePidFile() { + if (fs.existsSync(PID_FILE)) { + try { + fs.unlinkSync(PID_FILE); + } catch (_error) { + // Ignore stale PID cleanup failures. + } + } +} + +function loadServerManager() { + const resolved = require.resolve(SERVER_MANAGER_PATH); + if (require.cache[resolved]) { + delete require.cache[resolved]; + } + return require(SERVER_MANAGER_PATH); +} + +function getConfiguredBaseUrl() { + return ( + normalizeBaseUrl(process.env.CONTRACTS_TEST_BASE_URL) || + normalizeBaseUrl(process.env.MINT_BASE_URL) + ); +} + +function pickFreePort() { + return new Promise((resolve, reject) => { + const server = net.createServer(); + server.unref(); + server.on('error', reject); + server.listen(0, '127.0.0.1', () => { + const address = server.address(); + const port = address && typeof address === 'object' ? address.port : 0; + server.close(() => resolve(port)); + }); + }); +} + +function isUrlReachable(baseUrl, probePath) { + const normalizedBaseUrl = normalizeBaseUrl(baseUrl); + const normalizedProbePath = normalizeProbePath(probePath); + if (!normalizedBaseUrl) { + return Promise.resolve(false); + } + + const targetUrl = new URL(normalizedProbePath, `${normalizedBaseUrl}/`); + + return new Promise((resolve) => { + const req = http.get( + targetUrl, + { timeout: HTTP_PROBE_TIMEOUT_MS }, + (res) => { + if (!Number.isInteger(res.statusCode)) { + resolve(false); + return; + } + + if (normalizedProbePath !== '/' && res.statusCode === 404) { + resolve(false); + return; + } + + resolve(res.statusCode > 0); + } + ); + + req.on('error', () => resolve(false)); + req.on('timeout', () => { + req.destroy(); + resolve(false); + }); + }); +} + +async function waitForUrlReachable(baseUrl, probePath, options = {}) { + const attempts = Number.isInteger(options.attempts) ? options.attempts : HTTP_PROBE_MAX_ATTEMPTS; + const intervalMs = Number.isInteger(options.intervalMs) ? options.intervalMs : HTTP_PROBE_RETRY_INTERVAL_MS; + + for (let attempt = 0; attempt < attempts; attempt += 1) { + if (await isUrlReachable(baseUrl, probePath)) { + return true; + } + + if (attempt < attempts - 1) { + await sleep(intervalMs); + } + } + + return false; +} + +async function ensureFreshBundleBaseUrl(options = {}) { + const probePath = normalizeProbePath(options.probePath); + const explicitBaseUrl = normalizeBaseUrl(options.baseUrl); + const configuredBaseUrl = explicitBaseUrl || getConfiguredBaseUrl(); + + if (configuredBaseUrl) { + const configuredReachable = await waitForUrlReachable(configuredBaseUrl, probePath); + if (!configuredReachable) { + console.warn( + `Configured contracts base URL did not answer the preflight probe at ${probePath}; continuing with browser validation: ${configuredBaseUrl}` + ); + } + + process.env.CONTRACTS_TEST_SCOPED = '1'; + process.env.CONTRACTS_TEST_BASE_URL = configuredBaseUrl; + process.env.MINT_BASE_URL = configuredBaseUrl; + writeSession({ + baseUrl: configuredBaseUrl, + pid: readPidFile(), + startedAt: new Date().toISOString(), + source: configuredReachable + ? explicitBaseUrl + ? 'explicit' + : 'configured' + : explicitBaseUrl + ? 'explicit-unverified' + : 'configured-unverified' + }); + return configuredBaseUrl; + } + + if (!options.fresh) { + const session = readSession(); + if (session?.baseUrl && (await waitForUrlReachable(session.baseUrl, probePath))) { + process.env.CONTRACTS_TEST_BASE_URL = session.baseUrl; + process.env.MINT_BASE_URL = session.baseUrl; + return session.baseUrl; + } + } + + const port = await pickFreePort(); + const freshBaseUrl = `http://localhost:${port}`; + + process.env.CONTRACTS_TEST_SCOPED = '1'; + process.env.CONTRACTS_TEST_BASE_URL = freshBaseUrl; + process.env.MINT_BASE_URL = freshBaseUrl; + process.env.MINT_SCOPE_TABS = process.env.MINT_SCOPE_TABS || CONTRACTS_SCOPE_TABS; + if (!process.env.MINT_SCOPE_TABS) { + process.env.MINT_SCOPE_PREFIXES = process.env.MINT_SCOPE_PREFIXES || CONTRACTS_SCOPE_PREFIXES; + } + deletePidFile(); + + const serverManager = loadServerManager(); + await serverManager.ensureServerRunning({ probePath, allowCommonPorts: false }); + + const actualBaseUrl = normalizeBaseUrl(serverManager.getServerUrl()); + writeSession({ + baseUrl: actualBaseUrl, + pid: readPidFile(), + startedAt: new Date().toISOString(), + source: 'fresh' + }); + + return actualBaseUrl; +} + +module.exports = { + ensureFreshBundleBaseUrl, + normalizeBaseUrl, + normalizeProbePath, + readSession +}; diff --git a/operations/tests/playwright-blockchain-contracts.js b/operations/tests/playwright-blockchain-contracts.js new file mode 100644 index 000000000..c2e769206 --- /dev/null +++ b/operations/tests/playwright-blockchain-contracts.js @@ -0,0 +1,193 @@ +#!/usr/bin/env node +/** + * @script playwright-blockchain-contracts + * @type automation + * @concern testing + * @niche render/page + * @description CP-7: Verifies the blockchain-contracts page renders from generated pipeline data, + * separates L2Migrator proxy and target addresses, and avoids stale hardcoded status claims. + * @usage node operations/tests/playwright-blockchain-contracts.js + */ + +const fs = require('fs'); +const path = require('path'); +const puppeteer = require('puppeteer'); +const { + ensureFreshBundleBaseUrl +} = require('./contracts-validator-contract'); + +const PAGE_DATA = JSON.parse( + fs.readFileSync( + path.join(__dirname, '..', '..', 'snippets', 'data', 'contract-addresses', 'blockchainContractsPageData.json'), + 'utf8' + ) +); +const L2_MIGRATOR = PAGE_DATA.contracts['l2-migrator']; +const MERKLE_SNAPSHOT = PAGE_DATA.contracts['merkle-snapshot']; +const FAUCET = PAGE_DATA.contracts['livepeer-token-faucet']; +const STALE_TEXT = [ + 'Last active Feb 2026', + 'No activity since deployment', + '~600 transactions', +]; + +async function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function normalizeError(message) { + return String(message || '').replace(/\s+/g, ' ').trim(); +} + +function filterNoise(errors) { + return errors + .map(normalizeError) + .filter(Boolean) + .filter( + (message) => + !message.includes('favicon') && + !message.includes('rss.xml') && + !message.includes('apple-touch-icon') && + !message.includes('Minified React error #418') && + !message.includes('Failed to load resource: the server responded with a status of 404') + ); +} + +async function closePageQuietly(page) { + if (!page) { + return; + } + + try { + if (!page.isClosed()) { + await page.close(); + } + } catch (error) { + const message = normalizeError(error.message); + if ( + !message.includes('Target.closeTarget') && + !message.includes('Session closed') && + !message.includes('Connection closed') + ) { + throw error; + } + } +} + +async function closeBrowserQuietly(browser) { + if (!browser) { + return; + } + + try { + await browser.close(); + } catch (error) { + const message = normalizeError(error.message); + if ( + !message.includes('Target.closeTarget') && + !message.includes('Session closed') && + !message.includes('Connection closed') + ) { + throw error; + } + } +} + +async function waitForPage(page) { + await page.waitForFunction( + () => { + const bodyText = document.body?.innerText || ''; + const h1Text = document.querySelector('h1')?.textContent?.trim() || ''; + return ( + h1Text.includes('Blockchain Contracts') && + bodyText.includes('Core Protocol Contracts') && + bodyText.includes('L2Migrator') + ); + }, + { timeout: 60000 } + ); +} + +async function main() { + const baseUrl = await ensureFreshBundleBaseUrl({ + probePath: '/v2/about/livepeer-protocol/blockchain-contracts' + }); + const pageUrl = `${baseUrl}/v2/about/livepeer-protocol/blockchain-contracts`; + const browser = await puppeteer.launch({ headless: 'new' }); + const page = await browser.newPage(); + const errors = []; + page.on('pageerror', (err) => errors.push(`${err.message}${err.stack ? ` | ${normalizeError(err.stack)}` : ''}`)); + page.on('console', (msg) => { + if (msg.type() === 'error') { + const location = typeof msg.location === 'function' ? msg.location() : null; + const locationSuffix = + location?.url ? ` @ ${location.url}:${location.lineNumber || 0}:${location.columnNumber || 0}` : ''; + errors.push(`${msg.text()}${locationSuffix}`); + } + }); + + try { + await page.goto(pageUrl, { waitUntil: 'domcontentloaded', timeout: 60000 }); + await waitForPage(page); + await page.evaluate(() => { + document.querySelectorAll('details').forEach((element) => { + element.open = true; + }); + }); + await sleep(1500); + + const bodyText = await page.$eval('body', (el) => el.textContent || ''); + const hasConceptSections = + bodyText.includes('Core Protocol Contracts') && + bodyText.includes('Governance Contracts') && + bodyText.includes('Migration Contracts'); + const hasL2MigratorAddress = bodyText.includes(L2_MIGRATOR.proxyAddress); + const hasMerkleSnapshotAddress = bodyText.includes(MERKLE_SNAPSHOT.currentAddress); + const hasUnsupportedFaucetNote = bodyText.includes(FAUCET.unsupportedNote); + const hasGeneratedFunctions = + bodyText.includes('claimStake') && + bodyText.includes('verify') && + bodyText.includes('stage') && + bodyText.includes('execute'); + const hasSourceLinks = await page.evaluate(() => + Array.from(document.querySelectorAll('a[href]')).some((link) => + link.href.includes('github.com/livepeer/') || link.href.includes('raw.githubusercontent.com/livepeer/') + ) + ); + const hasNoStaleText = STALE_TEXT.every((text) => !bodyText.includes(text)); + const unexpectedErrors = filterNoise(errors); + + console.log('\n── CP-7 Results ──────────────────────────────────'); + console.log(`Page URL: ${pageUrl}`); + console.log(`Concept sections OK: ${hasConceptSections}`); + console.log(`L2Migrator address OK: ${hasL2MigratorAddress}`); + console.log(`MerkleSnapshot OK: ${hasMerkleSnapshotAddress}`); + console.log(`Faucet unsupported: ${hasUnsupportedFaucetNote}`); + console.log(`Functions generated: ${hasGeneratedFunctions}`); + console.log(`Source links present: ${hasSourceLinks}`); + console.log(`No stale text: ${hasNoStaleText}`); + if (unexpectedErrors.length > 0) { + console.log('Unexpected errors:'); + unexpectedErrors.forEach((error) => console.log(` - ${error}`)); + } + console.log('──────────────────────────────────────────────────'); + + const passed = + hasConceptSections && + hasL2MigratorAddress && + hasMerkleSnapshotAddress && + hasUnsupportedFaucetNote && + hasGeneratedFunctions && + hasSourceLinks && + hasNoStaleText && + unexpectedErrors.length === 0; + + console.log(passed ? 'CP-7 PASS — blockchain-contracts renders from generated pipeline data.' : 'CP-7 FAIL — see above.'); + process.exit(passed ? 0 : 1); + } finally { + await closePageQuietly(page); + await closeBrowserQuietly(browser); + } +} + +main(); diff --git a/operations/tests/playwright-contract-addresses.js b/operations/tests/playwright-contract-addresses.js new file mode 100644 index 000000000..e818814ab --- /dev/null +++ b/operations/tests/playwright-contract-addresses.js @@ -0,0 +1,449 @@ +/** + * @script playwright-contract-addresses + * @type automation + * @concern testing + * @niche render/page + * @description CP-6: Verifies the canonical contract-addresses reference page, its composable-import wrappers, + * the embedded verifier widget, and the legacy redirect against a local Mint preview. + * @usage node operations/tests/playwright-contract-addresses.js + */ + +const puppeteer = require('puppeteer'); +const { + ensureFreshBundleBaseUrl +} = require('./contracts-validator-contract'); + +const CANONICAL_ROUTE = '/v2/about/resources/livepeer-contract-addresses'; +const VERIFIER_FRAGMENT = '#verifier-widget-verify-contract-address'; +const RESOURCE_HUB_ROUTE = '/v2/resources/references/contract-addresses'; +const GATEWAYS_ROUTE = '/v2/gateways/resources/reference/technical/contract-addresses'; +const ORCHESTRATORS_ROUTE = '/v2/orchestrators/resources/reference/technical/contract-addresses'; +const LEGACY_REDIRECT_ROUTE = '/references/contract-addresses'; +const EXPECTED_LOOKUP_ADDRESSES = { + arbitrumOne: '0x289ba1701c2f088cf0faf8b3705246331cb8a839', + ethereumMainnet: '0x58b6a8a3302369daec383334672404ee733ab239', +}; + +function normalizeError(message) { + return String(message || '').replace(/\s+/g, ' ').trim(); +} + +function filterNoise(errors) { + return errors + .map(normalizeError) + .filter(Boolean) + .filter( + (message) => + !message.includes('favicon') && + !message.includes('rss.xml') && + !message.includes('apple-touch-icon') && + !message.includes('Minified React error #418') && + !message.includes('Failed to load resource: the server responded with a status of 404') + ); +} + +function isScopedRecoveryValidation() { + return [ + process.env.CONTRACTS_TEST_SCOPED, + process.env.MINT_SCOPE_PREFIXES, + process.env.MINT_SCOPE_TABS, + process.env.LPD_MINT_SCOPE_PREFIXES, + ].some((value) => Boolean(String(value || '').trim())); +} + +async function closePageQuietly(page) { + if (!page) { + return; + } + + try { + if (!page.isClosed()) { + await page.close(); + } + } catch (error) { + const message = normalizeError(error.message); + if ( + !message.includes('Target.closeTarget') && + !message.includes('Session closed') && + !message.includes('Connection closed') + ) { + throw error; + } + } +} + +async function closeBrowserQuietly(browser) { + if (!browser) { + return; + } + + try { + await browser.close(); + } catch (error) { + const message = normalizeError(error.message); + if ( + !message.includes('Target.closeTarget') && + !message.includes('Session closed') && + !message.includes('Connection closed') + ) { + throw error; + } + } +} + +async function clickButtonByText(page, text) { + const buttons = await page.$$('button'); + for (const button of buttons) { + const buttonText = await page.evaluate( + (element) => element.textContent.trim(), + button + ); + if (buttonText === text) { + await button.click(); + return true; + } + } + + return false; +} + +async function waitForReferencePage(page) { + await page.waitForFunction( + () => { + const bodyText = document.body?.innerText || ''; + const h1Text = document.querySelector('h1')?.textContent?.trim() || ''; + return ( + h1Text.includes('Contract Addresses') && + bodyText.includes('Active Contract Addresses') && + bodyText.includes('Historical Contract Addresses') + ); + }, + { timeout: 60000 } + ); + await page.waitForFunction( + () => document.querySelectorAll('table').length >= 2, + { timeout: 60000 } + ); +} + +async function testWidgetFlows(page) { + const initialLookupDisabled = await page.evaluate(() => { + const button = Array.from(document.querySelectorAll('button')).find( + (element) => element.textContent.trim() === 'Look up' + ); + return button ? button.disabled : null; + }); + + await page.select('select[aria-label="Contract name"]', 'LivepeerToken'); + await page.waitForFunction(() => { + const button = Array.from(document.querySelectorAll('button')).find( + (element) => element.textContent.trim() === 'Look up' + ); + return Boolean(button) && button.disabled === false; + }); + + await clickButtonByText(page, 'Look up'); + await page.waitForFunction( + ({ arbitrumOne, ethereumMainnet }) => { + const text = document.body?.innerText || ''; + return ( + text.includes('MATCH') && + text.includes(arbitrumOne) && + text.includes(ethereumMainnet) && + text.includes('Arbitrum One') && + text.includes('Ethereum Mainnet') + ); + }, + { timeout: 45000 }, + EXPECTED_LOOKUP_ADDRESSES + ); + + const lookupWidgetText = await page.$eval('body', (element) => element.innerText || ''); + const lookupDualChain = + lookupWidgetText.includes(EXPECTED_LOOKUP_ADDRESSES.arbitrumOne) && + lookupWidgetText.includes(EXPECTED_LOOKUP_ADDRESSES.ethereumMainnet) && + lookupWidgetText.includes('Arbitrum One') && + lookupWidgetText.includes('Ethereum Mainnet'); + + await clickButtonByText(page, 'Verify address'); + await page.waitForSelector('input[aria-label="Contract address"]', { + timeout: 10000, + }); + await page.type( + 'input[aria-label="Contract address"]', + EXPECTED_LOOKUP_ADDRESSES.ethereumMainnet + ); + await clickButtonByText(page, 'Verify'); + await page.waitForFunction( + (expectedAddress) => { + const text = document.body?.innerText || ''; + return ( + text.includes('MATCH') && + text.includes(expectedAddress) && + text.includes('LivepeerToken') && + text.includes('Ethereum Mainnet') + ); + }, + { timeout: 45000 }, + EXPECTED_LOOKUP_ADDRESSES.ethereumMainnet + ); + + const verifyWidgetText = await page.$eval('body', (element) => element.innerText || ''); + const verifyCrossReference = + verifyWidgetText.includes(EXPECTED_LOOKUP_ADDRESSES.ethereumMainnet) && + verifyWidgetText.includes('LivepeerToken') && + verifyWidgetText.includes('Ethereum Mainnet'); + + return { + initialLookupDisabled, + lookupDualChain, + verifyCrossReference, + }; +} + +async function openPage(browser, url) { + const page = await browser.newPage(); + const errors = []; + page.on('pageerror', (err) => errors.push(`${err.message}${err.stack ? ` | ${normalizeError(err.stack)}` : ''}`)); + page.on('console', (msg) => { + if (msg.type() === 'error') { + const location = typeof msg.location === 'function' ? msg.location() : null; + const locationSuffix = + location?.url ? ` @ ${location.url}:${location.lineNumber || 0}:${location.columnNumber || 0}` : ''; + errors.push(`${msg.text()}${locationSuffix}`); + } + }); + await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 60000 }); + return { page, errors }; +} + +async function testReferencePage(browser, { name, url, expectRedirect, canonicalUrl }) { + let lastResult = null; + + for (let attempt = 0; attempt < 3; attempt += 1) { + const { page, errors } = await openPage(browser, url); + + try { + await waitForReferencePage(page); + + const finalUrl = page.url(); + const redirectOk = expectRedirect ? finalUrl === canonicalUrl : true; + const bodyText = await page.$eval('body', (el) => el.textContent || ''); + const hasContent = bodyText.length > 200; + const tableCount = await page.evaluate(() => document.querySelectorAll('table').length); + const hasProxyHeaderContract = await page.evaluate(() => { + const tables = Array.from(document.querySelectorAll('table')); + return tables.some((table) => { + const headers = Array.from(table.querySelectorAll('thead th')).map((cell) => + cell.textContent.trim() + ); + return JSON.stringify(headers) === JSON.stringify([ + 'Name', + 'Proxy', + 'Proxy Address', + 'Chain', + 'Target', + 'Target Address', + ]); + }); + }); + const hasHistoricalSection = bodyText.includes('Historical Contract Addresses'); + const hasManualVerificationSection = bodyText.includes('No-Trust On-chain Address Verification'); + const hasAddress = /0x[0-9a-fA-F]{10,}/.test(bodyText); + const hasVerifierLink = await page.evaluate((verifierFragment) => + Array.from(document.querySelectorAll('a[href]')).some((link) => + link.getAttribute('href') === verifierFragment || link.href.endsWith(verifierFragment) + ), + VERIFIER_FRAGMENT + ); + const hasWidgetControls = await page.evaluate(() => Boolean(document.querySelector('select[aria-label="Contract name"]'))); + const hasLookUpButton = await page.evaluate(() => + Array.from(document.querySelectorAll('button')).some( + (button) => button.textContent.trim() === 'Look up' + ) + ); + const widget = url === canonicalUrl ? await testWidgetFlows(page) : null; + const unexpectedErrors = filterNoise(errors); + + lastResult = { + kind: 'reference', + name, + url, + finalUrl, + passed: + hasContent && + tableCount >= 2 && + hasAddress && + hasProxyHeaderContract && + hasHistoricalSection && + hasManualVerificationSection && + hasVerifierLink && + hasWidgetControls === true && + hasLookUpButton === true && + (widget + ? widget.initialLookupDisabled === true && + widget.lookupDualChain === true && + widget.verifyCrossReference === true + : true) && + redirectOk && + unexpectedErrors.length === 0, + hasContent, + tableCount, + hasAddress, + hasProxyHeaderContract, + hasHistoricalSection, + hasManualVerificationSection, + hasVerifierLink, + hasWidgetControls, + hasLookUpButton, + widget, + redirectOk, + bodyLength: bodyText.length, + unexpectedErrors, + rawErrors: filterNoise(errors), + }; + } catch (error) { + lastResult = { + kind: 'reference', + name, + url, + finalUrl: null, + passed: false, + hasContent: false, + tableCount: 0, + hasAddress: false, + hasProxyHeaderContract: false, + hasHistoricalSection: false, + hasManualVerificationSection: false, + hasVerifierLink: false, + hasWidgetControls: null, + hasLookUpButton: null, + widget: null, + redirectOk: false, + bodyLength: 0, + unexpectedErrors: [normalizeError(error.message)], + rawErrors: filterNoise(errors), + }; + } finally { + await closePageQuietly(page); + } + + const timedOut = lastResult.unexpectedErrors.some((message) => message.includes('Waiting failed')); + if (lastResult.passed || !timedOut || attempt === 2) { + return lastResult; + } + } + + return lastResult; +} + +async function main() { + const baseUrl = await ensureFreshBundleBaseUrl({ + probePath: CANONICAL_ROUTE + }); + const canonicalUrl = `${baseUrl}${CANONICAL_ROUTE}`; + const pages = [ + { + kind: 'reference', + name: 'contract-addresses (canonical)', + url: canonicalUrl, + canonicalUrl, + expectRedirect: false, + }, + { + kind: 'reference', + name: 'contract-addresses (resource hub)', + url: `${baseUrl}${RESOURCE_HUB_ROUTE}`, + canonicalUrl, + expectRedirect: false, + }, + { + kind: 'reference', + name: 'contract-addresses (gateways)', + url: `${baseUrl}${GATEWAYS_ROUTE}`, + canonicalUrl, + expectRedirect: false, + }, + { + kind: 'reference', + name: 'contract-addresses (orchestrators)', + url: `${baseUrl}${ORCHESTRATORS_ROUTE}`, + canonicalUrl, + expectRedirect: false, + }, + ]; + + if (!isScopedRecoveryValidation()) { + pages.push({ + kind: 'reference', + name: 'contract-addresses (legacy redirect)', + url: `${baseUrl}${LEGACY_REDIRECT_ROUTE}`, + canonicalUrl, + expectRedirect: true, + }); + } + + const results = []; + + for (const pageSpec of pages) { + console.log(`Testing: ${pageSpec.name} ...`); + const browser = await puppeteer.launch({ + headless: 'new', + args: ['--no-sandbox', '--disable-setuid-sandbox'], + }); + + try { + const result = await testReferencePage(browser, pageSpec); + results.push(result); + } finally { + await closeBrowserQuietly(browser); + } + } + + console.log('\n── CP-6 Results ──────────────────────────────────'); + let allPassed = true; + for (const result of results) { + const status = result.passed ? 'PASS' : 'FAIL'; + console.log(`\n[${status}] ${result.name}`); + console.log(` URL: ${result.url}`); + console.log(` Final URL: ${result.finalUrl}`); + console.log(` Body length: ${result.bodyLength}`); + + if (result.kind === 'reference') { + console.log(` Tables: ${result.tableCount}`); + console.log(` Has address: ${result.hasAddress}`); + console.log(` Proxy header: ${result.hasProxyHeaderContract}`); + console.log(` Historical: ${result.hasHistoricalSection}`); + console.log(` Manual steps: ${result.hasManualVerificationSection}`); + console.log(` Verifier link:${result.hasVerifierLink}`); + console.log(` Widget select:${result.hasWidgetControls}`); + console.log(` Widget button:${result.hasLookUpButton}`); + if (result.widget) { + console.log(` Lookup init disabled: ${result.widget.initialLookupDisabled}`); + console.log(` Lookup dual-chain: ${result.widget.lookupDualChain}`); + console.log(` Verify cross-ref: ${result.widget.verifyCrossReference}`); + } + console.log(` Redirect OK: ${result.redirectOk}`); + } + + if (result.unexpectedErrors.length > 0) { + console.log(' Unexpected errors:'); + result.unexpectedErrors.forEach((error) => console.log(` - ${error}`)); + } + if (result.rawErrors.length > 0) { + console.log(' Raw errors seen:'); + result.rawErrors.forEach((error) => console.log(` - ${error}`)); + } + if (!result.passed) allPassed = false; + } + + console.log('\n──────────────────────────────────────────────────'); + console.log( + allPassed + ? 'CP-6 PASS — contracts reference surfaces and embedded verifier render correctly.' + : 'CP-6 FAIL — see above.' + ); + process.exit(allPassed ? 0 : 1); +} + +main(); diff --git a/operations/tests/unit/contracts-addresses-pipeline.test.js b/operations/tests/unit/contracts-addresses-pipeline.test.js new file mode 100644 index 000000000..381486f01 --- /dev/null +++ b/operations/tests/unit/contracts-addresses-pipeline.test.js @@ -0,0 +1,816 @@ +#!/usr/bin/env node +/** + * @script contracts-addresses-pipeline.test + * @category validator + * @purpose qa:contracts-registry + * @scope tests/unit, .github/scripts/fetch-contract-addresses.js, operations/scripts/automations/content/data/contracts/, .github/workflows/update-contract-addresses*.yml, operations/scripts/generators/content/seo/generate-ai-sitemap.js, snippets/components/integrators/feeds/ContractVerifier.jsx, snippets/data/contract-addresses/, v2/about + * @owner docs + * @needs E-R12, E-R14 + * @purpose-statement Regression tests for the contracts proof catalog, generated registry output, shared contracts surface wiring, blocking anomaly behavior, workflow cadence alignment, and route freshness dependencies. + * @pipeline P1 (commit, via run-all) + * @usage node operations/tests/unit/contracts-addresses-pipeline.test.js + */ + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); + +const { + loadContractProofCatalog, + resolveAuthority, + buildChainPayload, +} = require('../../../.github/scripts/fetch-contract-addresses.js'); +const { + buildValidationReport, +} = require('../../../operations/scripts/automations/content/data/contracts/pipeline.js'); +const { + BLOCKING_BRANCH_DIFF_TYPES, + CONTRACTS_PIPELINE_CADENCE, +} = require('../../../operations/scripts/automations/content/data/contracts/constants.js'); +const { + buildBlockchainContractPageSpec, +} = require('../../../operations/scripts/automations/content/data/contracts/spec.js'); +const { + buildContractVerifierChainData, + isContractVerifierControllerLookupEligible, +} = require('../../../snippets/components/integrators/feeds/contractVerifierData.cjs'); +const { + ROUTE_DEPENDENCIES, +} = require('../../../operations/scripts/generators/content/seo/generate-ai-sitemap.js'); + +const REPO_ROOT = path.resolve(__dirname, '../../..'); +const GENERATED_JSON_PATH = path.join( + REPO_ROOT, + 'snippets', + 'data', + 'contract-addresses', + 'contractAddressesData.json' +); +const GENERATED_JSX_PATH = path.join( + REPO_ROOT, + 'snippets', + 'data', + 'contract-addresses', + 'contractAddressesData.jsx' +); +const BLOCKCHAIN_PAGE_JSON_PATH = path.join( + REPO_ROOT, + 'snippets', + 'data', + 'contract-addresses', + 'blockchainContractsPageData.json' +); +const BLOCKCHAIN_PAGE_JSX_PATH = path.join( + REPO_ROOT, + 'snippets', + 'data', + 'contract-addresses', + 'blockchainContractsPageData.jsx' +); +const CONTRACTS_DATA_ADAPTER_PATH = path.join( + REPO_ROOT, + 'snippets', + 'data', + 'contract-addresses', + 'index.jsx' +); +const CANONICAL_COMPOSABLE_PATH = path.join( + REPO_ROOT, + 'snippets', + 'composables', + 'pages', + 'canonical', + 'livepeer-contract-addresses.mdx' +); +const VERIFIER_COMPOSABLE_PATH = path.join( + REPO_ROOT, + 'snippets', + 'composables', + 'pages', + 'canonical', + 'verify-contract-addresses.mdx' +); +const VIEW_MODEL_ADAPTER_PATH = path.join( + REPO_ROOT, + 'snippets', + 'data', + 'contract-addresses', + 'view-model.jsx' +); +const BLOCKCHAIN_PAGE_SPEC_PATH = path.join( + REPO_ROOT, + 'operations', + 'scripts', + 'automations', + 'content', + 'data', + 'contracts', + 'blockchain-page-spec.js' +); +const CANONICAL_PAGE_PATH = path.join( + REPO_ROOT, + 'v2', + 'about', + 'resources', + 'livepeer-contract-addresses.mdx' +); +const RESOURCE_HUB_PAGE_PATH = path.join( + REPO_ROOT, + 'v2', + 'resources', + 'references', + 'contract-addresses.mdx' +); +const GATEWAYS_PAGE_PATH = path.join( + REPO_ROOT, + 'v2', + 'gateways', + 'resources', + 'reference', + 'technical', + 'contract-addresses.mdx' +); +const ORCHESTRATORS_PAGE_PATH = path.join( + REPO_ROOT, + 'v2', + 'orchestrators', + 'resources', + 'reference', + 'technical', + 'contract-addresses.mdx' +); +const BLOCKCHAIN_PAGE_PATH = path.join( + REPO_ROOT, + 'v2', + 'about', + 'livepeer-protocol', + 'blockchain-contracts.mdx' +); +const DOCS_JSON_PATH = path.join(REPO_ROOT, 'docs.json'); +const CONTRACTS_CONSTANTS_PATH = path.join( + REPO_ROOT, + 'operations', + 'scripts', + 'automations', + 'content', + 'data', + 'contracts', + 'constants.js' +); +const MAIN_WORKFLOW_PATH = path.join( + REPO_ROOT, + '.github', + 'workflows', + 'update-contract-addresses.yml' +); +const SHADOW_WORKFLOW_PATH = path.join( + REPO_ROOT, + '.github', + 'workflows', + 'update-contract-addresses-shadow.yml' +); + +const STALE_ARBITRUM_MINTER_V1 = '0x4969dcCF5186e1c49411638fc8A2a020Fdab752E'.toLowerCase(); +const STALE_BONDING_VOTES_TARGET = '0x1561fC5F7Efc049476224005DFf38256dccfc509'.toLowerCase(); +const EXPECTED_ETH_LEGACY_UTILITY_DETAILS = { + GenesisManager: '0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf', + MerkleMine: '0x8e306b005773bee6ba6a6e8972bc79d766cc15c8', + MultiMerkleMine: '0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f', + Refunder: '0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2', + SortedDoublyLL: '0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a', +}; +const EXPECTED_ETH_LEGACY_UTILITY_NAMES = Object.keys(EXPECTED_ETH_LEGACY_UTILITY_DETAILS); +const EXPECTED_ETH_HISTORICAL_GENESIS_ADDRESS = '0x289ba1701c2f088cf0faf8b3705246331cb8a839'; + +let errors = []; +let total = 0; + +function runCase(name, fn) { + total += 1; + try { + fn(); + console.log(` ✓ ${name}`); + } catch (error) { + errors.push({ + file: 'operations/tests/unit/contracts-addresses-pipeline.test.js', + line: 1, + rule: 'contracts-addresses-pipeline', + message: `${name}: ${error.message}`, + }); + } +} + +function readText(filePath) { + return fs.readFileSync(filePath, 'utf8'); +} + +function readJson(filePath) { + return JSON.parse(readText(filePath)); +} + +function loadGeneratedJson() { + assert.ok(fs.existsSync(GENERATED_JSON_PATH), 'generated contractAddressesData.json is missing'); + return readJson(GENERATED_JSON_PATH); +} + +function loadBlockchainPageJson() { + assert.ok(fs.existsSync(BLOCKCHAIN_PAGE_JSON_PATH), 'generated blockchainContractsPageData.json is missing'); + return readJson(BLOCKCHAIN_PAGE_JSON_PATH); +} + +function runTests() { + errors = []; + total = 0; + + console.log('🧪 Contracts Addresses Pipeline Unit Tests'); + + runCase('proof catalog loads and excludes docs-local fixed address truth', () => { + const catalog = loadContractProofCatalog(); + assert.ok(Array.isArray(catalog.deployments) && catalog.deployments.length > 0, 'catalog should contain deployments'); + assert.ok( + Array.isArray(catalog._meta?.latestResolutionPolicy) && catalog._meta.latestResolutionPolicy.length > 0, + 'catalog should publish latest-resolution policy' + ); + assert.strictEqual( + catalog.deployments.some((deployment) => deployment.addressStrategy?.kind === 'fixed'), + false, + 'proof catalog must not contain fixed local address truth' + ); + }); + + runCase('resolveAuthority selects the latest governor version instead of the base key', () => { + const governorChain = { + minter: '0x1111111111111111111111111111111111111111', + minterV2: '0x2222222222222222222222222222222222222222', + minterV10: '0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + }; + + const resolved = resolveAuthority( + { + kind: 'governor-versioned-latest', + baseKey: 'minter', + baseVersion: 'V1', + prefix: 'minterV', + }, + governorChain + ); + + assert.strictEqual(resolved.address, governorChain.minterV10); + assert.strictEqual(resolved.version, 'V10'); + assert.strictEqual(resolved.authorityKind, 'governor-manifest'); + assert.strictEqual(resolved.sourceKey, 'minterV10'); + }); + + runCase('buildChainPayload keeps current implementations out of the active table', () => { + const payload = buildChainPayload( + [ + { + name: 'BondingManager', + address: '0x1000000000000000000000000000000000000001', + category: 'core', + lifecycle: 'active', + type: 'proxy', + }, + { + name: 'L2Migrator', + address: '0x2000000000000000000000000000000000000002', + category: 'migration', + lifecycle: 'migration_residual', + type: 'proxy', + }, + { + name: 'Controller', + address: '0x3000000000000000000000000000000000000003', + category: 'core', + lifecycle: 'paused', + type: 'standalone', + }, + ], + [ + { + name: 'BondingManager', + address: '0x4000000000000000000000000000000000000004', + category: 'core', + lifecycle: 'historical', + type: 'target', + }, + ], + {}, + {}, + 'deadbeef' + ); + + assert.strictEqual(payload.current, payload.active, 'current should remain an alias of active'); + assert.strictEqual(payload.active.some((entry) => (entry.type || entry.deploymentKind) === 'target'), false); + assert.strictEqual(payload.currentImplementations.length, 1); + assert.strictEqual(payload.currentImplementations[0].address, '0x4000000000000000000000000000000000000004'); + assert.strictEqual(payload.migration_residual[0].name, 'L2Migrator'); + assert.strictEqual(payload.paused[0].name, 'Controller'); + }); + + runCase('generated registry publishes stable root historical payloads without transient diagnostics', () => { + const data = loadGeneratedJson(); + const serialized = JSON.stringify(data); + + assert.ok(data.historical && typeof data.historical === 'object', 'generated registry should publish root historical'); + assert.ok(data.historical.arbitrumOne && typeof data.historical.arbitrumOne === 'object', 'arbitrumOne root historical should be present'); + assert.ok( + Array.isArray(data.historical.ethereumMainnet?.MerkleProof) && data.historical.ethereumMainnet.MerkleProof.length > 0, + 'ethereumMainnet root historical should publish externally revalidated MerkleProof history' + ); + assert.strictEqual( + String(data.historical.ethereumMainnet.MerkleProof[0].address || '').toLowerCase(), + EXPECTED_ETH_HISTORICAL_GENESIS_ADDRESS, + 'ethereumMainnet root historical should preserve the canonical MerkleProof address' + ); + assert.strictEqual( + serialized.includes('"rpcFailures"'), + false, + 'published contracts payload must not serialize transient rpcFailures diagnostics' + ); + }); + + runCase('generated registry excludes stale active rows and target rows from arbitrumOne.active', () => { + const data = loadGeneratedJson(); + const active = data.arbitrumOne?.active || []; + const implementations = data.arbitrumOne?.currentImplementations || []; + + assert.ok(active.length > 0, 'arbitrumOne.active should not be empty'); + assert.strictEqual( + active.some((entry) => String(entry.address || '').toLowerCase() === STALE_ARBITRUM_MINTER_V1), + false, + 'stale Arbitrum Minter V1 must not appear in active' + ); + assert.strictEqual( + active.some((entry) => String(entry.address || '').toLowerCase() === STALE_BONDING_VOTES_TARGET), + false, + 'stale BondingVotes target must not appear in active' + ); + assert.strictEqual( + active.some((entry) => (entry.type || entry.deploymentKind) === 'target'), + false, + 'active table must not contain target rows' + ); + assert.strictEqual( + active.some((entry) => entry.name === 'L2Migrator'), + false, + 'migration-residual contracts must not appear in active' + ); + assert.ok( + implementations.some((entry) => entry.name === 'BondingVotes' && (entry.type || entry.deploymentKind) === 'target'), + 'currentImplementations should retain BondingVotes target entry' + ); + }); + + runCase('generated blockchain page companion resolves explicit contract entries and bans stale copy drifts', () => { + const pageData = loadBlockchainPageJson(); + const serialized = JSON.stringify(pageData); + const contractSlugs = Object.keys(pageData.contracts || {}); + const l2Migrator = pageData.contracts['l2-migrator']; + const merkleSnapshot = pageData.contracts['merkle-snapshot']; + const faucet = pageData.contracts['livepeer-token-faucet']; + const sections = pageData.sections || []; + const expectedContracts = [ + 'controller', + 'bonding-manager', + 'ticket-broker', + 'rounds-manager', + 'minter', + 'service-registry', + 'ai-service-registry', + 'livepeer-token-arbitrum', + 'livepeer-token-ethereum', + 'bridge-minter', + 'l2-lpt-gateway', + 'l1-lpt-gateway', + 'l1-escrow', + 'livepeer-token-faucet', + 'bonding-votes', + 'governor', + 'livepeer-governor', + 'treasury', + 'l2-migrator', + 'merkle-snapshot', + ]; + + assert.ok(Array.isArray(sections) && sections.length >= 4, 'blockchain page companion should publish section metadata'); + assert.deepStrictEqual(contractSlugs.sort(), expectedContracts.sort(), 'blockchain page companion should cover the full accordion roster'); + assert.strictEqual(l2Migrator.type, 'proxy', 'L2Migrator should remain a proxy entry'); + assert.ok(l2Migrator.proxyAddress, 'L2Migrator should expose proxyAddress'); + assert.ok(l2Migrator.targetAddress, 'L2Migrator should expose targetAddress'); + assert.notStrictEqual(l2Migrator.proxyAddress.toLowerCase(), l2Migrator.targetAddress.toLowerCase(), 'L2Migrator proxy and target must stay distinct'); + assert.strictEqual(l2Migrator.currentAddress.toLowerCase(), l2Migrator.proxyAddress.toLowerCase(), 'currentAddress should equal proxyAddress for proxy rows'); + assert.strictEqual(merkleSnapshot.supported, true, 'MerkleSnapshot should be a supported canonical page contract'); + assert.ok(Array.isArray(merkleSnapshot.functions) && merkleSnapshot.functions.length > 0, 'MerkleSnapshot should expose generated functions'); + assert.strictEqual(faucet.supported, false, 'LivepeerTokenFaucet should remain unsupported as a deployed canonical contract'); + assert.ok(faucet.unsupportedNote, 'unsupported contracts should expose an explicit note'); + assert.deepStrictEqual(pageData.contracts.controller.facts, ['Controller registry', 'Active']); + assert.deepStrictEqual( + pageData.contracts['bonding-manager'].facts, + ['Controller registered', 'Active', 'Proxy target resolved', 'Target V13'] + ); + assert.deepStrictEqual( + pageData.contracts['ai-service-registry'].facts, + ['Deployment artifact confirmed', 'Runtime consumer confirmed', 'Active'] + ); + assert.deepStrictEqual(pageData.contracts.governor.facts, ['Deployment artifact confirmed', 'Active']); + assert.deepStrictEqual(pageData.contracts['livepeer-token-faucet'].facts, []); + assert.strictEqual(pageData.contracts['livepeer-token-faucet'].unsupportedNote, 'Local development utility contract.'); + assert.deepStrictEqual( + pageData.contracts['l2-migrator'].facts, + ['Controller registered', 'Migration', 'Proxy target resolved'] + ); + assert.strictEqual( + serialized.includes('snippets/data/changelogs/contractAddressesData.jsx'), + false, + 'blockchain page companion must not reference archived changelog data' + ); + assert.strictEqual(serialized.includes('"weak"'), false, 'generated blockchain data must not emit weak verification language'); + assert.strictEqual(serialized.includes('Last active'), false, 'generated blockchain data must not emit stale last-active claims'); + assert.strictEqual(serialized.includes('transactions'), false, 'generated blockchain data must not emit stale transaction-count claims'); + assert.strictEqual(serialized.includes('residual ETH'), false, 'generated blockchain data must not emit stale residual-ETH claims'); + assert.strictEqual(serialized.includes('claimDelegatorStake'), false, 'generated blockchain data must not revive stale L2Migrator function names'); + }); + + runCase('blockchain page spec is derived from the canonical contracts catalog', () => { + const pageSpec = buildBlockchainContractPageSpec(); + const pageSpecSource = readText(BLOCKCHAIN_PAGE_SPEC_PATH); + const expectedContracts = [ + 'controller', + 'bonding-manager', + 'ticket-broker', + 'rounds-manager', + 'minter', + 'service-registry', + 'ai-service-registry', + 'livepeer-token-arbitrum', + 'livepeer-token-ethereum', + 'bridge-minter', + 'l2-lpt-gateway', + 'l1-lpt-gateway', + 'l1-escrow', + 'livepeer-token-faucet', + 'bonding-votes', + 'governor', + 'livepeer-governor', + 'treasury', + 'l2-migrator', + 'merkle-snapshot', + ]; + + assert.deepStrictEqual( + pageSpec.contracts.map((contract) => contract.slug).sort(), + expectedContracts.sort(), + 'derived blockchain page spec should cover the full accordion roster' + ); + assert.ok( + pageSpecSource.includes('buildBlockchainContractPageSpec'), + 'blockchain page spec wrapper should derive from the canonical catalog builder' + ); + }); + + runCase('generated registry emits historicalSeries without archived changelog references', () => { + const data = loadGeneratedJson(); + const serialized = JSON.stringify(data); + + assert.ok(data.arbitrumOne?.historicalSeries?.core?.length > 0, 'arbitrumOne historicalSeries.core should be present'); + assert.ok(data.ethereumMainnet?.historicalSeries?.core?.length > 0, 'ethereumMainnet historicalSeries.core should be present'); + assert.ok( + data.arbitrumOne.historicalSeries.core.some((series) => series.canonicalName === 'BondingManager'), + 'historicalSeries should retain BondingManager history' + ); + assert.ok( + data.ethereumMainnet.historicalSeries.genesis.some((series) => series.canonicalName === 'MerkleProof'), + 'historicalSeries should retain genesis history' + ); + assert.strictEqual( + serialized.includes('snippets/data/changelogs/contractAddressesData.jsx'), + false, + 'generated contracts data must not reference the archived changelog path' + ); + }); + + runCase('generated registry keeps historical rows out of current state and bans weak verification language', () => { + const data = loadGeneratedJson(); + const historicalRows = [ + ...(data.arbitrumOne?.historical || []), + ...(data.ethereumMainnet?.historical || []), + ]; + const serialized = JSON.stringify(data); + + assert.ok(historicalRows.length > 0, 'generated registry should publish historical rows'); + assert.strictEqual( + historicalRows.some((entry) => entry.meta?.currentImplementation === true), + false, + 'historical rows must not retain currentImplementation=true' + ); + assert.strictEqual( + historicalRows.some((entry) => entry.meta?.statusLabel === 'Current'), + false, + 'historical rows must not publish Current status labels' + ); + assert.strictEqual( + historicalRows.some((entry) => entry.verification?.status === 'weak'), + false, + 'historical rows must not expose weak verification status' + ); + assert.strictEqual( + serialized.includes('"weak"'), + false, + 'generated contracts data must not emit weak verification language anywhere in the published payload' + ); + }); + + runCase('generated registry publishes externally proven ethereum legacy utility families and genesis history', () => { + const data = loadGeneratedJson(); + const legacyOperational = data.ethereumMainnet?.legacy_operational || []; + const legacyByName = new Map(legacyOperational.map((entry) => [entry.name, entry])); + const missing = EXPECTED_ETH_LEGACY_UTILITY_NAMES.filter((name) => !legacyByName.has(name)); + const genesisSeries = data.ethereumMainnet?.historicalSeries?.genesis || []; + const merkleProofGroup = genesisSeries.find((group) => group?.canonicalName === 'MerkleProof'); + + assert.deepStrictEqual( + missing, + [], + 'ethereumMainnet.legacy_operational should retain the externally proven legacy utility families' + ); + for (const name of EXPECTED_ETH_LEGACY_UTILITY_NAMES) { + const entry = legacyByName.get(name); + assert.strictEqual( + entry?.address, + EXPECTED_ETH_LEGACY_UTILITY_DETAILS[name], + `${name} should publish the seeded externally proven address` + ); + assert.ok( + ['explorer-search', 'verified-seed-address'].includes(entry?.addressSource?.kind), + `${name} should resolve from explorer-backed external proof` + ); + assert.strictEqual( + entry?.proofChain, + 'detached', + `${name} should remain a detached external-proof contract` + ); + } + assert.ok(merkleProofGroup, 'ethereumMainnet historicalSeries.genesis should include MerkleProof'); + assert.ok(Array.isArray(merkleProofGroup.entries) && merkleProofGroup.entries.length > 0, 'MerkleProof genesis group should contain entries'); + assert.strictEqual( + String(merkleProofGroup.entries[0]?.address || '').toLowerCase(), + EXPECTED_ETH_HISTORICAL_GENESIS_ADDRESS, + 'MerkleProof genesis group should preserve the canonical address' + ); + }); + + runCase('ContractVerifier helper consumes lifecycle-safe groups and explicit controller registration', () => { + const data = loadGeneratedJson(); + const { activeEntries, inventoryEntries, canonical } = buildContractVerifierChainData(data, 'arbitrumOne'); + + assert.ok(activeEntries.length > 0, 'widget should receive active entries'); + assert.ok(inventoryEntries.length >= activeEntries.length, 'widget inventory should include at least the active entries'); + assert.strictEqual( + activeEntries.some((entry) => (entry.type || entry.deploymentKind) === 'target'), + false, + 'widget active set must not contain target rows' + ); + assert.strictEqual(canonical.BondingManager?.type || canonical.BondingManager?.deploymentKind, 'proxy'); + assert.strictEqual( + isContractVerifierControllerLookupEligible(canonical.BondingManager, true), + true, + 'controller-managed active contracts should stay RPC-eligible' + ); + assert.strictEqual( + isContractVerifierControllerLookupEligible(canonical.AIServiceRegistry, true), + false, + 'non-controller contracts must not be treated as controller lookups' + ); + assert.strictEqual(canonical.BondingManager?.verification?.controller?.controllerRegistered, true); + assert.strictEqual(canonical.BondingManager?.verification?.explorer?.host, 'arbiscan.io'); + assert.ok( + canonical.BondingManager?.verification?.proxy?.implementationMatchesExpected !== false, + 'active proxy rows should not contradict expected implementation metadata' + ); + assert.ok(canonical.BondingManager?.addressSource?.kind, 'generated entries should expose structured address source metadata'); + }); + + runCase('active proxy rows expose runtime-resolved implementation addresses that match expected targets', () => { + const data = loadGeneratedJson(); + const activeProxies = (data.arbitrumOne?.active || []).filter((entry) => (entry.type || entry.deploymentKind) === 'proxy'); + + assert.ok(activeProxies.length > 0, 'arbitrumOne should publish active proxy rows'); + assert.strictEqual( + activeProxies.some((entry) => !entry.verification?.proxy?.implementationAddress), + false, + 'every active proxy should expose a runtime implementation address' + ); + assert.strictEqual( + activeProxies.some((entry) => entry.verification?.proxy?.controllerMatchesExpected === false), + false, + 'active proxy controller pointers should match the expected chain controller' + ); + assert.strictEqual( + activeProxies.some((entry) => + entry.verification?.proxy?.expectedImplementationAddress + && entry.verification?.proxy?.implementationMatchesExpected !== true + ), + false, + 'runtime proxy implementations should match expected targets where an expected target is defined' + ); + }); + + runCase('generated outputs preserve the existing named export contract for current consumers', () => { + assert.ok(fs.existsSync(GENERATED_JSX_PATH), 'generated contractAddressesData.jsx is missing'); + assert.ok(fs.existsSync(BLOCKCHAIN_PAGE_JSX_PATH), 'generated blockchainContractsPageData.jsx is missing'); + + const contractsJsx = readText(GENERATED_JSX_PATH); + const blockchainJsx = readText(BLOCKCHAIN_PAGE_JSX_PATH); + + assert.ok( + contractsJsx.includes('export const contractAddresses ='), + 'contractAddressesData.jsx must continue exporting contractAddresses' + ); + assert.ok( + blockchainJsx.includes('export const blockchainContractsPageData ='), + 'blockchainContractsPageData.jsx must continue exporting blockchainContractsPageData' + ); + }); + + runCase('contracts pages consume the shared contracts data pipeline without a standalone verifier route', () => { + const canonicalPage = readText(CANONICAL_PAGE_PATH); + const resourceHubPage = readText(RESOURCE_HUB_PAGE_PATH); + const gatewaysPage = readText(GATEWAYS_PAGE_PATH); + const orchestratorsPage = readText(ORCHESTRATORS_PAGE_PATH); + const canonicalComposable = readText(CANONICAL_COMPOSABLE_PATH); + const verifierComposable = readText(VERIFIER_COMPOSABLE_PATH); + const blockchainPage = readText(BLOCKCHAIN_PAGE_PATH); + const contractsAdapter = readText(CONTRACTS_DATA_ADAPTER_PATH); + const viewModelAdapter = readText(VIEW_MODEL_ADAPTER_PATH); + const registryDataModule = readText(GENERATED_JSX_PATH); + const blockchainDataModule = readText(BLOCKCHAIN_PAGE_JSX_PATH); + + assert.ok(canonicalPage.includes('/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx'), 'canonical route page should wrap the canonical contracts composable'); + assert.ok(resourceHubPage.includes('/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx'), 'resource hub route page should wrap the canonical contracts composable'); + assert.ok(gatewaysPage.includes('/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx'), 'gateways route page should wrap the canonical contracts composable'); + assert.ok(orchestratorsPage.includes('/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx'), 'orchestrators route page should wrap the canonical contracts composable'); + assert.ok(canonicalComposable.includes("/snippets/composables/pages/canonical/verify-contract-addresses.mdx"), 'canonical composable should embed the verifier composable'); + assert.ok(canonicalComposable.includes('/snippets/data/contract-addresses/contractAddressesData.jsx'), 'canonical composable should import the canonical contracts data module'); + assert.ok(!canonicalComposable.includes('export const '), 'canonical composable should not own data/helper exports in MDX'); + assert.ok(!canonicalComposable.includes('/snippets/data/changelogs/contractAddressesData.jsx'), 'canonical composable should not import archived historical changelog data'); + assert.ok(canonicalComposable.includes('SearchTableV2'), 'canonical composable should use the shared SearchTable wrapper'); + assert.ok(canonicalComposable.includes('DynamicTableV2'), 'canonical composable should use the shared dynamic table wrapper'); + assert.ok(canonicalComposable.includes('#verifier-widget-verify-contract-address'), 'canonical composable should expose the embedded verifier widget anchor'); + assert.ok(canonicalComposable.includes('<VerifyContractAddresses />'), 'canonical composable should render the verifier composable inline'); + assert.ok(!canonicalComposable.includes('contractsRoutes.verifier'), 'canonical composable should not depend on a standalone verifier route helper'); + assert.ok(canonicalComposable.includes('HistoricalContractTable category="core" sourceData={contractAddresses}'), 'canonical composable should consume generated historical data through the table component'); + + assert.ok(verifierComposable.includes('ContractVerifier'), 'verifier composable should host the ContractVerifier widget'); + assert.ok(verifierComposable.includes('/snippets/data/contract-addresses/contractAddressesData.jsx'), 'verifier composable should import the canonical contracts data module'); + + assert.ok(!blockchainPage.includes('/snippets/data/changelogs/contractAddressesData.jsx'), 'blockchain page should not import archived historical changelog data'); + assert.ok(!blockchainPage.includes('/snippets/composables/pages/canonical/data/blockchain-contracts-data.jsx'), 'blockchain page must not depend on the composable helper data layer'); + assert.ok(blockchainPage.includes('/snippets/data/contract-addresses/view-model.jsx'), 'blockchain page should import the shared contracts view-model adapter'); + assert.ok(blockchainPage.includes('/snippets/data/contract-addresses/blockchainContractsPageData.jsx'), 'blockchain page should import the blockchain contracts data module'); + assert.ok(!blockchainPage.includes('export const '), 'blockchain page should not own data/helper exports in MDX'); + assert.ok(!blockchainPage.includes('.current.find('), 'blockchain page should not use raw current.find lookups'); + assert.ok(!blockchainPage.includes('/v2/about/resources/contract-addresses'), 'blockchain page should link to the canonical route'); + assert.ok(blockchainPage.includes('contractsRoutes.reference'), 'blockchain page should link to the canonical reference page through the shared routes helper'); + assert.ok(blockchainPage.includes('contractsRoutes.verifier'), 'blockchain page should link to the embedded verifier anchor through the shared routes helper'); + + assert.ok(contractsAdapter.includes("from './contractAddressesData.jsx'"), 'contracts index should re-export the canonical contracts data module'); + assert.ok(contractsAdapter.includes("from './blockchainContractsPageData.jsx'"), 'contracts index should re-export the blockchain page data module'); + assert.ok(contractsAdapter.includes("export * from './view-model.jsx'"), 'contracts index should re-export the shared view-model adapter'); + assert.ok(registryDataModule.includes('export const contractAddresses ='), 'contracts data module should export the canonical registry data'); + assert.ok(blockchainDataModule.includes('export const blockchainContractsPageData ='), 'blockchain data module should export the blockchain contracts data'); + assert.ok(viewModelAdapter.includes('export const contractsRoutes ='), 'view-model adapter should define the shared contracts helpers directly'); + assert.ok(viewModelAdapter.includes("verifier: '/v2/about/resources/livepeer-contract-addresses#verifier-widget-verify-contract-address'"), 'view-model adapter should point verifier links at the embedded anchor on the canonical page'); + }); + + runCase('docs navigation exposes the contracts import routes without a standalone verifier page', () => { + const docsJson = readText(DOCS_JSON_PATH); + + assert.ok(docsJson.includes('v2/about/resources/livepeer-contract-addresses'), 'docs.json should keep the canonical contracts route'); + assert.ok(docsJson.includes('v2/resources/references/contract-addresses'), 'docs.json should keep the resource hub contracts route'); + assert.ok(docsJson.includes('v2/gateways/resources/reference/technical/contract-addresses'), 'docs.json should keep the gateways contracts route'); + assert.ok(docsJson.includes('v2/orchestrators/resources/reference/technical/contract-addresses'), 'docs.json should keep the orchestrators contracts route'); + assert.ok(!docsJson.includes('v2/about/resources/verify-contract-addresses'), 'docs.json should not publish a standalone verifier route'); + }); + + runCase('AI sitemap freshness tracks generated contracts data for the canonical and importer contracts routes', () => { + const canonicalDependencies = ROUTE_DEPENDENCIES['v2/about/resources/livepeer-contract-addresses'] || []; + const resourceHubDependencies = ROUTE_DEPENDENCIES['v2/resources/references/contract-addresses'] || []; + const gatewaysDependencies = ROUTE_DEPENDENCIES['v2/gateways/resources/reference/technical/contract-addresses'] || []; + const orchestratorsDependencies = ROUTE_DEPENDENCIES['v2/orchestrators/resources/reference/technical/contract-addresses'] || []; + const blockchainDependencies = ROUTE_DEPENDENCIES['v2/about/livepeer-protocol/blockchain-contracts'] || []; + + assert.ok(canonicalDependencies.includes('snippets/data/contract-addresses/contractAddressesData.json')); + assert.ok(canonicalDependencies.includes('snippets/data/contract-addresses/_health-checks.json')); + assert.strictEqual( + canonicalDependencies.includes('snippets/composables/pages/canonical/livepeer-contract-addresses-data.json'), + false, + 'route dependencies must not include the stale companion JSON path' + ); + assert.ok(resourceHubDependencies.includes('snippets/data/contract-addresses/contractAddressesData.json')); + assert.ok(gatewaysDependencies.includes('snippets/data/contract-addresses/contractAddressesData.json')); + assert.ok(orchestratorsDependencies.includes('snippets/data/contract-addresses/contractAddressesData.json')); + assert.strictEqual( + Object.prototype.hasOwnProperty.call(ROUTE_DEPENDENCIES, 'v2/about/resources/verify-contract-addresses'), + false, + 'AI sitemap should not track a removed standalone verifier route' + ); + assert.ok(blockchainDependencies.includes('snippets/data/contract-addresses/blockchainContractsPageData.json')); + }); + + runCase('buildValidationReport blocks provenance-affecting branch anomalies instead of downgrading them to warnings', () => { + const payload = { + arbitrumOne: { inventory: [] }, + ethereumMainnet: { inventory: [] }, + }; + const branchDiffs = BLOCKING_BRANCH_DIFF_TYPES.map((type) => ({ + type, + repo: 'livepeer/protocol', + detail: `${type} detected`, + })); + + const report = buildValidationReport({ + catalog: { _meta: {} }, + payload, + branchDiffs, + resolutions: [], + }); + + assert.strictEqual(report.warnings.length, 0, 'blocking branch anomalies must not remain warnings'); + assert.deepStrictEqual( + report.failures.map((failure) => failure.endpoint).sort(), + [...BLOCKING_BRANCH_DIFF_TYPES].sort(), + 'all blocking branch anomaly types should become failures' + ); + }); + + runCase('workflow cadence and publish staging align with the pipeline output contract', () => { + const mainWorkflow = readText(MAIN_WORKFLOW_PATH); + const shadowWorkflow = readText(SHADOW_WORKFLOW_PATH); + const constantsText = readText(CONTRACTS_CONSTANTS_PATH); + + assert.ok( + mainWorkflow.includes(`- cron: \"${CONTRACTS_PIPELINE_CADENCE.mainScheduleCron}\"`), + 'main workflow cron must match the canonical cadence contract' + ); + assert.ok( + shadowWorkflow.includes(`- cron: \"${CONTRACTS_PIPELINE_CADENCE.shadowScheduleCron}\"`), + 'shadow workflow cron must match the canonical cadence contract' + ); + assert.ok( + mainWorkflow.includes('FLAGS="--check"'), + 'main workflow should keep the canonical --check validation contract' + ); + assert.ok( + shadowWorkflow.includes('FLAGS="--check"'), + 'shadow workflow should keep the canonical --check validation contract' + ); + assert.strictEqual( + constantsText.includes('livepeer-contract-addresses-data.json'), + false, + 'pipeline constants must not publish the stale companion output path' + ); + assert.strictEqual( + mainWorkflow.includes('git add snippets/composables/pages/canonical/livepeer-contract-addresses-data.json'), + false, + 'workflow staging must not add the stale companion output path' + ); + assert.strictEqual( + mainWorkflow.includes('git add snippets/data/contract-addresses/contractAddressesData.jsx'), + true, + 'workflow staging should add the generated registry JSX artifact' + ); + assert.strictEqual( + mainWorkflow.includes('git add snippets/data/contract-addresses/blockchainContractsPageData.jsx'), + true, + 'workflow staging should add the generated blockchain page JSX artifact' + ); + assert.ok(constantsText.includes('contractAddressesData.jsx'), 'pipeline constants should publish the registry JSX output path'); + assert.ok(constantsText.includes('blockchainContractsPageData.jsx'), 'pipeline constants should publish the blockchain page JSX output path'); + assert.strictEqual(fs.existsSync(GENERATED_JSX_PATH), true, 'generated contractAddressesData.jsx should exist'); + assert.strictEqual(fs.existsSync(BLOCKCHAIN_PAGE_JSX_PATH), true, 'generated blockchainContractsPageData.jsx should exist'); + }); + + return { + errors, + passed: errors.length === 0, + total, + }; +} + +if (require.main === module) { + const result = runTests(); + + if (result.errors.length > 0) { + console.error('\n❌ Contracts addresses pipeline unit test failures:\n'); + result.errors.forEach((error) => { + console.error(` ${error.file}:${error.line} - ${error.rule}: ${error.message}`); + }); + } else { + console.log(`\n✅ Contracts addresses pipeline unit tests passed (${result.total} checks)`); + } + + process.exit(result.passed ? 0 : 1); +} + +module.exports = { runTests }; diff --git a/operations/tests/unit/contracts-view-model.test.js b/operations/tests/unit/contracts-view-model.test.js new file mode 100644 index 000000000..b03f90afd --- /dev/null +++ b/operations/tests/unit/contracts-view-model.test.js @@ -0,0 +1,113 @@ +#!/usr/bin/env node +/** + * @script contracts-view-model.test + * @category validator + * @purpose qa:contracts-registry + * @scope tests/unit, snippets/data/contract-addresses/ + * @purpose-statement Focused regression tests for the shared contracts view-model helper surface. + * @pipeline manual, P3 + * @usage node operations/tests/unit/contracts-view-model.test.js + */ + +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); +const vm = require('vm'); + +const REPO_ROOT = path.resolve(__dirname, '../../..'); +const VIEW_MODEL_PATH = path.join( + REPO_ROOT, + 'snippets', + 'data', + 'contract-addresses', + 'view-model.js' +); +const CONTRACTS_JSON_PATH = path.join( + REPO_ROOT, + 'snippets', + 'data', + 'contract-addresses', + 'contractAddressesData.json' +); +const BLOCKCHAIN_JSON_PATH = path.join( + REPO_ROOT, + 'snippets', + 'data', + 'contract-addresses', + 'blockchainContractsPageData.json' +); + +function loadJson(filePath) { + return JSON.parse(fs.readFileSync(filePath, 'utf8')); +} + +function loadViewModel() { + const source = fs.readFileSync(VIEW_MODEL_PATH, 'utf8'); + const exportNames = [...source.matchAll(/export const (\w+)\s*=/g)].map((match) => match[1]); + const transformed = `${source.replace(/export const /g, 'const ')}\nmodule.exports = { ${exportNames.join(', ')} };`; + const context = { + module: { exports: {} }, + exports: {}, + }; + + vm.runInNewContext(transformed, context, { filename: VIEW_MODEL_PATH }); + return context.module.exports; +} + +function run() { + const contractAddresses = loadJson(CONTRACTS_JSON_PATH); + const blockchainPageData = loadJson(BLOCKCHAIN_JSON_PATH); + const viewModel = loadViewModel(); + + const activeRows = viewModel.getActiveTableItems(contractAddresses); + const proxyRows = viewModel.getProxyTableItems(contractAddresses); + const nonActiveGroups = viewModel.getNonActiveGroups(contractAddresses); + const bindings = viewModel.getBlockchainContractBindings(blockchainPageData); + const sorted = viewModel.sortContractsForDisplay([ + { Name: 'Treasury', Chain: 'Arbitrum One', Category: 'governance', Version: '—', _categoryKey: 'governance' }, + { Name: 'BridgeMinter', Chain: 'Ethereum Mainnet', Category: 'bridge', Version: '—', _categoryKey: 'bridge' }, + { Name: 'Controller', Chain: 'Arbitrum One', Category: 'core', Version: '—', _categoryKey: 'core' }, + ]); + + assert.ok(activeRows.length > 0, 'active rows should not be empty'); + assert.strictEqual( + activeRows.some((row) => row.Type === 'proxy'), + false, + 'active table rows should exclude proxy entries' + ); + assert.ok( + activeRows.some((row) => row.Name === 'BondingManager' && row.Type === 'target' && row.Version === 'V13'), + 'active rows should include current implementation targets' + ); + + assert.ok(proxyRows.length > 0, 'proxy rows should not be empty'); + const bondingManagerProxy = proxyRows.find((row) => row.Name === 'BondingManager'); + assert.ok(bondingManagerProxy, 'BondingManager proxy row should exist'); + assert.strictEqual(bondingManagerProxy.Proxy, 'proxy'); + assert.strictEqual(bondingManagerProxy.Target, 'target'); + assert.ok(/^0x[0-9a-fA-F]{40}$/.test(bondingManagerProxy['Proxy Address']), 'proxy row should expose a proxy address'); + assert.ok(/^0x[0-9a-fA-F]{40}$/.test(bondingManagerProxy['Target Address']), 'proxy row should expose a target address'); + + assert.strictEqual( + nonActiveGroups.map((group) => group.key).join(','), + 'paused,migration_residual,legacy_operational', + 'non-active groups should preserve lifecycle ordering' + ); + assert.ok( + nonActiveGroups.find((group) => group.key === 'paused')?.items.some((row) => row.Name === 'Controller'), + 'paused group should include paused controller-era contracts' + ); + + assert.strictEqual( + sorted.map((row) => row.Name).join(','), + 'BridgeMinter,Controller,Treasury', + 'sorted rows should follow category ordering before name ordering' + ); + + assert.ok(bindings.controller, 'blockchain bindings should expose the controller address'); + assert.ok(bindings.l2Migrator, 'blockchain bindings should expose the L2Migrator proxy address'); + + console.log('✅ contracts-view-model.test passed'); +} + +run(); diff --git a/snippets/components/displays/diagrams/ZoomableDiagram.jsx b/snippets/components/displays/diagrams/ZoomableDiagram.jsx index eb5c18f01..919bea05b 100644 --- a/snippets/components/displays/diagrams/ZoomableDiagram.jsx +++ b/snippets/components/displays/diagrams/ZoomableDiagram.jsx @@ -3,127 +3,173 @@ * @category displays * @subcategory diagrams * @status stable - * @description Pannable, zoomable diagram container with zoom controls and accessible buttons. + * @description Pannable diagram container with deterministic preset zoom controls rendered without client-side React state. * @aiDiscoverability none * @param {React.ReactNode} children - Content rendered inside the component. * @param {string} [title=""] - Title text rendered by the component. * @param {string} [maxHeight="500px"] - Max height used by the component. * @param {string} [minWidth="100%"] - Min width used by the component. - * @param {boolean} [showControls=false] - Boolean flag that controls component behaviour. + * @param {boolean} [showControls=false] - When true, renders preset zoom controls. * @param {string} [className=""] - CSS class name. * @param {object} [style={}] - Inline style overrides. */ + export const ScrollableDiagram = ({ children, - title = "", - maxHeight = "500px", - minWidth = "100%", + title = '', + maxHeight = '500px', + minWidth = '100%', showControls = false, - className = "", + className = '', style = {}, ...rest }) => { - const [zoom, setZoom] = useState(100); + const buildDiagramKey = (currentTitle = '', currentClassName = '') => { + const source = `${currentTitle}|${currentClassName}|scrollable-diagram` + let hash = 0 - const zoomIn = () => setZoom((z) => Math.min(z + 5, 200)); - const zoomOut = () => setZoom((z) => Math.max(z - 5, 25)); - const resetZoom = () => setZoom(100); + for (let index = 0; index < source.length; index += 1) { + hash = (hash * 31 + source.charCodeAt(index)) >>> 0 + } - const containerStyle = { - overflow: "auto", - maxHeight: maxHeight, - border: "1px solid var(--border)", - borderRadius: "8px", - padding: "1rem", - background: "var(--card-background)", - cursor: "grab", - position: "relative", - }; + return `docs-diagram-${hash.toString(36)}` + } - const buttonStyle = { - background: "var(--accent)", - color: "var(--button-text)", - border: "none", - borderRadius: "4px", - padding: "4px 10px", - cursor: "pointer", - fontSize: "0.75rem", - fontWeight: "600", - }; + const diagramKey = buildDiagramKey(title, className) + const zoomName = `${diagramKey}-zoom` + const zoomLevels = [ + { label: '75%', value: 0.75 }, + { label: '100%', value: 1 }, + { label: '125%', value: 1.25 }, + { label: '150%', value: 1.5 }, + ] + + const containerStyle = { + overflow: 'auto', + maxHeight, + border: '1px solid var(--border)', + borderRadius: '8px', + padding: '1rem', + background: 'var(--card-background)', + position: 'relative', + } return ( - <> - <div className={className} style={{ position: "relative", marginBottom: "1rem", ...style }} {...rest}> - {title && ( - <p - style={{ - textAlign: "center", - fontStyle: "italic", - color: "var(--text)", - marginBottom: "0.5rem", - fontSize: "0.875rem", - }} - > - {title} - </p> - )} - <div style={containerStyle}> - <div - style={{ - minWidth: minWidth, - transform: `scale(${zoom / 100})`, - transformOrigin: "top left", - }} - > - {children} - </div> + <div className={className} style={{ position: 'relative', marginBottom: '1rem', ...style }} {...rest}> + {title && ( + <p + style={{ + textAlign: 'center', + fontStyle: 'italic', + color: 'var(--text)', + marginBottom: '0.5rem', + fontSize: '0.875rem', + }} + > + {title} + </p> + )} + + {showControls ? ( + <style>{` + [data-docs-diagram-key="${diagramKey}"] [data-docs-diagram-content] { + transform: scale(1); + transform-origin: top left; + width: max-content; + } + ${zoomLevels + .map( + (zoomLevel) => ` + #${diagramKey}-${zoomLevel.label.replace('%', '')}:checked ~ [data-docs-diagram-shell] [data-docs-diagram-content] { + transform: scale(${zoomLevel.value}); + } + #${diagramKey}-${zoomLevel.label.replace('%', '')}:checked ~ [data-docs-diagram-controls] label[for="${diagramKey}-${zoomLevel.label.replace('%', '')}"] { + background: var(--accent); + color: var(--button-text); + border-color: var(--accent); + }` + ) + .join('\n')} + `}</style> + ) : null} + + {showControls + ? zoomLevels.map((zoomLevel) => { + const inputId = `${diagramKey}-${zoomLevel.label.replace('%', '')}` + return ( + <input + key={inputId} + id={inputId} + type="radio" + name={zoomName} + defaultChecked={zoomLevel.value === 1} + style={{ position: 'absolute', opacity: 0, pointerEvents: 'none' }} + /> + ) + }) + : null} + + <div + data-docs-diagram-key={diagramKey} + data-docs-diagram-shell + style={containerStyle} + > + <div + data-docs-diagram-content + style={{ + minWidth, + transformOrigin: 'top left', + width: 'max-content', + }} + > + {children} </div> - {showControls && ( - <div + </div> + + {showControls ? ( + <div + data-docs-diagram-controls + style={{ + display: 'flex', + justifyContent: 'flex-end', + alignItems: 'center', + gap: '0.5rem', + marginTop: '0.5rem', + flexWrap: 'wrap', + }} + > + <span style={{ - display: "flex", - justifyContent: "flex-end", - alignItems: "center", - gap: "0.5rem", - marginTop: "0.5rem", + fontSize: '0.75rem', + color: 'var(--muted-text)', + marginRight: 'auto', }} > - <span - style={{ - fontSize: "0.75rem", - color: "var(--muted-text)", - marginRight: "auto", - }} - > - Scroll to pan - </span> - <button style={buttonStyle} onClick={zoomOut} title="Zoom out" aria-label="Zoom out"> - − - </button> - <span - style={{ - fontSize: "0.75rem", - color: "var(--muted-text)", - minWidth: "40px", - textAlign: "center", - }} - > - {zoom}% - </span> - <button style={buttonStyle} onClick={zoomIn} title="Zoom in" aria-label="Zoom in"> - + - </button> - <button - style={{ ...buttonStyle, background: "var(--border)" }} - onClick={resetZoom} - title="Reset zoom" - aria-label="Reset zoom to 100%" - > - 100% - </button> - </div> - )} - </div> - </> - ); -}; + Scroll to pan + </span> + {zoomLevels.map((zoomLevel) => { + const inputId = `${diagramKey}-${zoomLevel.label.replace('%', '')}` + return ( + <label + key={inputId} + htmlFor={inputId} + style={{ + background: 'transparent', + color: 'var(--text)', + border: '1px solid var(--border)', + borderRadius: '4px', + padding: '4px 10px', + cursor: 'pointer', + fontSize: '0.75rem', + fontWeight: '600', + }} + > + {zoomLevel.label} + </label> + ) + })} + </div> + ) : null} + </div> + ) +} diff --git a/snippets/components/displays/tables/HistoricalContractTable.jsx b/snippets/components/displays/tables/HistoricalContractTable.jsx index c32a803ba..729c26546 100644 --- a/snippets/components/displays/tables/HistoricalContractTable.jsx +++ b/snippets/components/displays/tables/HistoricalContractTable.jsx @@ -3,16 +3,25 @@ * @category displays * @subcategory tables * @status stable - * @description Renders historical contract address tables. Accepts raw contractAddresses - * data and computes the historical lookup internally — avoids Mintlify scope isolation - * issues with pre-computed data passed across export boundaries. + * @description Renders historical contract version series from the generated contracts + * pipeline output. Accepts the raw contractAddresses object and derives visible series + * for a single category internally. Current rows are excluded from display, and each + * contract series is split into separate chain tables to keep version history readable. * @aiDiscoverability none - * @param {Array} contracts - Array of contract name strings to render tables for. - * @param {Object} sourceData - The full contractAddresses object from contractAddressesData.jsx. + * @param {string} category - Historical category key to render. + * @param {Object} sourceData - The full contractAddresses object from the contracts data adapter. */ import { ArbitrumIcon } from '/snippets/components/elements/icons/Icons.jsx' -export const HistoricalContractTable = ({ contracts = [], sourceData = {} }) => { +/** + * @component HistoricalContractTable + * @category data + * @status stable + * @description Renders historical contract version tables grouped by chain for one contract category. + * @param {string} [category="core"] - Historical category key to render. + * @param {Object} [sourceData={}] - Contract addresses pipeline dataset. + */ +export const HistoricalContractTable = ({ category = "core", sourceData = {} }) => { const hp = {padding:"0.3rem 0.4rem",borderBottom:"1px solid var(--border)",backgroundColor:"transparent",color:"var(--text)",fontWeight:600,fontSize:"0.75rem"} const cp = {padding:"0.3rem 0.4rem",border:"none",fontSize:"0.8rem",minWidth:0} const ap = {padding:"0.3rem 0.5rem",border:"none",minWidth:0} @@ -21,66 +30,117 @@ export const HistoricalContractTable = ({ contracts = [], sourceData = {} }) => const cs = {fontFamily:"monospace",fontSize:"0.75rem",whiteSpace:"nowrap"} const lk = {display:"inline-flex",alignItems:"center",gap:"0.3rem",textDecoration:"none"} const typeBadge = {target:"surface-destructive",standalone:"blue",proxy:"surface"} + const chainOrder = ["arbitrumOne", "ethereumMainnet"] + const typeRank = { target: 0, proxy: 1, standalone: 2 } + const byName = new Map() + ;["arbitrumOne", "ethereumMainnet"].forEach((chainKey) => { + const groups = sourceData?.[chainKey]?.historicalSeries?.[category] || [] + groups.forEach((group) => { + const key = group?.canonicalName || group?.name + if (!key) return + if (!byName.has(key)) { + byName.set(key, { + name: group.name || key, + entries: [], + }) + } + const target = byName.get(key) + ;(group.entries || []).forEach((entry) => { + if (!entry?.address) return + target.entries.push({ + name: group.name || key, + v: entry.version || "—", + addr: entry.address, + ch: entry.chain || chainKey, + type: entry.type || entry.deploymentKind || "standalone", + explorer: entry.blockchainHref || null, + replacedBy: entry.replacedBy || null, + status: entry.status || null, + isCurrent: Boolean(entry.isCurrent), + }) + }) + }) + }) + + const sortEntries = (entries = []) => + [...entries].sort((left, right) => { + const leftVersion = Number(String(left.v || "").replace(/^V/i, "")) || 0 + const rightVersion = Number(String(right.v || "").replace(/^V/i, "")) || 0 + return rightVersion - leftVersion + || (typeRank[left.type] ?? 99) - (typeRank[right.type] ?? 99) + || String(left.addr || "").localeCompare(String(right.addr || ""), "en", { sensitivity: "base" }) + }) - const flatten = (chainKey, explorerBase) => { - const groups = sourceData[chainKey]?.historical || {}; - const rows = []; - Object.entries(groups).forEach(([key, group]) => { - const m = key.match(/^([^(]+?)(?:\s*\((\w+)\))?$/); - const name = m ? m[1].trim() : key; - const type = m && m[2] ? m[2].toLowerCase() : "standalone"; - (group.entries || []).forEach((e) => { - rows.push({ name, v: e.version, addr: e.address, ch: chainKey, type, explorer: e.blockchainHref || (explorerBase + e.address), deployedAt: e.deployedAt || null, verified: e.verified != null ? e.verified : null, replacedBy: e.replacedBy || null }); - }); - }); - return rows; - }; + const visibleSeries = [...byName.values()] + .map((series) => { + const historicalEntries = series.entries.filter((entry) => { + const status = String(entry?.status || '').toLowerCase() + const metaStatus = String(entry?.meta?.statusLabel || '').toLowerCase() + const currentSignal = status.includes('current') || metaStatus.includes('current') + const implementationSignal = status.includes('implementation') || metaStatus.includes('implementation') + return !entry.isCurrent && !entry?.currentImplementation && !entry?.meta?.currentImplementation && !currentSignal && !implementationSignal + }) + const entriesByChain = chainOrder + .map((chainKey) => ({ + chainKey, + entries: sortEntries(historicalEntries.filter((entry) => entry.ch === chainKey)), + })) + .filter((group) => group.entries.length > 0) - const data = [ - ...flatten("arbitrumOne", sourceData.meta?.explorerUrls?.arbiscan || "https://arbiscan.io/address/"), - ...flatten("ethereumMainnet", sourceData.meta?.explorerUrls?.etherscan || "https://etherscan.io/address/"), - ].reduce((acc, row) => { - if (!acc[row.name]) acc[row.name] = []; - acc[row.name].push(row); - return acc; - }, {}); + return { + ...series, + entriesByChain, + } + }) + .filter((series) => series.entriesByChain.length > 0) + .sort((left, right) => String(left.name || "").localeCompare(String(right.name || ""), "en", { sensitivity: "base" })) - const filtered = contracts.filter((n) => data[n] && data[n].length > 0) + if (!visibleSeries.length) { + return ( + <div style={{padding:"0.75rem 0", color:"var(--text-muted)"}}> + No historical contract versions are currently published for this category. + </div> + ) + } return ( <> - {filtered.map((name) => ( - <div key={name} style={{marginBottom:"1rem"}}> - <h4 style={{margin:"0.5rem 0"}}>{name}</h4> - <table style={{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",borderSpacing:0}}> - <thead> - <tr><th style={{...hp,width:"5%",textAlign:"center"}}>Version</th><th style={hp}>Address</th><th style={{...hp,width:"15%"}}>Chain</th><th style={{...hp,width:"8%"}}>Type</th><th style={{...hp,width:"17%"}}>Status</th></tr> - </thead> - <tbody> - {data[name].map((c, i) => ( - <tr key={i}> - <td style={{...cp,textAlign:"center"}}>{c.v}</td> - <td style={ap}> - <span style={as_}> - <a href={c.explorer} target="_blank" rel="noopener noreferrer" style={lk}> - <Icon icon="arrow-up-right" size={12} color="var(--accent)" /> - <code style={cs}>{c.addr}</code> - </a> - </span> - </td> - <td style={cp}> - <span style={hs}> - {c.ch === "arbitrumOne" - ? <><ArbitrumIcon color="var(--arbitrum)" size={13} /> Arbitrum One</> - : <><Icon icon="ethereum" color="var(--hero-text)" size={13} /> Ethereum Mainnet</>} - </span> - </td> - <td style={cp}><Badge color={typeBadge[c.type] || "surface"}>{c.type.charAt(0).toUpperCase() + c.type.slice(1)}</Badge></td> - <td style={cp}><span style={hs}><Icon icon="circle" color="grey" size={8} /> {c.replacedBy ? `Replaced by ${c.replacedBy}` : "Deprecated"}</span></td> - </tr> - ))} - </tbody> - </table> + {visibleSeries.map((series) => ( + <div key={series.name} style={{marginBottom:"1rem"}}> + <h4 style={{margin:"0.5rem 0"}}>{series.name}</h4> + {series.entriesByChain.map(({ chainKey, entries }) => ( + <div key={`${series.name}:${chainKey}`} style={{marginBottom:"0.9rem"}}> + <div style={{margin:"0.35rem 0 0.4rem", fontWeight:600, color:"var(--hero-text)"}}> + <span style={hs}> + {chainKey === "arbitrumOne" + ? <><ArbitrumIcon color="var(--arbitrum)" size={13} /> Arbitrum One</> + : <><Icon icon="ethereum" color="var(--hero-text)" size={13} /> Ethereum Mainnet</>} + </span> + </div> + <table style={{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",borderSpacing:0}}> + <thead> + <tr><th style={{...hp,width:"7%",textAlign:"center"}}>Version</th><th style={hp}>Address</th><th style={{...hp,width:"10%"}}>Type</th><th style={{...hp,width:"22%"}}>Status</th></tr> + </thead> + <tbody> + {entries.map((c, i) => ( + <tr key={i}> + <td style={{...cp,textAlign:"center"}}>{c.v}</td> + <td style={ap}> + <span style={as_}> + <a href={c.explorer} target="_blank" rel="noopener noreferrer" style={lk}> + <Icon icon="arrow-up-right" size={12} color="var(--accent)" /> + <code style={cs}>{c.addr}</code> + </a> + </span> + </td> + <td style={cp}><Badge color={typeBadge[c.type] || "surface"}>{c.type.charAt(0).toUpperCase() + c.type.slice(1)}</Badge></td> + <td style={cp}><span style={hs}><Icon icon="circle" color="grey" size={8} /> {c.replacedBy ? `Replaced by ${c.replacedBy}` : "Deprecated"}</span></td> + </tr> + ))} + </tbody> + </table> + </div> + ))} </div> ))} </> diff --git a/snippets/components/integrators/feeds/ContractVerifier.jsx b/snippets/components/integrators/feeds/ContractVerifier.jsx index 418cef681..96c17c47d 100644 --- a/snippets/components/integrators/feeds/ContractVerifier.jsx +++ b/snippets/components/integrators/feeds/ContractVerifier.jsx @@ -3,20 +3,193 @@ * @category integrators * @subcategory feeds * @status experimental - * @description Interactive widget to verify Livepeer contract addresses on-chain. Two modes: look up by name (verifies via Controller RPC or Blockscout depending on contract), verify by pasted address. Consumes pipeline data from contractAddressesData.jsx. - * @dataSource prop (contractAddressesData.jsx — addresses, keccak hashes, registration status, explorer URLs, RPC URLs) + Arbitrum One RPC (eth_call) + Blockscout API v2 (/api/v2/addresses/) + * @description Interactive widget to verify Livepeer contract addresses on-chain. Two modes: look up by name (verifies via Controller RPC or Blockscout depending on contract), verify by pasted address. Consumes lifecycle-safe pipeline data from contractAddressesData.json. + * @dataSource prop (contractAddressesData.json — active registry rows, lifecycle metadata, keccak hashes, registration state, explorer URLs, RPC URLs) + Arbitrum One RPC (eth_call) + Blockscout API v2 (/api/v2/addresses/) * @aiDiscoverability props-extracted * - * // ContractAddresses: see snippets/data/contract-addresses/contractAddressesData.jsx + * // ContractAddresses: see snippets/data/contract-addresses/contractAddressesData.json * @param {ContractAddresses} data - Pipeline contract addresses data object. * @param {string} [className=''] - Optional CSS class override. * @param {object} [style={}] - Optional inline style override. */ -export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) => { +'use client' +import { CopyText } from '/snippets/components/elements/text/Text.jsx' +import { ArbitrumIcon } from '/snippets/components/elements/icons/Icons.jsx' + +/** + * @component ContractVerifier + * @category data + * @status experimental + * @description Verifies Livepeer contract addresses by contract name or pasted address using pipeline data and chain lookups. + * @param {Object} data - Pipeline contract addresses data object. + * @param {string} [className=''] - Optional CSS class override. + * @param {object} [style={}] - Optional inline style override. + */ +export const ContractVerifier = ({ + data, + className = '', + style = {}, + ...rest +}) => { + function buildContractVerifierChainData(innerData = {}, chainKey) { + const chainData = (innerData && innerData[chainKey]) || {} + const activeEntries = chainData.active || chainData.current || [] + const inventoryEntries = chainData.inventory || [ + ...activeEntries, + ...(chainData.currentImplementations || []), + ] + const canonical = {} + + activeEntries.forEach((entry) => { + if (!canonical[entry.name]) { + canonical[entry.name] = entry + } else if ((entry.type || entry.deploymentKind) === 'proxy') { + canonical[entry.name] = entry + } + }) + + return { activeEntries, inventoryEntries, canonical } + } + + function buildContractVerifierLookupData(innerData = {}) { + const chainOrder = ['arbitrumOne', 'ethereumMainnet'] + const entriesByName = {} + const primaryByName = {} + + chainOrder.forEach((chainKey) => { + const { canonical } = buildContractVerifierChainData(innerData, chainKey) + Object.values(canonical).forEach((entry) => { + if (!entriesByName[entry.name]) { + entriesByName[entry.name] = [] + } + entriesByName[entry.name].push(entry) + if (!primaryByName[entry.name]) { + primaryByName[entry.name] = entry + } + }) + }) + + Object.values(entriesByName).forEach((entries) => { + entries.sort((a, b) => { + const chainA = chainOrder.indexOf(a.chain || '') + const chainB = chainOrder.indexOf(b.chain || '') + if (chainA !== chainB) return chainA - chainB + return a.name.localeCompare(b.name) + }) + }) + + return { + entriesByName, + lookupEntries: Object.values(primaryByName), + } + } + + function buildContractVerifierGlobalInventory(innerData = {}) { + const chainOrder = ['arbitrumOne', 'ethereumMainnet'] + const entries = [] + + chainOrder.forEach((chainKey) => { + const chainData = buildContractVerifierChainData(innerData, chainKey) + chainData.inventoryEntries.forEach((entry) => { + entries.push(entry) + }) + }) + + return entries + } + + function normalizeContractVerifierAddress(innerAddress = '') { + return String(innerAddress || '').trim().toLowerCase() + } + + function findContractVerifierInventoryMatch( + innerData = {}, + innerAddress = '' + ) { + const needle = normalizeContractVerifierAddress(innerAddress) + if (!needle) return null + + return ( + buildContractVerifierGlobalInventory(innerData).find( + (entry) => + normalizeContractVerifierAddress(entry?.address) === needle + ) || null + ) + } + + function buildContractVerifierVerifyChains( + innerData = {}, + innerAddress = '', + preferredChain = 'arbitrumOne' + ) { + const chainOrder = ['arbitrumOne', 'ethereumMainnet'] + const pipelineMatch = findContractVerifierInventoryMatch( + innerData, + innerAddress + ) + const ordered = [] + + if (pipelineMatch?.chain && chainOrder.includes(pipelineMatch.chain)) { + ordered.push(pipelineMatch.chain) + } + if ( + chainOrder.includes(preferredChain) && + !ordered.includes(preferredChain) + ) { + ordered.push(preferredChain) + } + chainOrder.forEach((chainKey) => { + if (!ordered.includes(chainKey)) { + ordered.push(chainKey) + } + }) + + return ordered + } + + function isContractVerifierControllerLookupEligible(entry, hasController) { + const entryMeta = (entry && entry.meta) || {} + const hash = entryMeta.keccakHash || null + const structuredRegistered = + entry?.verification?.controller?.controllerRegistered + const topLevelRegistered = + typeof entry?.controllerRegistered === 'boolean' + ? entry.controllerRegistered + : null + const metaRegistered = + typeof entryMeta.controllerRegistered === 'boolean' + ? entryMeta.controllerRegistered + : null + const registrationState = + entryMeta.registrationState || + entry?.verification?.controller?.registrationState || + null + let isRegistered = null + + if (typeof structuredRegistered === 'boolean') { + isRegistered = structuredRegistered + } else if (typeof topLevelRegistered === 'boolean') { + isRegistered = topLevelRegistered + } else if (typeof metaRegistered === 'boolean') { + isRegistered = metaRegistered + } else if (registrationState === 'registered') { + isRegistered = true + } else if ( + registrationState && + registrationState !== 'unknown' && + registrationState !== 'not_applicable' + ) { + isRegistered = false + } else if (typeof entryMeta.registeredInController === 'boolean') { + isRegistered = entryMeta.registeredInController + } + + return Boolean(hasController && hash && isRegistered === true) + } // ── CONSTANTS ────────────────────────────────────────────────────────── const ZERO_ADDR = '0x0000000000000000000000000000000000000000' - const SELECTOR = '0xe16c7d98' // keccak256("getContract(bytes32)")[:4] + const SELECTOR = '0xe16c7d98' // keccak256("getContract(bytes32)")[:4] // ── CHAIN CONFIG (derived from pipeline data.meta) ──────────────────── const meta = (data && data.meta) || {} @@ -26,7 +199,8 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) arbitrumOne: { label: 'Arbitrum One', rpcUrls: rpcUrls.arbitrumOne || ['https://arb1.arbitrum.io/rpc'], - blockscout: explorers.blockscoutArbitrum || 'https://arbitrum.blockscout.com', + blockscout: + explorers.blockscoutArbitrum || 'https://arbitrum.blockscout.com', etherscan: explorers.arbiscan || 'https://arbiscan.io', hasController: true, }, @@ -40,35 +214,39 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) } // ── DERIVE CONTRACT LISTS FROM PIPELINE DATA ────────────────────────── - const buildChainData = (chainKey) => { - const chainData = data && data[chainKey] - const entries = (chainData && chainData.current) || [] - // Active only: skip historical entries, prefer proxy over standalone over target - const canonical = {} - entries.forEach(c => { - if (c.isHistorical) return - if (!canonical[c.name]) { - canonical[c.name] = c - } else if (c.type === 'proxy') { - canonical[c.name] = c - } - }) - return { entries, canonical } - } - // ── STATE ───────────────────────────────────────────────────────────── const [chain, setChain] = useState('arbitrumOne') const [tab, setTab] = useState('lookup') - const [selectedName, setSelectedName] = useState('BondingManager') + const [selectedName, setSelectedName] = useState('') const [address, setAddress] = useState('') const [result, setResult] = useState(null) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) // ── CHAIN-DERIVED DATA ──────────────────────────────────────────────── - const chainConfig = CHAINS[chain] - const { entries: contracts, canonical: canonicalMap } = buildChainData(chain) - const controllerEntry = contracts.find(c => c.name === 'Controller') + const getChainBundle = (chainKey) => { + const chainData = buildContractVerifierChainData(data, chainKey) + const activeContracts = chainData.activeEntries + const controller = activeContracts.find((c) => c.name === 'Controller') + + return { + chainConfig: CHAINS[chainKey], + contracts: activeContracts, + inventoryEntries: chainData.inventoryEntries, + canonical: chainData.canonical, + controllerAddress: controller + ? controller.address + : '0xD8E8328501E9645d16Cf49539efC04f734606ee4', + } + } + + const currentChainBundle = getChainBundle(chain) + const chainConfig = currentChainBundle.chainConfig + const { contracts, inventoryEntries } = currentChainBundle + const globalInventoryEntries = buildContractVerifierGlobalInventory(data) + const { lookupEntries, entriesByName: lookupEntriesByName } = + buildContractVerifierLookupData(data) + const controllerEntry = contracts.find((c) => c.name === 'Controller') const CONTROLLER = controllerEntry ? controllerEntry.address : '0xD8E8328501E9645d16Cf49539efC04f734606ee4' @@ -76,121 +254,159 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) // Lookup mode: ALL active contracts from pipeline, grouped by category // Controller-registered contracts get an RPC on-chain call // Non-registered contracts get a Blockscout verify instead - const CATEGORY_ORDER = ['core', 'token', 'governance', 'bridge', 'migration', 'utility'] - const lookupEntries = Object.values(canonicalMap) - .sort((a, b) => { - const catA = CATEGORY_ORDER.indexOf(a.category || '') - const catB = CATEGORY_ORDER.indexOf(b.category || '') - if (catA !== catB) return catA - catB - return a.name.localeCompare(b.name) - }) + const CATEGORY_ORDER = [ + 'core', + 'token', + 'governance', + 'bridge', + 'migration', + 'utility', + ] + const sortedLookupEntries = lookupEntries.sort((a, b) => { + const catA = CATEGORY_ORDER.indexOf(a.category || '') + const catB = CATEGORY_ORDER.indexOf(b.category || '') + if (catA !== catB) return catA - catB + return a.name.localeCompare(b.name) + }) // Build grouped options for the dropdown const lookupGroups = {} - lookupEntries.forEach(c => { + sortedLookupEntries.forEach((c) => { const cat = c.category || 'other' if (!lookupGroups[cat]) lookupGroups[cat] = [] lookupGroups[cat].push(c.name) }) - const lookupNames = lookupEntries.map(c => c.name) + const isLookupReady = selectedName.trim() !== '' + const CATEGORY_META = { + core: { label: 'Core', icon: 'gear' }, + token: { label: 'Token', icon: 'coins' }, + governance: { label: 'Governance', icon: 'landmark' }, + bridge: { label: 'Bridge', icon: 'bridge' }, + migration: { label: 'Migration', icon: 'clock-rotate-left' }, + utility: { label: 'Utility', icon: 'wrench' }, + other: { label: 'Other', icon: 'circle' }, + } + const TYPE_META = { + proxy: { label: 'Proxy', color: 'surface' }, + target: { label: 'Implementation', color: 'blue' }, + standalone: { label: 'Direct', color: 'green' }, + } // ── HANDLERS ────────────────────────────────────────────────────────── - const rpcCall = async (calldata) => { - const urls = chainConfig.rpcUrls - for (const url of urls) { - try { - const res = await fetch(url, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - jsonrpc: '2.0', - method: 'eth_call', - params: [{ to: CONTROLLER, data: calldata }, 'latest'], - id: 1, - }), - }) - const json = await res.json() - if (json.error) throw new Error(json.error.message) - return json.result - } catch (e) { - if (url === urls[urls.length - 1]) throw e - } + const lookupByName = async () => { + const chosenName = selectedName.trim() + if (!chosenName) { + setError('Select a contract first.') + setResult(null) + return } - } - const lookupByName = async () => { setLoading(true) setError(null) setResult(null) - const entry = canonicalMap[selectedName] - const entryMeta = (entry && entry.meta) || {} - const hash = entryMeta.keccakHash || null - const isRegistered = typeof entryMeta.registeredInController === 'boolean' - ? entryMeta.registeredInController - : null - const canRpcLookup = chainConfig.hasController && hash && isRegistered === true try { - // Helper: verify via Blockscout - const blockscoutVerify = async (addr) => { - const res = await fetch(`${chainConfig.blockscout}/api/v2/addresses/${addr}`) - if (!res.ok) throw new Error(`Blockscout returned ${res.status}`) - return await res.json() + const lookupTargets = lookupEntriesByName[chosenName] || [] + if (!lookupTargets.length) { + setError(`No data available for "${chosenName}".`) + return } - if (canRpcLookup) { - // Path A: Try Controller RPC call - const calldata = SELECTOR + (hash.startsWith('0x') ? hash.slice(2) : hash) - const rpcResult = await rpcCall(calldata) - const resolved = '0x' + rpcResult.slice(-40) - const isZero = resolved.toLowerCase() === ZERO_ADDR - - if (isZero && entry) { - // Controller doesn't know this contract — fall through to Blockscout - const bsData = await blockscoutVerify(entry.address) - setResult({ - mode: 'lookup', - resolved: entry.address, - isZero: false, - matches: null, - name: selectedName, - expectedAddress: entry.address, - verifiedVia: 'blockscout', - is_contract: bsData.is_contract, - is_verified: bsData.is_verified, - explorerName: bsData.name || null, - has_logs: bsData.has_logs || false, - category: entry.category, - type: entry.type, - }) - } else { - const expected = entry ? entry.address : null - const matches = !isZero && expected - && resolved.toLowerCase() === expected.toLowerCase() - setResult({ - mode: 'lookup', + const verifyLookupEntry = async (entry) => { + const entryChain = entry?.chain || chain + const entryChainBundle = getChainBundle(entryChain) + const entryChainConfig = entryChainBundle.chainConfig + const entryController = entryChainBundle.controllerAddress + const canRpcLookup = isContractVerifierControllerLookupEligible( + entry, + entryChainConfig.hasController + ) + const entryMeta = (entry && entry.meta) || {} + const hash = entryMeta.keccakHash || null + + const blockscoutVerify = async (addr) => { + const res = await fetch( + `${entryChainConfig.blockscout}/api/v2/addresses/${addr}` + ) + if (!res.ok) throw new Error(`Blockscout returned ${res.status}`) + return await res.json() + } + + const rpcCallForEntry = async (calldata) => { + const urls = entryChainConfig.rpcUrls + for (const url of urls) { + try { + const res = await fetch(url, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + jsonrpc: '2.0', + method: 'eth_call', + params: [{ to: entryController, data: calldata }, 'latest'], + id: 1, + }), + }) + const json = await res.json() + if (json.error) throw new Error(json.error.message) + return json.result + } catch (e) { + if (url === urls[urls.length - 1]) throw e + } + } + } + + if (canRpcLookup) { + const calldata = + SELECTOR + (hash.startsWith('0x') ? hash.slice(2) : hash) + const rpcResult = await rpcCallForEntry(calldata) + const resolved = '0x' + rpcResult.slice(-40) + const isZero = resolved.toLowerCase() === ZERO_ADDR + + if (isZero) { + const bsData = await blockscoutVerify(entry.address) + return { + mode: 'lookup-entry', + entry, + resolved: entry.address, + isZero: false, + matches: null, + name: chosenName, + expectedAddress: entry.address, + verifiedVia: 'blockscout', + is_contract: bsData.is_contract, + is_verified: bsData.is_verified, + explorerName: bsData.name || null, + has_logs: bsData.has_logs || false, + category: entry.category, + type: entry.type, + } + } + + const matches = resolved.toLowerCase() === entry.address.toLowerCase() + + return { + mode: 'lookup-entry', + entry, resolved, isZero: false, matches, - name: selectedName, - expectedAddress: expected, + name: chosenName, + expectedAddress: entry.address, verifiedVia: 'controller', - category: entry ? entry.category : null, - type: entry ? entry.type : null, - }) + category: entry.category, + type: entry.type, + } } - } else if (entry) { - // Path B: No Controller lookup available, verify via Blockscout - const res = await fetch(`${chainConfig.blockscout}/api/v2/addresses/${entry.address}`) - if (!res.ok) throw new Error(`Blockscout returned ${res.status}`) - const bsData = await res.json() - setResult({ - mode: 'lookup', + + const bsData = await blockscoutVerify(entry.address) + return { + mode: 'lookup-entry', + entry, resolved: entry.address, isZero: false, matches: null, - name: selectedName, + name: chosenName, expectedAddress: entry.address, verifiedVia: 'blockscout', is_contract: bsData.is_contract, @@ -199,10 +415,18 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) has_logs: bsData.has_logs || false, category: entry.category, type: entry.type, - }) - } else { - setError(`No data available for "${selectedName}".`) + } } + + const lookupResults = await Promise.all( + lookupTargets.map((entry) => verifyLookupEntry(entry)) + ) + + setResult({ + mode: 'lookup', + name: chosenName, + entries: lookupResults, + }) } catch (e) { setError(e.message || 'Verification failed') } finally { @@ -213,34 +437,69 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) const verifyAddress = async () => { const trimmed = address.trim() if (!/^0x[0-9a-fA-F]{40}$/.test(trimmed)) { - setError('Invalid address format. Expected 0x followed by 40 hex characters.') + setError( + 'Invalid address format. Expected 0x followed by 40 hex characters.' + ) return } setLoading(true) setError(null) setResult(null) try { - const res = await fetch(`${chainConfig.blockscout}/api/v2/addresses/${trimmed}`) - if (!res.ok) throw new Error(`Blockscout returned ${res.status}`) - const bsData = await res.json() - const nameStr = (bsData.name || '').toLowerCase() - const isLivepeerNamed = nameStr.includes('livepeer') || nameStr.includes('proxy') - // Check if this address is in our pipeline data - const pipelineMatch = contracts.find( - c => c.address.toLowerCase() === trimmed.toLowerCase() - ) + const pipelineMatch = + findContractVerifierInventoryMatch(data, trimmed) + const verifyChains = buildContractVerifierVerifyChains(data, trimmed, chain) + let explorerResult = null + let lastExplorerError = null + + for (const chainKey of verifyChains) { + const verifyChainConfig = CHAINS[chainKey] + if (!verifyChainConfig?.blockscout) continue + + try { + const res = await fetch( + `${verifyChainConfig.blockscout}/api/v2/addresses/${trimmed}` + ) + if (!res.ok) throw new Error(`Blockscout returned ${res.status}`) + const bsData = await res.json() + explorerResult = { chainKey, data: bsData } + if (bsData?.is_contract || pipelineMatch?.chain === chainKey) { + break + } + } catch (error_) { + lastExplorerError = error_ + } + } + + if (!explorerResult && !pipelineMatch) { + throw lastExplorerError || new Error('Explorer verification failed') + } + + const bsData = explorerResult?.data || {} + const resolvedChain = + pipelineMatch?.chain || explorerResult?.chainKey || chain + const nameStr = (bsData.name || pipelineMatch?.name || '').toLowerCase() + const isLivepeerNamed = + Boolean(pipelineMatch) || + nameStr.includes('livepeer') || + nameStr.includes('proxy') + setResult({ mode: 'verify', - is_contract: bsData.is_contract, - is_verified: bsData.is_verified, - name: bsData.name || null, + is_contract: bsData.is_contract ?? Boolean(pipelineMatch), + is_verified: + bsData.is_verified ?? + pipelineMatch?.sourceVerified ?? + null, + name: bsData.name || pipelineMatch?.name || null, isLivepeerNamed, has_logs: bsData.has_logs || false, queriedAddress: trimmed, pipelineMatch: pipelineMatch || null, + resolvedChain, }) } catch (e) { - setError(e.message || 'Blockscout query failed') + setError(e.message || 'Explorer query failed') } finally { setLoading(false) } @@ -249,6 +508,94 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) const castFallback = (name) => `cast call ${CONTROLLER} \\\n "getContract(bytes32)(address)" \\\n $(cast keccak "${name}") \\\n --rpc-url ${chainConfig.rpcUrls[0]}` + const getChainMeta = (chainKey) => { + if (chainKey === 'ethereumMainnet') { + return { + label: 'Ethereum Mainnet', + explorerLabel: 'Etherscan', + icon: <Icon icon="ethereum" color="var(--hero-text)" size={13} />, + } + } + + return { + label: 'Arbitrum One', + explorerLabel: 'Arbiscan', + icon: <ArbitrumIcon color="var(--arbitrum)" size={13} />, + } + } + + const getVerificationBullets = (entry, lookupResult) => { + const bullets = [] + const verification = entry?.verification || {} + + if (lookupResult?.verifiedVia === 'controller' && lookupResult?.matches) { + bullets.push('Matches the current on-chain Controller registry entry.') + } else if ( + lookupResult?.verifiedVia === 'blockscout' && + lookupResult?.is_contract + ) { + bullets.push('Explorer confirms this address is a deployed contract.') + } + + if ( + verification?.controller?.controllerRegistered === true && + lookupResult?.verifiedVia !== 'controller' + ) { + bullets.push( + 'This contract family is registered in the current Controller registry.' + ) + } + + if ( + verification?.proxy?.applicable && + verification?.proxy?.implementationAddress + ) { + if (verification?.proxy?.implementationMatchesExpected === true) { + bullets.push( + 'Proxy runtime resolves to the expected current implementation.' + ) + } else if (verification?.proxy?.implementationMatchesExpected === false) { + bullets.push( + 'Proxy runtime does not match the expected implementation.' + ) + } else { + bullets.push( + 'Proxy runtime resolves to a current downstream implementation.' + ) + } + } + + if (entry?.sourceVerified || lookupResult?.is_verified) { + bullets.push('Explorer source code is verified.') + } + + return [...new Set(bullets)] + } + + const getVerifyBullets = (verifyResult) => { + const bullets = [] + const matchedEntry = verifyResult?.pipelineMatch || null + + if (matchedEntry) { + bullets.push( + `Matches the published Livepeer registry entry for ${matchedEntry.name}.` + ) + } + if (verifyResult?.is_verified) { + bullets.push('Explorer source code is verified.') + } + if (verifyResult?.has_logs) { + bullets.push('Explorer shows transaction history for this contract.') + } + if (verifyResult?.isLivepeerNamed) { + bullets.push( + 'Explorer labelling identifies this address as Livepeer-related.' + ) + } + + return [...new Set(bullets)] + } + // ── STYLES ──────────────────────────────────────────────────────────── const styles = { @@ -328,7 +675,56 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) padding: '1rem', display: 'flex', flexDirection: 'column', + gap: '0.75rem', + }, + identityBlock: { + display: 'flex', + flexDirection: 'column', + gap: '0.45rem', + }, + titleRow: { + display: 'flex', + alignItems: 'center', gap: '0.5rem', + flexWrap: 'wrap', + }, + chainRow: { + display: 'flex', + alignItems: 'center', + gap: '0.35rem', + flexWrap: 'wrap', + }, + titleText: { + fontWeight: 700, + fontSize: '1rem', + lineHeight: 1.3, + }, + chainText: { + display: 'inline-flex', + alignItems: 'center', + gap: '0.35rem', + color: 'var(--muted-text)', + fontSize: '0.85rem', + whiteSpace: 'nowrap', + }, + categoryRow: { + display: 'flex', + alignItems: 'center', + gap: '0.5rem', + flexWrap: 'wrap', + }, + metaLabel: { + fontSize: '0.9rem', + fontWeight: 600, + color: 'var(--muted-text)', + }, + categoryText: { + display: 'inline-flex', + alignItems: 'center', + gap: '0.35rem', + fontSize: '0.9rem', + fontWeight: 600, + color: 'var(--hero-text)', }, addressText: { fontFamily: 'monospace', @@ -404,175 +800,250 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) gap: '0.5rem', fontSize: '0.9rem', }, + verificationBlock: { + display: 'flex', + flexDirection: 'column', + gap: '0.35rem', + }, + sectionTitle: { + display: 'inline-flex', + alignItems: 'center', + gap: '0.4rem', + fontSize: '0.9rem', + fontWeight: 600, + color: 'var(--hero-text)', + }, + verificationList: { + margin: 0, + paddingLeft: '1.1rem', + display: 'flex', + flexDirection: 'column', + gap: '0.25rem', + fontSize: '0.9rem', + color: 'var(--foreground)', + }, + addressBlock: { + width: '100%', + maxWidth: '100%', + display: 'flex', + flexDirection: 'column', + gap: '0.5rem', + }, mismatchNote: { fontSize: '0.85rem', color: 'var(--lp-color-status-warn)', marginTop: '0.25rem', }, + resultStack: { + display: 'flex', + flexDirection: 'column', + gap: '0.75rem', + }, } // ── RENDER HELPERS ──────────────────────────────────────────────────── - const renderLookupResult = () => { - if (!result || result.mode !== 'lookup') return null - - const addr = result.resolved || result.expectedAddress - const categoryLabel = result.category - ? result.category.charAt(0).toUpperCase() + result.category.slice(1) - : null - const typeLabel = result.type || null + const renderIdentity = (entry, statusBadge, fallbackName) => { + const categoryKey = entry?.category || 'other' + const category = CATEGORY_META[categoryKey] || CATEGORY_META.other + const typeMeta = TYPE_META[entry?.type || entry?.deploymentKind] || null + const chainMeta = getChainMeta(entry?.chain || chain) - // Path A: Controller RPC result (zero results now auto-fall-through to Blockscout in handler) - if (result.verifiedVia === 'controller') { - return ( - <div style={styles.card}> - <div style={styles.signalRow}> - <span style={result.matches ? styles.badgeMatch : styles.badgeMismatch}> - {result.matches ? 'MATCH' : 'MISMATCH'} - </span> - <span style={{ fontWeight: 600 }}>{result.name}</span> - {categoryLabel && ( - <span style={{ fontSize: '0.85rem', color: 'var(--muted-text)' }}> - ({categoryLabel}{typeLabel ? ', ' + typeLabel : ''}) - </span> - )} - </div> - <div style={{ fontSize: '0.85rem', color: 'var(--muted-text)' }}>Verified on-chain via Controller registry</div> - <div style={styles.addressText}>{result.resolved}</div> - {!result.matches && ( - <div style={styles.mismatchNote}> - MISMATCH may indicate a governance upgrade. Cross-check{' '} - <a - href="https://github.com/livepeer/governor-scripts/blob/master/updates/addresses.js" - target="_blank" - rel="noopener noreferrer" - style={styles.link} - >governor-scripts</a>. - </div> - )} - <div style={styles.links}> - <a href={`${chainConfig.etherscan}/address/${result.resolved}`} target="_blank" rel="noopener noreferrer" style={styles.link}>View on Arbiscan</a> - <a href={`${chainConfig.blockscout}/address/${result.resolved}`} target="_blank" rel="noopener noreferrer" style={styles.link}>View on Blockscout</a> + return ( + <div style={styles.identityBlock}> + <div style={styles.titleRow}> + {statusBadge} + <span style={styles.titleText}>{entry?.name || fallbackName}</span> + </div> + <div style={styles.chainRow}> + <span style={styles.chainText}> + {chainMeta.icon} + {chainMeta.label} + </span> + </div> + <div style={styles.categoryRow}> + <span style={styles.metaLabel}>Category:</span> + <span style={styles.categoryText}> + <Icon icon={category.icon} color="var(--accent)" size={13} /> + {category.label} + </span> + </div> + {typeMeta && ( + <div style={styles.categoryRow}> + <span style={styles.metaLabel}>Type:</span> + <Badge color={typeMeta.color}>{typeMeta.label}</Badge> </div> + )} + </div> + ) + } + + const renderAddressBlock = (address, chainKey) => { + if (!address) return null + + return ( + <div style={styles.addressBlock}> + <div style={styles.sectionTitle}>Address</div> + <CopyText text={address} style={{ width: '100%' }} /> + {renderExplorerLinks(address, chainKey)} + </div> + ) + } + + const renderVerificationBlock = (bullets) => { + if (!bullets.length) return null + + return ( + <div style={styles.verificationBlock}> + <div style={styles.sectionTitle}> + <Icon icon="check" color="var(--hero-text)" size={13} /> + Verification: </div> + <ul style={styles.verificationList}> + {bullets.map((bullet) => ( + <li key={bullet}>{bullet}</li> + ))} + </ul> + </div> + ) + } + + const renderExplorerLinks = (address, chainKey) => { + const chainMeta = getChainMeta(chainKey) + + return ( + <div style={styles.links}> + <a + href={`${CHAINS[chainKey].etherscan}/address/${address}`} + target="_blank" + rel="noopener noreferrer" + style={styles.link} + > + View on {chainMeta.explorerLabel} + </a> + <a + href={`${CHAINS[chainKey].blockscout}/address/${address}`} + target="_blank" + rel="noopener noreferrer" + style={styles.link} + > + View on Blockscout + </a> + </div> + ) + } + + const renderLookupCard = (lookupResult, index) => { + const entry = lookupResult.entry || null + const verificationBullets = getVerificationBullets(entry, lookupResult) + const statusBadge = + lookupResult.verifiedVia === 'controller' ? ( + <span + style={ + lookupResult.matches ? styles.badgeMatch : styles.badgeMismatch + } + > + {lookupResult.matches ? 'MATCH' : 'MISMATCH'} + </span> + ) : ( + <span + style={lookupResult.is_contract ? styles.badgeGood : styles.badgeWarn} + > + {lookupResult.is_contract ? 'VERIFIED' : 'CHECKED'} + </span> ) - } - // Path B: Blockscout verification (not in Controller) - if (result.verifiedVia === 'blockscout') { - return ( - <div style={styles.card}> - <div style={styles.signalRow}> - <span style={{ fontWeight: 600 }}>{result.name}</span> - {categoryLabel && ( - <span style={{ fontSize: '0.85rem', color: 'var(--muted-text)' }}> - ({categoryLabel}{typeLabel ? ', ' + typeLabel : ''}) - </span> - )} - </div> - <div style={{ fontSize: '0.85rem', color: 'var(--muted-text)' }}>Verified via Blockscout explorer</div> - <div style={styles.addressText}>{result.resolved}</div> + return ( + <div + key={`${lookupResult.name}-${entry?.chain || chain}-${index}`} + style={styles.card} + > + {renderIdentity(entry, statusBadge, lookupResult.name)} + {renderAddressBlock(lookupResult.resolved, entry?.chain || chain)} + {renderVerificationBlock(verificationBullets)} + {lookupResult.explorerName && ( <div style={styles.signalRow}> - <span style={{ fontWeight: 600 }}>Contract:</span> - {result.is_contract - ? <span style={styles.badgeGood}>Yes</span> - : <span style={styles.badgeMismatch}>Not a contract</span> - } + <span style={{ fontWeight: 600 }}>Explorer label:</span> + <span>{lookupResult.explorerName}</span> </div> - <div style={styles.signalRow}> - <span style={{ fontWeight: 600 }}>Source verified:</span> - {result.is_verified - ? <span style={styles.badgeGood}>Verified</span> - : <span style={styles.badgeWarn}>Not verified</span> - } - </div> - {result.explorerName && ( - <div style={styles.signalRow}> - <span style={{ fontWeight: 600 }}>Explorer name:</span> - <span>{result.explorerName}</span> - </div> - )} - <div style={styles.links}> - <a href={`${chainConfig.etherscan}/address/${result.resolved}`} target="_blank" rel="noopener noreferrer" style={styles.link}>View on Arbiscan</a> - <a href={`${chainConfig.blockscout}/address/${result.resolved}`} target="_blank" rel="noopener noreferrer" style={styles.link}>View on Blockscout</a> + )} + {lookupResult.verifiedVia === 'controller' && !lookupResult.matches && ( + <div style={styles.mismatchNote}> + Mismatch means the page data and current Controller result do not + agree. Treat this as a blocking proof-chain mismatch until the + canonical registry is refreshed. </div> - </div> - ) - } + )} + </div> + ) + } - return null + const renderLookupResult = () => { + if (!result || result.mode !== 'lookup') return null + if (!Array.isArray(result.entries) || !result.entries.length) return null + + return ( + <div style={styles.resultStack}> + {result.entries.map((entryResult, index) => + renderLookupCard(entryResult, index) + )} + </div> + ) } const renderVerifyResult = () => { if (!result || result.mode !== 'verify') return null + const matchedEntry = result.pipelineMatch || null + const verificationBullets = getVerifyBullets(result) + const statusBadge = matchedEntry ? ( + <span style={styles.badgeMatch}>MATCH</span> + ) : ( + <span style={styles.badgeWarn}>CHECKED</span> + ) + if (!result.is_contract) { return ( <div style={styles.card}> <span style={styles.badgeMismatch}>NOT A CONTRACT</span> <span style={{ fontSize: '0.9rem' }}> - This address is not a contract on Arbitrum One. It may be an - externally owned account (EOA) or does not exist on this chain. + This address is not a contract on Arbitrum One or Ethereum + Mainnet. It may be an externally owned account (EOA) or does not + exist on either supported chain. </span> </div> ) } return ( <div style={styles.card}> - {result.pipelineMatch && ( - <div style={styles.signalRow}> - <span style={styles.badgeGood}>Known Livepeer contract</span> - <span style={{ fontWeight: 600 }}>{result.pipelineMatch.name}</span> - <span style={{ fontSize: '0.85rem', color: 'var(--muted-text)' }}> - ({result.pipelineMatch.type}, {result.pipelineMatch.category}) - </span> - </div> + {renderIdentity( + matchedEntry || { + name: result.name || 'Address lookup', + chain: result.resolvedChain || chain, + }, + statusBadge, + result.name || 'Address lookup' + )} + {renderAddressBlock( + result.queriedAddress, + result.resolvedChain || matchedEntry?.chain || chain )} + {renderVerificationBlock(verificationBullets)} {result.name && ( <div style={styles.signalRow}> - <span style={{ fontWeight: 600 }}>Explorer name:</span> + <span style={{ fontWeight: 600 }}>Explorer label:</span> <span>{result.name}</span> {result.isLivepeerNamed && !result.pipelineMatch && ( <span style={styles.badgeGood}>Livepeer identified</span> )} </div> )} - <div style={styles.signalRow}> - <span style={{ fontWeight: 600 }}>Contract:</span> - <span style={styles.badgeGood}>Yes</span> - </div> - <div style={styles.signalRow}> - <span style={{ fontWeight: 600 }}>Source verified:</span> - {result.is_verified - ? <span style={styles.badgeGood}>Verified</span> - : <span style={styles.badgeWarn}>Not verified</span> - } - </div> - <div style={styles.signalRow}> - <span style={{ fontWeight: 600 }}>Transaction logs:</span> - {result.has_logs - ? <span style={styles.badgeGood}>Present</span> - : <span style={styles.badgeWarn}>None found</span> - } - </div> {!result.pipelineMatch && ( <div style={styles.signalRow}> - <span style={styles.badgeWarn}>Not in Livepeer contract registry</span> + <span style={styles.badgeWarn}> + Not matched to the published Livepeer registry + </span> </div> )} - <div style={styles.links}> - <a - href={`${chainConfig.etherscan}/address/${result.queriedAddress}`} - target="_blank" - rel="noopener noreferrer" - style={styles.link} - >View on Arbiscan</a> - <a - href={`${BLOCKSCOUT}/address/${result.queriedAddress}`} - target="_blank" - rel="noopener noreferrer" - style={styles.link} - >View on Blockscout</a> - </div> </div> ) } @@ -584,27 +1055,44 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) {/* Description */} {tab === 'lookup' && ( <div style={{ fontSize: '0.9rem', color: 'var(--muted-text)' }}> - Select a contract and verify its address on-chain. + Select a published contract and verify its current address against the + strongest available on-chain or explorer check. </div> )} {tab === 'verify' && ( <div style={{ fontSize: '0.9rem', color: 'var(--muted-text)' }}> - Paste any address to check whether it is a verified contract on {chainConfig.label}. + Paste any address to check bytecode, explorer verification, and + whether it matches the published Livepeer contract registry on + Arbitrum One or Ethereum Mainnet. </div> )} {/* Tab buttons */} <div style={styles.tabRow}> <button - style={{ ...styles.tabBase, ...(tab === 'lookup' ? styles.tabActive : styles.tabInactive) }} - onClick={() => { setTab('lookup'); setResult(null); setError(null) }} + style={{ + ...styles.tabBase, + ...(tab === 'lookup' ? styles.tabActive : styles.tabInactive), + }} + onClick={() => { + setTab('lookup') + setResult(null) + setError(null) + }} aria-pressed={tab === 'lookup'} > Look up contract </button> <button - style={{ ...styles.tabBase, ...(tab === 'verify' ? styles.tabActive : styles.tabInactive) }} - onClick={() => { setTab('verify'); setResult(null); setError(null) }} + style={{ + ...styles.tabBase, + ...(tab === 'verify' ? styles.tabActive : styles.tabInactive), + }} + onClick={() => { + setTab('verify') + setResult(null) + setError(null) + }} aria-pressed={tab === 'verify'} > Verify address @@ -620,18 +1108,29 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) style={styles.select} aria-label="Contract name" > - {CATEGORY_ORDER.filter(cat => lookupGroups[cat]).map((cat) => ( - <optgroup key={cat} label={cat.charAt(0).toUpperCase() + cat.slice(1)}> + <option value="" disabled> + Select a contract + </option> + {CATEGORY_ORDER.filter((cat) => lookupGroups[cat]).map((cat) => ( + <optgroup + key={cat} + label={cat.charAt(0).toUpperCase() + cat.slice(1)} + > {lookupGroups[cat].map((name) => ( - <option key={name} value={name}>{name}</option> + <option key={name} value={name}> + {name} + </option> ))} </optgroup> ))} </select> <button onClick={lookupByName} - disabled={loading} - style={{ ...styles.button, ...(loading ? styles.buttonDisabled : {}) }} + disabled={!isLookupReady || loading} + style={{ + ...styles.button, + ...(!isLookupReady || loading ? styles.buttonDisabled : {}), + }} > {loading ? 'Querying on-chain...' : 'Look up'} </button> @@ -654,7 +1153,10 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) <button onClick={verifyAddress} disabled={loading} - style={{ ...styles.button, ...(loading ? styles.buttonDisabled : {}) }} + style={{ + ...styles.button, + ...(loading ? styles.buttonDisabled : {}), + }} > {loading ? 'Querying Blockscout...' : 'Verify'} </button> @@ -670,7 +1172,7 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) {error && ( <div> <div style={styles.errorText}>{error}</div> - {tab === 'lookup' && ( + {tab === 'lookup' && selectedName && ( <div style={{ marginTop: '0.75rem' }}> <div style={{ fontSize: '0.85rem', marginBottom: '0.5rem' }}> Verify manually with the Foundry CLI: @@ -682,11 +1184,23 @@ export const ContractVerifier = ({ data, className = "", style = {}, ...rest }) <div style={{ marginTop: '0.5rem', fontSize: '0.85rem' }}> Try inspecting this address directly on{' '} <a - href={chainConfig.etherscan} + href={CHAINS.arbitrumOne.etherscan} + target="_blank" + rel="noopener noreferrer" + style={styles.link} + > + Arbiscan + </a>{' '} + or{' '} + <a + href={CHAINS.ethereumMainnet.etherscan} target="_blank" rel="noopener noreferrer" style={styles.link} - >Arbiscan</a>. + > + Etherscan + </a> + . </div> )} </div> diff --git a/snippets/components/integrators/feeds/contractVerifierData.cjs b/snippets/components/integrators/feeds/contractVerifierData.cjs new file mode 100644 index 000000000..19e0b7160 --- /dev/null +++ b/snippets/components/integrators/feeds/contractVerifierData.cjs @@ -0,0 +1,144 @@ +/** + * CommonJS test wrapper for ContractVerifier data helpers. + * Keep logic aligned with contractVerifierData.js so Node-based tests can import + * the same pure helpers without a JSX transform. + */ + +function buildContractVerifierChainData(data = {}, chainKey) { + const chainData = (data && data[chainKey]) || {}; + const activeEntries = chainData.active || chainData.current || []; + const inventoryEntries = chainData.inventory || [ + ...activeEntries, + ...((chainData.currentImplementations) || []), + ]; + const canonical = {}; + + activeEntries.forEach((entry) => { + if (!canonical[entry.name]) { + canonical[entry.name] = entry; + } else if ((entry.type || entry.deploymentKind) === "proxy") { + canonical[entry.name] = entry; + } + }); + + return { activeEntries, inventoryEntries, canonical }; +} + +function buildContractVerifierLookupData(data = {}) { + const chainOrder = ["arbitrumOne", "ethereumMainnet"]; + const entriesByName = {}; + const primaryByName = {}; + + chainOrder.forEach((chainKey) => { + const { canonical } = buildContractVerifierChainData(data, chainKey); + Object.values(canonical).forEach((entry) => { + if (!entriesByName[entry.name]) { + entriesByName[entry.name] = []; + } + entriesByName[entry.name].push(entry); + if (!primaryByName[entry.name]) { + primaryByName[entry.name] = entry; + } + }); + }); + + Object.values(entriesByName).forEach((entries) => { + entries.sort((a, b) => { + const chainA = chainOrder.indexOf(a.chain || ""); + const chainB = chainOrder.indexOf(b.chain || ""); + if (chainA !== chainB) return chainA - chainB; + return a.name.localeCompare(b.name); + }); + }); + + return { + entriesByName, + lookupEntries: Object.values(primaryByName), + }; +} + +function buildContractVerifierGlobalInventory(data = {}) { + const chainOrder = ["arbitrumOne", "ethereumMainnet"]; + const entries = []; + + chainOrder.forEach((chainKey) => { + const chainData = buildContractVerifierChainData(data, chainKey); + chainData.inventoryEntries.forEach((entry) => { + entries.push(entry); + }); + }); + + return entries; +} + +function normalizeContractVerifierAddress(address = "") { + return String(address || "").trim().toLowerCase(); +} + +function findContractVerifierInventoryMatch(data = {}, address = "") { + const needle = normalizeContractVerifierAddress(address); + if (!needle) return null; + + return buildContractVerifierGlobalInventory(data).find( + (entry) => normalizeContractVerifierAddress(entry?.address) === needle + ) || null; +} + +function buildContractVerifierVerifyChains( + data = {}, + address = "", + preferredChain = "arbitrumOne" +) { + const chainOrder = ["arbitrumOne", "ethereumMainnet"]; + const pipelineMatch = findContractVerifierInventoryMatch(data, address); + const ordered = []; + + if (pipelineMatch?.chain && chainOrder.includes(pipelineMatch.chain)) { + ordered.push(pipelineMatch.chain); + } + if (chainOrder.includes(preferredChain) && !ordered.includes(preferredChain)) { + ordered.push(preferredChain); + } + chainOrder.forEach((chainKey) => { + if (!ordered.includes(chainKey)) { + ordered.push(chainKey); + } + }); + + return ordered; +} + +function isContractVerifierControllerLookupEligible(entry, hasController) { + const entryMeta = (entry && entry.meta) || {}; + const hash = entryMeta.keccakHash || null; + const structuredRegistered = entry?.verification?.controller?.controllerRegistered; + const topLevelRegistered = typeof entry?.controllerRegistered === "boolean" ? entry.controllerRegistered : null; + const metaRegistered = typeof entryMeta.controllerRegistered === "boolean" ? entryMeta.controllerRegistered : null; + const registrationState = entryMeta.registrationState || entry?.verification?.controller?.registrationState || null; + let isRegistered = null; + + if (typeof structuredRegistered === "boolean") { + isRegistered = structuredRegistered; + } else if (typeof topLevelRegistered === "boolean") { + isRegistered = topLevelRegistered; + } else if (typeof metaRegistered === "boolean") { + isRegistered = metaRegistered; + } else if (registrationState === "registered") { + isRegistered = true; + } else if (registrationState && registrationState !== "unknown" && registrationState !== "not_applicable") { + isRegistered = false; + } else if (typeof entryMeta.registeredInController === "boolean") { + isRegistered = entryMeta.registeredInController; + } + + return Boolean(hasController && hash && isRegistered === true); +} + +module.exports = { + buildContractVerifierChainData, + buildContractVerifierGlobalInventory, + buildContractVerifierLookupData, + buildContractVerifierVerifyChains, + findContractVerifierInventoryMatch, + isContractVerifierControllerLookupEligible, +}; diff --git a/snippets/components/wrappers/tables/SearchTable.jsx b/snippets/components/wrappers/tables/SearchTable.jsx index 46a3472a1..8de7c3cbd 100644 --- a/snippets/components/wrappers/tables/SearchTable.jsx +++ b/snippets/components/wrappers/tables/SearchTable.jsx @@ -3,6 +3,7 @@ * @category wrappers * @subcategory tables * @status stable + * @deprecated Use SearchTableV2 for new tables that need content-driven sizing and composable column behaviour. * @description Generic filterable table wrapper with search input, category dropdown(s), and optional separators. * @aiDiscoverability props-extracted * @param {Function} [TableComponent=null] - Table renderer component (e.g. DynamicTable). @@ -16,7 +17,8 @@ * @param {string} [categoryColumn='Category'] - Field name the first dropdown filters on. * @param {Array} [filterColumns=[]] - Additional column names that get dropdown filters. Each scoped by selections above it. * @param {object} [columnWidths={}] - Column width overrides keyed by header name. Passed to TableComponent. - * @param {object} [columnVariant={}] - Column display variants keyed by header name. Supported: "bold", "badge", "textIcon". + * @param {Array} [contentFitColumns=[]] - Column names that should size to their contents when supported by TableComponent. + * @param {object} [columnVariant={}] - Column display variants keyed by header name. Supported: "bold", "badge", "textIcon", "addressWrapper". * @param {Array} [categoryBadges=[]] - Array of {color, label} for "badge" variant rendering. Matched by label (case-insensitive). * @param {Array} [textIcons=[]] - Array of {label, icon} for "textIcon" variant rendering. Icon is JSX rendered inline before the label text. * @param {boolean} [showSeparators=false] - When true, inserts category separator rows. Labels are uppercased. @@ -25,8 +27,36 @@ * @param {string} [className=""] - CSS class name. * @param {object} [style={}] - Inline style overrides. */ +'use client' import { LinkIcon } from '/snippets/components/elements/links/Links.jsx' +import { CopyText } from '/snippets/components/elements/text/Text.jsx' +/** + * @component SearchTable + * @category content + * @status stable + * @description Generic filterable table wrapper with search input, dropdown filters, and optional separator rows. + * @param {Function} [TableComponent=null] - Table renderer component. + * @param {React.ReactNode} [tableTitle=null] - Table title. + * @param {Array} [headerList=[]] - Column header names. + * @param {Array} [itemsList=[]] - Row data objects. + * @param {Array} [monospaceColumns=[]] - Column indices to render in monospace. + * @param {string} margin - Margin passed to TableComponent. + * @param {string} [searchPlaceholder='Search...'] - Placeholder text for the search input. + * @param {Array} [searchColumns=[]] - Column names to search against. + * @param {string} [categoryColumn='Category'] - Field name the first dropdown filters on. + * @param {Array} [filterColumns=[]] - Additional dropdown filter columns. + * @param {object} [columnWidths={}] - Column width overrides keyed by header name. + * @param {Array} [contentFitColumns=[]] - Column names that should size to their contents. + * @param {object} [columnVariant={}] - Column display variants keyed by header name. + * @param {Array} [categoryBadges=[]] - Badge definitions for badge-style cells. + * @param {Array} [textIcons=[]] - Icon definitions for textIcon-style cells. + * @param {boolean} [showSeparators=false] - When true, inserts category separator rows. + * @param {string} [separatorColumn=null] - Override which column drives separators. + * @param {boolean} [boldFirstColumn=true] - Wrap plain-string values in the first column with strong emphasis. + * @param {string} [className=''] - CSS class name. + * @param {object} [style={}] - Inline style overrides. + */ export const SearchTable = ({ TableComponent = null, tableTitle = null, @@ -39,6 +69,7 @@ export const SearchTable = ({ categoryColumn = 'Category', filterColumns = [], columnWidths = {}, + contentFitColumns = [], columnVariant = {}, categoryBadges = [], textIcons = [], @@ -138,7 +169,7 @@ export const SearchTable = ({ // --- Apply column variants --- const firstColumnName = safeHeaderList[0] - const renderVariant = (value, variant, item) => { + const renderVariant = (value, variant, item, header) => { if (variant === 'bold' && typeof value === 'string') { return <strong>{value}</strong> } @@ -165,7 +196,7 @@ export const SearchTable = ({ } } if (variant === 'addressWrapper' && typeof value === 'string') { - const href = item?._addressHref + const href = item?.[`_${header}Href`] ?? item?._addressHref return ( <div style={{ @@ -191,7 +222,7 @@ export const SearchTable = ({ } for (const header of safeHeaderList) { if (columnVariant[header] && out[header] !== undefined) { - out[header] = renderVariant(out[header], columnVariant[header], item) + out[header] = renderVariant(out[header], columnVariant[header], item, header) } } if ( @@ -299,6 +330,343 @@ export const SearchTable = ({ itemsList={withSeparators} monospaceColumns={safeMonospaceColumns} columnWidths={columnWidths} + contentFitColumns={contentFitColumns} + showSeparators={showSeparators} + margin={margin} + /> + ) : ( + <Warning>SearchTable requires a `TableComponent` prop.</Warning> + )} + </div> + ) +} + +/** + * @component SearchTableV2 + * @category content + * @subcategory tables + * @status experimental + * @description Generic filterable table wrapper with intrinsic-width sizing for badge, icon, and primary text columns. + * @aiDiscoverability props-extracted + * @param {Function} [TableComponent=null] - Table renderer component (e.g. DynamicTableV2). + * @param {React.ReactNode} [tableTitle=null] - Table title. + * @param {Array} [headerList=[]] - Column header names. + * @param {Array} [itemsList=[]] - Row data objects. Cell values can be strings or JSX. + * @param {Array} [monospaceColumns=[]] - Column indices to render in monospace. + * @param {string} margin - Margin passed to TableComponent. + * @param {string} [searchPlaceholder='Search...'] - Placeholder text for the search input. + * @param {Array} [searchColumns=[]] - Column names to search against. Defaults to all headers. + * @param {string} [categoryColumn='Category'] - Field name the first dropdown filters on. + * @param {Array} [filterColumns=[]] - Additional column names that get dropdown filters. Each scoped by selections above it. + * @param {object} [columnWidths={}] - Column width overrides keyed by header name. Passed to TableComponent. + * @param {object} [columnConfig={}] - Optional column sizing overrides merged with V2 defaults. + * @param {object} [columnVariant={}] - Column display variants keyed by header name. Supported: "bold", "badge", "textIcon", "addressWrapper". + * @param {Array} [categoryBadges=[]] - Array of {color, label} for "badge" variant rendering. Matched by label (case-insensitive). + * @param {Array} [textIcons=[]] - Array of {label, icon} for "textIcon" variant rendering. + * @param {boolean} [showSeparators=false] - When true, inserts category separator rows. Labels are uppercased. + * @param {string} [separatorColumn=null] - Override which column drives separators. Default: categoryColumn. + * @param {boolean} [boldFirstColumn=true] - Auto-wraps first column in <strong> if value is a plain string. + * @param {string} [className=""] - CSS class name. + * @param {object} [style={}] - Inline style overrides. + */ +export const SearchTableV2 = ({ + TableComponent = null, + tableTitle = null, + headerList = [], + itemsList = [], + monospaceColumns = [], + margin, + searchPlaceholder = 'Search...', + searchColumns = [], + categoryColumn = 'Category', + filterColumns = [], + columnWidths = {}, + columnConfig = {}, + columnVariant = {}, + categoryBadges = [], + textIcons = [], + showSeparators = false, + separatorColumn = null, + boldFirstColumn = true, + className = '', + style = {}, +}) => { + const allFilterCols = [categoryColumn, ...filterColumns] + + const [query, setQuery] = useState('') + const [selections, setSelections] = useState(() => { + const init = {} + allFilterCols.forEach((col) => { + init[col] = 'All' + }) + return init + }) + + const safeHeaderList = Array.isArray(headerList) ? headerList : [] + const safeItemsList = Array.isArray(itemsList) ? itemsList : [] + const safeMonospaceColumns = Array.isArray(monospaceColumns) + ? monospaceColumns + : [] + const safeSearchColumns = Array.isArray(searchColumns) ? searchColumns : [] + const activeColumns = safeSearchColumns.length + ? safeSearchColumns + : safeHeaderList + const normalizedQuery = query.trim().toLowerCase() + + const badgeColorMap = {} + categoryBadges.forEach((b) => { + badgeColorMap[b.label.toLowerCase()] = b.color + }) + + const textIconMap = {} + textIcons.forEach((t) => { + textIconMap[t.label.toLowerCase()] = t.icon + }) + + const getOptionsForColumn = (colName, colIndex) => { + let scoped = safeItemsList + for (let i = 0; i < colIndex; i++) { + const prevCol = allFilterCols[i] + const prevSel = selections[prevCol] + if (prevSel !== 'All') { + scoped = scoped.filter( + (item) => String(item?.[prevCol] || '') === prevSel + ) + } + } + return [ + ...new Set( + scoped.map((item) => String(item?.[colName] || '')).filter(Boolean) + ), + ].sort((a, b) => a.localeCompare(b, 'en', { sensitivity: 'base' })) + } + + const filteredItems = safeItemsList.filter((item) => + allFilterCols.every((col) => { + const sel = selections[col] + return sel === 'All' || String(item?.[col] || '') === sel + }) + ) + + const searchedItems = !normalizedQuery + ? filteredItems + : filteredItems.filter((item) => + activeColumns.some((column) => { + const value = + item?.[column] ?? item?.[String(column).toLowerCase()] ?? '' + return String(value).toLowerCase().includes(normalizedQuery) + }) + ) + + const sortedItems = [...searchedItems].sort((a, b) => { + for (const col of allFilterCols) { + const cmp = String(a[col] || '').localeCompare( + String(b[col] || ''), + 'en', + { sensitivity: 'base' } + ) + if (cmp !== 0) return cmp + } + return 0 + }) + + const firstColumnName = safeHeaderList[0] + + const renderVariant = (value, variant, item, header) => { + if (variant === 'bold' && typeof value === 'string') { + return <strong>{value}</strong> + } + if (variant === 'badge' && typeof value === 'string') { + const colorName = badgeColorMap[value.toLowerCase()] + if (colorName) { + return ( + <span + style={{ + display: 'inline-flex', + alignItems: 'center', + whiteSpace: 'nowrap', + }} + > + <Badge color={colorName}>{value}</Badge> + </span> + ) + } + } + if (variant === 'textIcon' && typeof value === 'string') { + const icon = textIconMap[value.toLowerCase()] + if (icon) { + return ( + <span + style={{ + display: 'inline-flex', + alignItems: 'center', + gap: '0.35rem', + whiteSpace: 'nowrap', + }} + > + {icon} + <span>{value}</span> + </span> + ) + } + } + if (variant === 'addressWrapper' && typeof value === 'string') { + const href = item?.[`_${header}Href`] ?? item?._addressHref + return ( + <div + style={{ + display: 'flex', + alignItems: 'center', + gap: '0.35rem', + width: '100%', + minWidth: 0, + }} + > + <CopyText text={value} style={{ flex: 1 }} /> + {href && <LinkIcon href={href} color="var(--accent)" />} + </div> + ) + } + return value + } + + const displayItems = sortedItems.map((item) => { + const out = { + ...item, + _sepKey: String(item[separatorColumn || categoryColumn] || ''), + } + for (const header of safeHeaderList) { + if (columnVariant[header] && out[header] !== undefined) { + out[header] = renderVariant( + out[header], + columnVariant[header], + item, + header + ) + } + } + if ( + boldFirstColumn && + firstColumnName && + !columnVariant[firstColumnName] && + typeof out[firstColumnName] === 'string' + ) { + out[firstColumnName] = <strong>{out[firstColumnName]}</strong> + } + return out + }) + + const withSeparators = [] + let lastSep = '' + displayItems.forEach((item) => { + const sepKey = item._sepKey || '' + if (showSeparators && sepKey && sepKey !== lastSep) { + withSeparators.push({ + __separator: true, + [safeHeaderList[0]]: sepKey.toUpperCase(), + }) + lastSep = sepKey + } + withSeparators.push(item) + }) + + const resolvedColumnConfig = safeHeaderList.reduce( + (accumulator, header, index) => { + const variant = columnVariant[header] + const override = columnConfig?.[header] || {} + + accumulator[header] = { + fitContent: + override.fitContent ?? + (index === 0 || variant === 'badge' || variant === 'textIcon'), + nowrap: + override.nowrap ?? + (index === 0 || variant === 'badge' || variant === 'textIcon'), + fluid: override.fluid ?? variant === 'addressWrapper', + } + return accumulator + }, + {} + ) + + const selectStyle = { + minWidth: '150px', + padding: '8px 12px', + borderRadius: '8px', + border: '1px solid var(--border)', + background: 'var(--background)', + color: 'var(--text)', + } + + const updateSelection = (col, colIndex, value) => { + const next = { ...selections, [col]: value } + for (let i = colIndex + 1; i < allFilterCols.length; i++) { + next[allFilterCols[i]] = 'All' + } + setSelections(next) + } + + return ( + <div className={className} style={style}> + <div + style={{ + marginBottom: '0.5rem', + display: 'flex', + flexWrap: 'wrap', + gap: '0.5rem', + alignItems: 'center', + }} + > + <input + type="text" + value={query} + placeholder={searchPlaceholder} + onChange={(e) => setQuery(e.target.value)} + aria-label="Filter table rows" + style={{ + width: '100%', + maxWidth: '420px', + padding: '8px 12px', + borderRadius: '8px', + border: '1px solid var(--border)', + background: 'var(--background)', + color: 'var(--text)', + }} + /> + {allFilterCols.map((col, colIndex) => { + const options = getOptionsForColumn(col, colIndex) + if (options.length === 0) return null + const parentLabel = + colIndex > 0 && selections[allFilterCols[colIndex - 1]] !== 'All' + ? selections[allFilterCols[colIndex - 1]] + : col.toLowerCase() + 's' + return ( + <select + key={col} + value={selections[col]} + onChange={(e) => updateSelection(col, colIndex, e.target.value)} + aria-label={`Filter by ${col}`} + style={selectStyle} + > + <option value="All">All {parentLabel}</option> + {options.map((o) => ( + <option key={o} value={o}> + {o} + </option> + ))} + </select> + ) + })} + </div> + + {typeof TableComponent === 'function' ? ( + <TableComponent + tableTitle={tableTitle} + headerList={safeHeaderList} + itemsList={withSeparators} + monospaceColumns={safeMonospaceColumns} + columnWidths={columnWidths} + columnConfig={resolvedColumnConfig} showSeparators={showSeparators} margin={margin} /> diff --git a/snippets/components/wrappers/tables/Table.jsx b/snippets/components/wrappers/tables/Table.jsx index 886b25154..d8f5fa34f 100644 --- a/snippets/components/wrappers/tables/Table.jsx +++ b/snippets/components/wrappers/tables/Table.jsx @@ -3,15 +3,35 @@ * @category wrappers * @subcategory tables * @status stable + * @deprecated Use DynamicTableV2 for new tables that need measured fit-content columns and fluid column tracks. * @description Renders structured data as a scrollable table with section separators and accessible region. * @aiDiscoverability none * @param {any} [tableTitle=null] - table Title prop. * @param {Array} [headerList=[]] - header List prop. * @param {Array} [itemsList=[]] - items List prop. * @param {Array} [monospaceColumns=[]] - monospace Columns prop. + * @param {Array} [contentFitColumns=[]] - Column names that should size to their contents. * @param {any} margin - margin prop. - * @param {string} [className=''] - Optional CSS class override. - * @param {object} [style={}] - Optional inline style override. + * @param {string} [className=''] - Optional CSS class override. + * @param {object} [style={}] - Optional inline style override. + */ +'use client' + +/** + * @component DynamicTable + * @category content + * @status stable + * @description Renders structured data as a scrollable table with optional separator rows. + * @param {any} [tableTitle=null] - Table title. + * @param {Array} [headerList=[]] - Column header names. + * @param {Array} [itemsList=[]] - Row data objects. + * @param {Array} [monospaceColumns=[]] - Column indices to render in monospace. + * @param {object} [columnWidths={}] - Preferred widths keyed by header. + * @param {Array} [contentFitColumns=[]] - Column names that should size to their contents. + * @param {boolean} [showSeparators=false] - When true, renders separator rows from `__separator` items. + * @param {any} margin - Optional margin applied to the scroll container. + * @param {string} [className=''] - Optional CSS class override. + * @param {object} [style={}] - Optional inline style override. */ export const DynamicTable = ({ tableTitle = null, @@ -19,6 +39,7 @@ export const DynamicTable = ({ itemsList = [], monospaceColumns = [], columnWidths = {}, + contentFitColumns = [], showSeparators = false, margin, className = "", @@ -29,6 +50,32 @@ export const DynamicTable = ({ return <div>No headers provided</div>; } + const safeContentFitColumns = Array.isArray(contentFitColumns) + ? contentFitColumns + : []; + const usesContentFitColumns = safeContentFitColumns.length > 0; + const isContentFitColumn = (header) => safeContentFitColumns.includes(header); + const getColumnStyle = (header) => { + const widthStyle = columnWidths[header] + ? { + width: columnWidths[header], + minWidth: columnWidths[header], + maxWidth: columnWidths[header], + } + : {}; + const contentFitStyle = !columnWidths[header] && isContentFitColumn(header) + ? { + width: "1%", + whiteSpace: "nowrap", + } + : {}; + + return { + ...contentFitStyle, + ...widthStyle, + }; + }; + return ( <div className={className} style={style} {...rest}> {tableTitle && ( @@ -46,7 +93,7 @@ export const DynamicTable = ({ data-docs-dynamic-table style={{ width: "100%", - tableLayout: "fixed", + tableLayout: usesContentFitColumns ? "auto" : "fixed", borderCollapse: "collapse", fontSize: "0.9rem", marginTop: 0, @@ -68,7 +115,7 @@ export const DynamicTable = ({ textAlign: "left", fontWeight: "600", color: "var(--lp-color-on-accent)", - ...(columnWidths[header] ? { width: columnWidths[header] } : {}), + ...getColumnStyle(header), }} > {header} @@ -117,6 +164,7 @@ export const DynamicTable = ({ fontFamily: isMonospace ? "monospace" : "inherit", wordWrap: "break-word", overflowWrap: "break-word", + ...getColumnStyle(header), }} > {isMonospace ? <code>{value}</code> : value} @@ -132,3 +180,318 @@ export const DynamicTable = ({ </div> ); }; + +/** + * @component DynamicTableV2 + * @category content + * @subcategory tables + * @status experimental + * @description Renders structured data as a scrollable table with separator rows and intrinsic-width support for fit-to-content columns. + * @aiDiscoverability none + * @param {any} [tableTitle=null] - table Title prop. + * @param {Array} [headerList=[]] - header List prop. + * @param {Array} [itemsList=[]] - items List prop. + * @param {Array} [monospaceColumns=[]] - monospace Columns prop. + * @param {object} [columnWidths={}] - Preferred minimum widths keyed by header. + * @param {object} [columnConfig={}] - Per-column layout flags keyed by header. + * @param {boolean} [showSeparators=false] - When true, renders separator rows from `__separator` items. + * @param {any} margin - margin prop. + * @param {string} [className=''] - Optional CSS class override. + * @param {object} [style={}] - Optional inline style override. + */ +export const DynamicTableV2 = ({ + tableTitle = null, + headerList = [], + itemsList = [], + monospaceColumns = [], + columnWidths = {}, + columnConfig = {}, + showSeparators = false, + margin, + className = '', + style = {}, + ...rest +}) => { + if (!headerList.length) { + return <div>No headers provided</div> + } + + const tableRef = useRef(null) + const [measuredColumnWidths, setMeasuredColumnWidths] = useState({}) + + const measureFitColumns = () => { + const tableElement = tableRef.current + if (!tableElement) { + return + } + + const nextWidths = headerList.reduce((accumulator, header, index) => { + const config = columnConfig?.[header] || {} + + if (!config.fitContent) { + return accumulator + } + + const contentNodes = tableElement.querySelectorAll( + `[data-docs-column-key="${index}"] [data-docs-fit-content]` + ) + + let maxContentWidth = 0 + + contentNodes.forEach((node) => { + const width = Math.ceil(node.getBoundingClientRect().width) + if (width > maxContentWidth) { + maxContentWidth = width + } + }) + + if (maxContentWidth > 0) { + accumulator[header] = `${maxContentWidth + 16}px` + } + + return accumulator + }, {}) + + setMeasuredColumnWidths((currentWidths) => { + const currentEntries = Object.entries(currentWidths) + const nextEntries = Object.entries(nextWidths) + + if ( + currentEntries.length === nextEntries.length && + nextEntries.every(([header, width]) => currentWidths[header] === width) + ) { + return currentWidths + } + + return nextWidths + }) + } + + useLayoutEffect(() => { + measureFitColumns() + }, [headerList, itemsList, columnConfig]) + + useEffect(() => { + const tableElement = tableRef.current + if (!tableElement || typeof ResizeObserver === 'undefined') { + return undefined + } + + const resizeObserver = new ResizeObserver(() => { + measureFitColumns() + }) + + resizeObserver.observe(tableElement) + + if (tableElement.parentElement) { + resizeObserver.observe(tableElement.parentElement) + } + + return () => { + resizeObserver.disconnect() + } + }, [headerList, itemsList, columnConfig]) + + const fitHeaders = headerList.filter( + (header) => columnConfig?.[header]?.fitContent + ) + const hasMeasuredFitColumns = + fitHeaders.length === 0 || + fitHeaders.every((header) => Boolean(measuredColumnWidths[header])) + + const getColumnStyle = (header, isMonospace = false) => { + const config = columnConfig?.[header] || {} + const fitContent = Boolean(config.fitContent) + const fluid = Boolean(config.fluid) + const nowrap = Boolean(config.nowrap) || fitContent || isMonospace + const preferredWidth = columnWidths[header] + const measuredWidth = measuredColumnWidths[header] + + return { + ...(fitContent && measuredWidth + ? { + width: measuredWidth, + minWidth: measuredWidth, + maxWidth: measuredWidth, + } + : {}), + ...(!fitContent && !fluid && preferredWidth + ? { minWidth: preferredWidth } + : {}), + ...(nowrap + ? { whiteSpace: 'nowrap' } + : { + wordWrap: 'break-word', + overflowWrap: 'break-word', + }), + } + } + + const getColumnTrackStyle = (header) => { + const config = columnConfig?.[header] || {} + const fitContent = Boolean(config.fitContent) + const fluid = Boolean(config.fluid) + const preferredWidth = columnWidths[header] + const measuredWidth = measuredColumnWidths[header] + + if (fitContent && measuredWidth) { + return { + width: measuredWidth, + minWidth: measuredWidth, + maxWidth: measuredWidth, + } + } + + if (fluid) { + return {} + } + + if (preferredWidth) { + return { width: preferredWidth } + } + + return {} + } + + const renderCellContent = (header, content) => { + const config = columnConfig?.[header] || {} + + if (!config.fitContent) { + return content + } + + return ( + <div + data-docs-fit-content + style={{ + display: 'inline-flex', + alignItems: 'center', + whiteSpace: 'nowrap', + width: 'max-content', + maxWidth: 'none', + }} + > + {content} + </div> + ) + } + + return ( + <div className={className} style={style} {...rest}> + {tableTitle && ( + <div style={{ fontStyle: 'italic', margin: 0 }}> + <strong>{tableTitle}</strong> + </div> + )} + <div + style={{ overflowX: 'auto', ...(margin != null && { margin }) }} + role="region" + tabIndex={0} + aria-label={ + tableTitle ? `Scrollable table: ${tableTitle}` : 'Scrollable table' + } + > + <table + ref={tableRef} + data-docs-dynamic-table-v2 + style={{ + width: '100%', + tableLayout: hasMeasuredFitColumns ? 'fixed' : 'auto', + borderCollapse: 'collapse', + fontSize: '0.9rem', + marginTop: 0, + }} + > + <colgroup> + {headerList.map((header, index) => ( + <col key={index} style={getColumnTrackStyle(header)} /> + ))} + </colgroup> + <thead> + <tr + style={{ + backgroundColor: 'var(--accent)', + color: 'var(--lp-color-on-accent)', + borderBottom: '1px solid var(--border)', + }} + > + {headerList.map((header, index) => ( + <th + key={index} + data-docs-column-key={index} + style={{ + padding: '10px 8px', + textAlign: 'left', + fontWeight: '600', + color: 'var(--lp-color-on-accent)', + verticalAlign: 'top', + ...getColumnStyle(header), + }} + > + {renderCellContent(header, header)} + </th> + ))} + </tr> + </thead> + <tbody> + {itemsList + .filter((item) => showSeparators || !item?.__separator) + .map((item, rowIndex) => + item?.__separator ? ( + <tr + key={rowIndex} + style={{ + backgroundColor: 'var(--accent)', + color: 'var(--lp-color-on-accent)', + borderBottom: '1px solid var(--accent)', + }} + > + <td + colSpan={headerList.length} + style={{ + padding: '6px 8px', + fontWeight: '700', + color: 'var(--lp-color-on-accent)', + letterSpacing: '0.01em', + }} + > + {item[headerList[0]] ?? item.Category ?? 'Category'} + </td> + </tr> + ) : ( + <tr + key={rowIndex} + style={{ borderBottom: '1px solid var(--border)' }} + > + {headerList.map((header, colIndex) => { + const value = + item[header] ?? item[header.toLowerCase()] ?? '-' + const isMonospace = monospaceColumns.includes(colIndex) + + return ( + <td + key={colIndex} + data-docs-column-key={colIndex} + style={{ + padding: '8px 8px', + fontFamily: isMonospace ? 'monospace' : 'inherit', + verticalAlign: 'top', + ...getColumnStyle(header, isMonospace), + }} + > + {renderCellContent( + header, + isMonospace ? <code>{value}</code> : value + )} + </td> + ) + })} + </tr> + ) + )} + </tbody> + </table> + </div> + </div> + ) +} diff --git a/snippets/composables/pages/canonical/data/blockchain-contracts-data.jsx b/snippets/composables/pages/canonical/data/blockchain-contracts-data.jsx new file mode 100644 index 000000000..f3a743e8c --- /dev/null +++ b/snippets/composables/pages/canonical/data/blockchain-contracts-data.jsx @@ -0,0 +1,137 @@ +import { blockchainContractsPageData } from '/snippets/data/contract-addresses/blockchainContractsPageData.jsx' + +export const getContracts = (pageData = {}) => pageData?.contracts || {} + +export const getContract = (pageData = {}, slug) => getContracts(pageData)[slug] || null + +export const getLastVerifiedDate = (pageData = {}) => pageData?.meta?.lastVerified || 'Pending' + +export const controllerContract = (pageData = {}) => getContract(pageData, 'controller') +export const bondingManagerContract = (pageData = {}) => getContract(pageData, 'bonding-manager') +export const ticketBrokerContract = (pageData = {}) => getContract(pageData, 'ticket-broker') +export const roundsManagerContract = (pageData = {}) => getContract(pageData, 'rounds-manager') +export const minterContract = (pageData = {}) => getContract(pageData, 'minter') +export const serviceRegistryContract = (pageData = {}) => getContract(pageData, 'service-registry') +export const aiServiceRegistryContract = (pageData = {}) => getContract(pageData, 'ai-service-registry') +export const livepeerTokenArbitrumContract = (pageData = {}) => getContract(pageData, 'livepeer-token-arbitrum') +export const livepeerTokenEthereumContract = (pageData = {}) => getContract(pageData, 'livepeer-token-ethereum') +export const bridgeMinterContract = (pageData = {}) => getContract(pageData, 'bridge-minter') +export const l2GatewayContract = (pageData = {}) => getContract(pageData, 'l2-lpt-gateway') +export const l1GatewayContract = (pageData = {}) => getContract(pageData, 'l1-lpt-gateway') +export const l1EscrowContract = (pageData = {}) => getContract(pageData, 'l1-escrow') +export const livepeerTokenFaucetContract = (pageData = {}) => getContract(pageData, 'livepeer-token-faucet') +export const bondingVotesContract = (pageData = {}) => getContract(pageData, 'bonding-votes') +export const governorContract = (pageData = {}) => getContract(pageData, 'governor') +export const livepeerGovernorContract = (pageData = {}) => getContract(pageData, 'livepeer-governor') +export const treasuryContract = (pageData = {}) => getContract(pageData, 'treasury') +export const l2MigratorContract = (pageData = {}) => getContract(pageData, 'l2-migrator') +export const merkleSnapshotContract = (pageData = {}) => getContract(pageData, 'merkle-snapshot') + +export const controller = controllerContract(blockchainContractsPageData)?.currentAddress || null +export const bondingManagerProxy = + bondingManagerContract(blockchainContractsPageData)?.proxyAddress || + bondingManagerContract(blockchainContractsPageData)?.currentAddress || + null +export const bondingManagerTarget = bondingManagerContract(blockchainContractsPageData)?.targetAddress || null +export const ticketBrokerProxy = + ticketBrokerContract(blockchainContractsPageData)?.proxyAddress || + ticketBrokerContract(blockchainContractsPageData)?.currentAddress || + null +export const roundsManagerProxy = + roundsManagerContract(blockchainContractsPageData)?.proxyAddress || + roundsManagerContract(blockchainContractsPageData)?.currentAddress || + null +export const minter = minterContract(blockchainContractsPageData)?.currentAddress || null +export const serviceRegistryProxy = + serviceRegistryContract(blockchainContractsPageData)?.proxyAddress || + serviceRegistryContract(blockchainContractsPageData)?.currentAddress || + null +export const aiServiceRegistry = aiServiceRegistryContract(blockchainContractsPageData)?.currentAddress || null +export const lptArb = livepeerTokenArbitrumContract(blockchainContractsPageData)?.currentAddress || null +export const lptEth = livepeerTokenEthereumContract(blockchainContractsPageData)?.currentAddress || null +export const bridgeMinter = bridgeMinterContract(blockchainContractsPageData)?.currentAddress || null +export const l2Gateway = l2GatewayContract(blockchainContractsPageData)?.currentAddress || null +export const l1Gateway = l1GatewayContract(blockchainContractsPageData)?.currentAddress || null +export const l1Escrow = l1EscrowContract(blockchainContractsPageData)?.currentAddress || null +export const bondingVotesProxy = + bondingVotesContract(blockchainContractsPageData)?.proxyAddress || + bondingVotesContract(blockchainContractsPageData)?.currentAddress || + null +export const bondingVotesTarget = bondingVotesContract(blockchainContractsPageData)?.targetAddress || null +export const governor = governorContract(blockchainContractsPageData)?.currentAddress || null +export const livepeerGovernorProxy = + livepeerGovernorContract(blockchainContractsPageData)?.proxyAddress || + livepeerGovernorContract(blockchainContractsPageData)?.currentAddress || + null +export const livepeerGovernorTarget = livepeerGovernorContract(blockchainContractsPageData)?.targetAddress || null +export const treasury = treasuryContract(blockchainContractsPageData)?.currentAddress || null +export const l2Migrator = + l2MigratorContract(blockchainContractsPageData)?.proxyAddress || + l2MigratorContract(blockchainContractsPageData)?.currentAddress || + null +export const merkleSnapshot = merkleSnapshotContract(blockchainContractsPageData)?.currentAddress || null +export const lastVerifiedDate = getLastVerifiedDate(blockchainContractsPageData) + +export const blockchainContractsPageMeta = blockchainContractsPageData.meta + +const explorerBase = { + arbitrumOne: + blockchainContractsPageMeta?.explorerUrls?.arbiscanAddress || + `${blockchainContractsPageMeta?.explorerUrls?.arbiscan || 'https://arbiscan.io'}/address/`, + ethereumMainnet: + blockchainContractsPageMeta?.explorerUrls?.etherscanAddress || + `${blockchainContractsPageMeta?.explorerUrls?.etherscan || 'https://etherscan.io'}/address/`, +} + +const contractByName = { + arbitrumOne: { + Controller: controllerContract(blockchainContractsPageData), + BondingManager: bondingManagerContract(blockchainContractsPageData), + TicketBroker: ticketBrokerContract(blockchainContractsPageData), + RoundsManager: roundsManagerContract(blockchainContractsPageData), + Minter: minterContract(blockchainContractsPageData), + ServiceRegistry: serviceRegistryContract(blockchainContractsPageData), + AIServiceRegistry: aiServiceRegistryContract(blockchainContractsPageData), + LivepeerToken: livepeerTokenArbitrumContract(blockchainContractsPageData), + L2LPTGateway: l2GatewayContract(blockchainContractsPageData), + BondingVotes: bondingVotesContract(blockchainContractsPageData), + Governor: governorContract(blockchainContractsPageData), + LivepeerGovernor: livepeerGovernorContract(blockchainContractsPageData), + Treasury: treasuryContract(blockchainContractsPageData), + L2Migrator: l2MigratorContract(blockchainContractsPageData), + MerkleSnapshot: merkleSnapshotContract(blockchainContractsPageData), + }, + ethereumMainnet: { + LivepeerToken: livepeerTokenEthereumContract(blockchainContractsPageData), + BridgeMinter: bridgeMinterContract(blockchainContractsPageData), + L1LPTGateway: l1GatewayContract(blockchainContractsPageData), + L1Escrow: l1EscrowContract(blockchainContractsPageData), + }, +} + +const getNamedContract = (chain, name) => contractByName?.[chain]?.[name] || null + +export const codeHref = (chain, name, type = null) => { + const contract = getNamedContract(chain, name) + if (!contract) return null + if (type === 'proxy') return contract.proxyContractCodeHref || contract.contractCodeHref || null + if (type === 'target') return contract.targetContractCodeHref || contract.contractCodeHref || null + return contract.contractCodeHref || null +} + +export const explorerHref = (chain, name, type = null) => { + const contract = getNamedContract(chain, name) + if (!contract) return null + if (type === 'proxy') return contract.proxyBlockchainHref || contract.blockchainHref || null + if (type === 'target') return contract.targetBlockchainHref || contract.blockchainHref || null + const address = contract.currentAddress || contract.proxyAddress || contract.targetAddress || null + return contract.blockchainHref || (address ? `${explorerBase[chain] || ''}${address}` : null) +} + +export const rawCodeHref = (chain, name, type = null) => { + const contract = getNamedContract(chain, name) + if (!contract) return null + if (type === 'proxy') return contract.proxyRawContractCodeHref || contract.rawContractCodeHref || null + if (type === 'target') return contract.targetRawContractCodeHref || contract.rawContractCodeHref || null + return contract.rawContractCodeHref || null +} diff --git a/snippets/composables/pages/canonical/data/livepeer-contract-addresses-page-data.jsx b/snippets/composables/pages/canonical/data/livepeer-contract-addresses-page-data.jsx new file mode 100644 index 000000000..98f85c9d7 --- /dev/null +++ b/snippets/composables/pages/canonical/data/livepeer-contract-addresses-page-data.jsx @@ -0,0 +1,116 @@ +import { LinkIcon } from '/snippets/components/elements/links/Links.jsx' +import { CopyText } from '/snippets/components/elements/text/Text.jsx' +import { ArbitrumIcon, LivepeerIcon } from '/snippets/components/elements/icons/Icons.jsx' + +import { + getEthereumActiveNameList, + getActiveTableItems, + getProxyTableItems, + getPausedTableItems, + getMigrationResidualTableItems, + getLegacyOperationalTableItems, + historicalCategoryTitle, + historicalCategoryDescription, + historicalCategoryIconName as historicalCategoryIconNameModel, +} from './livepeer-contract-addresses-page-model.jsx' + +export { + getEthereumActiveNameList, + getActiveTableItems, + getProxyTableItems, + getPausedTableItems, + getMigrationResidualTableItems, + getLegacyOperationalTableItems, + historicalCategoryTitle, + historicalCategoryDescription, +} + +export const buildCategoryAccordionRows = ( + items = [], + { includeType = true, includeVersion = false } = {}, +) => { + const renderAddressCell = (address, href) => ( + <div + style={{ + display: 'flex', + alignItems: 'center', + gap: '0.35rem', + width: '100%', + minWidth: 0, + }} + > + <CopyText text={address} style={{ flex: 1 }} /> + {href ? <LinkIcon href={href} color="var(--accent)" /> : null} + </div> + ) + + const renderChainCell = (chainKey) => ( + <span + style={{ + display: 'inline-flex', + alignItems: 'center', + gap: '0.35rem', + }} + > + {chainKey === 'ethereumMainnet' ? ( + <> + <Icon icon="ethereum" color="var(--hero-text)" size={13} /> + Ethereum Mainnet + </> + ) : ( + <> + <ArbitrumIcon color="var(--arbitrum)" /> + Arbitrum One + </> + )} + </span> + ) + + const renderTypeBadge = (type) => { + const colorMap = { + standalone: 'blue', + target: 'surface-destructive', + proxy: 'surface', + } + + return <Badge color={colorMap[type] || 'surface'}>{type}</Badge> + } + + return (items || []).map((item) => { + if (item.__separator) { + return item + } + + const row = { + ...item, + Name: <strong>{item.Name}</strong>, + Address: renderAddressCell(item.Address, item._addressHref), + Chain: renderChainCell(item._chainKey), + } + + if (includeVersion) { + row.Version = item.Version || '—' + } + + if (includeType) { + row.Type = renderTypeBadge(item._typeKey || item.Type) + } + + return row + }) +} + +export const historicalCategoryIcon = (category) => { + const iconNameByCategory = { + core: 'gear', + governance: 'landmark', + migration: 'bridge', + genesis: 'livepeer', + } + + const iconName = iconNameByCategory[category] || 'clock-rotate-left' + + return iconName === 'livepeer' + ? <LivepeerIcon color="var(--accent)" size={16} /> + : <Icon icon={iconName} color="var(--accent)" /> +} diff --git a/snippets/composables/pages/canonical/data/livepeer-contract-addresses-page-model.jsx b/snippets/composables/pages/canonical/data/livepeer-contract-addresses-page-model.jsx new file mode 100644 index 000000000..d891f2b8f --- /dev/null +++ b/snippets/composables/pages/canonical/data/livepeer-contract-addresses-page-model.jsx @@ -0,0 +1,541 @@ +export const buildCategoryAccordionRows = ( + items = [], + { includeType = true, includeVersion = false, showSeparators = true } = {}, +) => { + const categoryOrder = ['bridge', 'core', 'governance', 'token', 'migration', 'genesis', 'utility', 'other'] + + const sortContractsForDisplay = (tableItems = []) => + [...tableItems].sort((left, right) => { + const categoryA = categoryOrder.indexOf((left._categoryKey || left.Category || 'other').toLowerCase()) + const categoryB = categoryOrder.indexOf((right._categoryKey || right.Category || 'other').toLowerCase()) + if (categoryA !== categoryB) return categoryA - categoryB + + const nameCompare = String(left.Name || '').localeCompare(String(right.Name || ''), 'en', { + sensitivity: 'base', + }) + if (nameCompare !== 0) return nameCompare + + const chainCompare = String(left.Chain || '').localeCompare(String(right.Chain || ''), 'en', { + sensitivity: 'base', + }) + if (chainCompare !== 0) return chainCompare + + const versionA = Number(String(left.Version || '').replace(/^V/i, '')) || 0 + const versionB = Number(String(right.Version || '').replace(/^V/i, '')) || 0 + return versionA - versionB + }) + + const rows = [] + let lastCategory = null + + sortContractsForDisplay(items).forEach((item) => { + if (showSeparators && item.Category && item.Category !== lastCategory) { + rows.push({ + __separator: true, + Name: String(item.Category).toUpperCase(), + }) + lastCategory = item.Category + } + + const row = { + Name: item.Name, + Address: item.Address, + Chain: item.Chain, + _addressHref: item._addressHref, + _chainKey: item._chainKey, + _typeKey: item._typeKey || item.Type, + Category: item.Category, + } + + if (includeVersion) { + row.Version = item.Version || '—' + } + + if (includeType) { + row.Type = item._typeKey || item.Type + } + + rows.push(row) + }) + + return rows +} + +export const getEthereumActiveNameList = (sourceData = {}) => + (sourceData?.ethereumMainnet?.active || sourceData?.ethereumMainnet?.current || []) + .map((contract) => contract.name) + .join(', ') + +export const getActiveTableItems = (sourceData = {}) => { + const chainLabel = { + arbitrumOne: 'Arbitrum One', + ethereumMainnet: 'Ethereum Mainnet', + } + + const lifecycleLabel = { + active: 'Active', + historical: 'Historical', + } + + const getExplorerBase = (chain) => { + const urls = sourceData?.meta?.explorerUrls || {} + if (chain === 'arbitrumOne') { + return urls.arbiscanAddress || `${urls.arbiscan || 'https://arbiscan.io'}/address/` + } + + return urls.etherscanAddress || `${urls.etherscan || 'https://etherscan.io'}/address/` + } + + const normalizeContractsForTable = (entries, chain, fallbackLifecycle = 'active') => + (entries || []).map((contract) => { + const type = contract.type || contract.deploymentKind || 'standalone' + const lifecycle = contract.lifecycle || fallbackLifecycle + const proxyAddress = contract.meta?.proxyAddress || contract.meta?.historicalProxyAddress || null + + return { + Name: contract.name, + Address: contract.address, + _addressHref: contract.blockchainHref || `${getExplorerBase(chain)}${contract.address}`, + Type: type, + Status: contract.meta?.statusLabel || lifecycleLabel[lifecycle] || lifecycle, + Category: contract.category, + Version: contract.version || contract.meta?.version || '—', + Chain: chainLabel[chain] || chain, + _lifecycle: lifecycle, + _chainKey: chain, + _typeKey: type, + _categoryKey: contract.category || 'other', + _proxyAddress: proxyAddress, + _proxyHref: proxyAddress ? `${getExplorerBase(chain)}${proxyAddress}` : null, + } + }) + + const activeEntries = [ + ...normalizeContractsForTable(sourceData?.arbitrumOne?.active || sourceData?.arbitrumOne?.current, 'arbitrumOne'), + ...normalizeContractsForTable( + sourceData?.ethereumMainnet?.active || sourceData?.ethereumMainnet?.current, + 'ethereumMainnet', + ), + ] + + const implementationTableItems = [ + ...normalizeContractsForTable(sourceData?.arbitrumOne?.currentImplementations, 'arbitrumOne', 'historical'), + ...normalizeContractsForTable( + sourceData?.ethereumMainnet?.currentImplementations, + 'ethereumMainnet', + 'historical', + ), + ] + + return [ + ...activeEntries.filter(({ Type }) => Type === 'standalone'), + ...implementationTableItems, + ] +} + +export const getProxyTableItems = (sourceData = {}) => { + const chainLabel = { + arbitrumOne: 'Arbitrum One', + ethereumMainnet: 'Ethereum Mainnet', + } + + const lifecycleLabel = { + active: 'Active', + historical: 'Historical', + } + + const getExplorerBase = (chain) => { + const urls = sourceData?.meta?.explorerUrls || {} + if (chain === 'arbitrumOne') { + return urls.arbiscanAddress || `${urls.arbiscan || 'https://arbiscan.io'}/address/` + } + + return urls.etherscanAddress || `${urls.etherscan || 'https://etherscan.io'}/address/` + } + + const normalizeContractsForTable = (entries, chain, fallbackLifecycle = 'active') => + (entries || []).map((contract) => { + const type = contract.type || contract.deploymentKind || 'standalone' + const lifecycle = contract.lifecycle || fallbackLifecycle + const proxyAddress = contract.meta?.proxyAddress || contract.meta?.historicalProxyAddress || null + + return { + Name: contract.name, + Address: contract.address, + _addressHref: contract.blockchainHref || `${getExplorerBase(chain)}${contract.address}`, + Type: type, + Status: contract.meta?.statusLabel || lifecycleLabel[lifecycle] || lifecycle, + Category: contract.category, + Version: contract.version || contract.meta?.version || '—', + Chain: chainLabel[chain] || chain, + _lifecycle: lifecycle, + _chainKey: chain, + _typeKey: type, + _categoryKey: contract.category || 'other', + _proxyAddress: proxyAddress, + _proxyHref: proxyAddress ? `${getExplorerBase(chain)}${proxyAddress}` : null, + } + }) + + const activeEntries = [ + ...normalizeContractsForTable(sourceData?.arbitrumOne?.active || sourceData?.arbitrumOne?.current, 'arbitrumOne'), + ...normalizeContractsForTable( + sourceData?.ethereumMainnet?.active || sourceData?.ethereumMainnet?.current, + 'ethereumMainnet', + ), + ] + + const implementationTableItems = [ + ...normalizeContractsForTable(sourceData?.arbitrumOne?.currentImplementations, 'arbitrumOne', 'historical'), + ...normalizeContractsForTable( + sourceData?.ethereumMainnet?.currentImplementations, + 'ethereumMainnet', + 'historical', + ), + ] + + const implementationLookup = implementationTableItems.reduce((lookup, item) => { + lookup.set(`${item.Name}:${item._chainKey}`, item) + return lookup + }, new Map()) + + return activeEntries + .filter(({ Type }) => Type === 'proxy') + .map((item) => { + const target = implementationLookup.get(`${item.Name}:${item._chainKey}`) + return { + ...item, + Proxy: 'proxy', + 'Proxy Address': item.Address, + '_Proxy AddressHref': item._addressHref, + Target: target?._typeKey || 'target', + 'Target Address': target?.Address || '—', + '_Target AddressHref': target?._addressHref, + } + }) +} + +export const getPausedTableItems = (sourceData = {}) => { + const chainLabel = { + arbitrumOne: 'Arbitrum One', + ethereumMainnet: 'Ethereum Mainnet', + } + + const lifecycleLabel = { + paused: 'Paused', + } + + const getExplorerBase = (chain) => { + const urls = sourceData?.meta?.explorerUrls || {} + if (chain === 'arbitrumOne') { + return urls.arbiscanAddress || `${urls.arbiscan || 'https://arbiscan.io'}/address/` + } + + return urls.etherscanAddress || `${urls.etherscan || 'https://etherscan.io'}/address/` + } + + const normalizeContractsForTable = (entries, chain, fallbackLifecycle = 'paused') => + (entries || []).map((contract) => { + const type = contract.type || contract.deploymentKind || 'standalone' + const lifecycle = contract.lifecycle || fallbackLifecycle + const proxyAddress = contract.meta?.proxyAddress || contract.meta?.historicalProxyAddress || null + + return { + Name: contract.name, + Address: contract.address, + _addressHref: contract.blockchainHref || `${getExplorerBase(chain)}${contract.address}`, + Type: type, + Status: contract.meta?.statusLabel || lifecycleLabel[lifecycle] || lifecycle, + Category: contract.category, + Version: contract.version || contract.meta?.version || '—', + Chain: chainLabel[chain] || chain, + _lifecycle: lifecycle, + _chainKey: chain, + _typeKey: type, + _categoryKey: contract.category || 'other', + _proxyAddress: proxyAddress, + _proxyHref: proxyAddress ? `${getExplorerBase(chain)}${proxyAddress}` : null, + } + }) + + const sortContractsForDisplay = (tableItems = []) => { + const categoryOrder = ['bridge', 'core', 'governance', 'token', 'migration', 'genesis', 'utility', 'other'] + + return [...tableItems].sort((left, right) => { + const categoryA = categoryOrder.indexOf((left._categoryKey || left.Category || 'other').toLowerCase()) + const categoryB = categoryOrder.indexOf((right._categoryKey || right.Category || 'other').toLowerCase()) + if (categoryA !== categoryB) return categoryA - categoryB + + const nameCompare = String(left.Name || '').localeCompare(String(right.Name || ''), 'en', { + sensitivity: 'base', + }) + if (nameCompare !== 0) return nameCompare + + const chainCompare = String(left.Chain || '').localeCompare(String(right.Chain || ''), 'en', { + sensitivity: 'base', + }) + if (chainCompare !== 0) return chainCompare + + const versionA = Number(String(left.Version || '').replace(/^V/i, '')) || 0 + const versionB = Number(String(right.Version || '').replace(/^V/i, '')) || 0 + return versionA - versionB + }) + } + + const rows = [] + let lastCategory = null + + sortContractsForDisplay([ + ...normalizeContractsForTable(sourceData?.arbitrumOne?.paused, 'arbitrumOne', 'paused'), + ...normalizeContractsForTable(sourceData?.ethereumMainnet?.paused, 'ethereumMainnet', 'paused'), + ]).forEach((item) => { + if (item.Category && item.Category !== lastCategory) { + rows.push({ + __separator: true, + Name: String(item.Category).toUpperCase(), + }) + lastCategory = item.Category + } + + rows.push(item) + }) + + return rows +} + +export const getMigrationResidualTableItems = (sourceData = {}) => { + const chainLabel = { + arbitrumOne: 'Arbitrum One', + ethereumMainnet: 'Ethereum Mainnet', + } + + const lifecycleLabel = { + migration_residual: 'Migration', + } + + const getExplorerBase = (chain) => { + const urls = sourceData?.meta?.explorerUrls || {} + if (chain === 'arbitrumOne') { + return urls.arbiscanAddress || `${urls.arbiscan || 'https://arbiscan.io'}/address/` + } + + return urls.etherscanAddress || `${urls.etherscan || 'https://etherscan.io'}/address/` + } + + const normalizeContractsForTable = (entries, chain, fallbackLifecycle = 'migration_residual') => + (entries || []).map((contract) => { + const type = contract.type || contract.deploymentKind || 'standalone' + const lifecycle = contract.lifecycle || fallbackLifecycle + const proxyAddress = contract.meta?.proxyAddress || contract.meta?.historicalProxyAddress || null + + return { + Name: contract.name, + Address: contract.address, + _addressHref: contract.blockchainHref || `${getExplorerBase(chain)}${contract.address}`, + Type: type, + Status: contract.meta?.statusLabel || lifecycleLabel[lifecycle] || lifecycle, + Category: contract.category, + Version: contract.version || contract.meta?.version || '—', + Chain: chainLabel[chain] || chain, + _lifecycle: lifecycle, + _chainKey: chain, + _typeKey: type, + _categoryKey: contract.category || 'other', + _proxyAddress: proxyAddress, + _proxyHref: proxyAddress ? `${getExplorerBase(chain)}${proxyAddress}` : null, + } + }) + + const sortContractsForDisplay = (tableItems = []) => { + const categoryOrder = ['bridge', 'core', 'governance', 'token', 'migration', 'genesis', 'utility', 'other'] + + return [...tableItems].sort((left, right) => { + const categoryA = categoryOrder.indexOf((left._categoryKey || left.Category || 'other').toLowerCase()) + const categoryB = categoryOrder.indexOf((right._categoryKey || right.Category || 'other').toLowerCase()) + if (categoryA !== categoryB) return categoryA - categoryB + + const nameCompare = String(left.Name || '').localeCompare(String(right.Name || ''), 'en', { + sensitivity: 'base', + }) + if (nameCompare !== 0) return nameCompare + + const chainCompare = String(left.Chain || '').localeCompare(String(right.Chain || ''), 'en', { + sensitivity: 'base', + }) + if (chainCompare !== 0) return chainCompare + + const versionA = Number(String(left.Version || '').replace(/^V/i, '')) || 0 + const versionB = Number(String(right.Version || '').replace(/^V/i, '')) || 0 + return versionA - versionB + }) + } + + const rows = [] + let lastCategory = null + + sortContractsForDisplay([ + ...normalizeContractsForTable(sourceData?.arbitrumOne?.migration_residual, 'arbitrumOne', 'migration_residual'), + ...normalizeContractsForTable( + sourceData?.ethereumMainnet?.migration_residual, + 'ethereumMainnet', + 'migration_residual', + ), + ]).forEach((item) => { + if (item.Category && item.Category !== lastCategory) { + rows.push({ + __separator: true, + Name: String(item.Category).toUpperCase(), + }) + lastCategory = item.Category + } + + rows.push(item) + }) + + return rows +} + +export const getLegacyOperationalTableItems = (sourceData = {}) => { + const chainLabel = { + arbitrumOne: 'Arbitrum One', + ethereumMainnet: 'Ethereum Mainnet', + } + + const lifecycleLabel = { + legacy_operational: 'Legacy operational', + } + + const getExplorerBase = (chain) => { + const urls = sourceData?.meta?.explorerUrls || {} + if (chain === 'arbitrumOne') { + return urls.arbiscanAddress || `${urls.arbiscan || 'https://arbiscan.io'}/address/` + } + + return urls.etherscanAddress || `${urls.etherscan || 'https://etherscan.io'}/address/` + } + + const normalizeContractsForTable = (entries, chain, fallbackLifecycle = 'legacy_operational') => + (entries || []).map((contract) => { + const type = contract.type || contract.deploymentKind || 'standalone' + const lifecycle = contract.lifecycle || fallbackLifecycle + const proxyAddress = contract.meta?.proxyAddress || contract.meta?.historicalProxyAddress || null + + return { + Name: contract.name, + Address: contract.address, + _addressHref: contract.blockchainHref || `${getExplorerBase(chain)}${contract.address}`, + Type: type, + Status: contract.meta?.statusLabel || lifecycleLabel[lifecycle] || lifecycle, + Category: contract.category, + Version: contract.version || contract.meta?.version || '—', + Chain: chainLabel[chain] || chain, + _lifecycle: lifecycle, + _chainKey: chain, + _typeKey: type, + _categoryKey: contract.category || 'other', + _proxyAddress: proxyAddress, + _proxyHref: proxyAddress ? `${getExplorerBase(chain)}${proxyAddress}` : null, + } + }) + + const sortContractsForDisplay = (tableItems = []) => { + const categoryOrder = ['bridge', 'core', 'governance', 'token', 'migration', 'genesis', 'utility', 'other'] + + return [...tableItems].sort((left, right) => { + const categoryA = categoryOrder.indexOf((left._categoryKey || left.Category || 'other').toLowerCase()) + const categoryB = categoryOrder.indexOf((right._categoryKey || right.Category || 'other').toLowerCase()) + if (categoryA !== categoryB) return categoryA - categoryB + + const nameCompare = String(left.Name || '').localeCompare(String(right.Name || ''), 'en', { + sensitivity: 'base', + }) + if (nameCompare !== 0) return nameCompare + + const chainCompare = String(left.Chain || '').localeCompare(String(right.Chain || ''), 'en', { + sensitivity: 'base', + }) + if (chainCompare !== 0) return chainCompare + + const versionA = Number(String(left.Version || '').replace(/^V/i, '')) || 0 + const versionB = Number(String(right.Version || '').replace(/^V/i, '')) || 0 + return versionA - versionB + }) + } + + const rows = [] + let lastCategory = null + + sortContractsForDisplay([ + ...normalizeContractsForTable(sourceData?.arbitrumOne?.legacy_operational, 'arbitrumOne', 'legacy_operational'), + ...normalizeContractsForTable( + sourceData?.ethereumMainnet?.legacy_operational, + 'ethereumMainnet', + 'legacy_operational', + ), + ]).forEach((item) => { + if (item.Category && item.Category !== lastCategory) { + rows.push({ + __separator: true, + Name: String(item.Category).toUpperCase(), + }) + lastCategory = item.Category + } + + rows.push(item) + }) + + return rows +} + +export const historicalCategoryTitle = (category) => { + const historicalCategoryConfig = { + core: { + title: 'Core', + }, + governance: { + title: 'Governance', + }, + migration: { + title: 'Migration', + }, + genesis: { + title: 'Genesis', + }, + } + + return historicalCategoryConfig[category]?.title || + String(category || 'Historical') + .replace(/_/g, ' ') + .replace(/\b\w/g, (char) => char.toUpperCase()) +} + +export const historicalCategoryDescription = (category) => { + const historicalCategoryConfig = { + core: { + description: 'Historical staking, payments, round progression, and service discovery contracts', + }, + governance: { + description: 'Historical voting and proposal contracts', + }, + migration: { + description: 'Historical Confluence upgrade contracts', + }, + genesis: { + description: 'Historical libraries and helper contracts from the 2018 launch', + }, + } + + return historicalCategoryConfig[category]?.description || + 'Historical contract versions grouped by generator-owned contract series' +} + +export const historicalCategoryIconName = (category) => { + const historicalCategoryConfig = { + core: { icon: 'gear' }, + governance: { icon: 'landmark' }, + migration: { icon: 'bridge' }, + genesis: { icon: 'livepeer' }, + } + + return historicalCategoryConfig[category]?.icon || 'clock-rotate-left' +} diff --git a/snippets/composables/pages/canonical/livepeer-contract-addresses-data.json b/snippets/composables/pages/canonical/livepeer-contract-addresses-data.json new file mode 100644 index 000000000..25c1768dc --- /dev/null +++ b/snippets/composables/pages/canonical/livepeer-contract-addresses-data.json @@ -0,0 +1,16618 @@ +{ + "_generated": { + "by": "fetch-contract-addresses.js", + "at": "2026-04-02T18:54:54.557Z", + "source": "livepeer/governor-scripts (2cb192a)" + }, + "arbitrumOne": { + "inventory": [ + { + "id": "arbitrumOne.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Minter", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "170819630634242945376", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.aiServiceRegistry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", + "blockscoutLabel": "ServiceRegistry", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": "livepeer/go-livepeer", + "runtimeConsumerPath": "cmd/livepeer/starter/starter.go", + "runtimeConsumerResolvedCommit": "9e68815", + "runtimeConsumerExactAddressMatch": true, + "runtimeConsumerRequired": true, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.governor", + "name": "Governor", + "canonicalName": "Governor", + "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/Governor.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Governor", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingVotes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "governorKey": "BondingVotes", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "proxyTargetContractName": "BondingVotesTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "governorKey": "LivepeerGovernor", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "proxyTargetContractName": "LivepeerGovernorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "address": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Treasury", + "controllerResolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "governorKey": "Treasury", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "Treasury", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTGateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l2LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTDataCache", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "address": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "blockchainHref": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2LPTDataCache", + "controllerResolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "governorKey": "L2LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2LPTDataCache", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2Migrator", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "type": "proxy", + "deploymentKind": "proxy", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "governorKey": "L2Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "6714546397396733235", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "proxyTargetContractName": "L2MigratorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2Migrator", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "targetContractName": "L2MigratorTarget", + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.merkleSnapshot", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "address": "0x10736fface687658f88a46d042631d182c7757f7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "blockchainHref": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": "Migration proof registry retained for Confluence claim verification.", + "keccakHash": "0xb6138afe6f306a47bdf645c5aebcb9781efe787d221a1880e62d1f76dae58b84", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "MerkleSnapshot", + "controllerResolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "governorKey": "MerkleSnapshot", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleSnapshot", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "MerkleSnapshot" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/snapshots/MerkleSnapshot.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "MerkleSnapshot", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager.implementation", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V13", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V13", + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyTarget": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "implementationName": "BondingManager", + "implementationVersion": "V13", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.ticketBroker.implementation", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "TicketBroker", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": "TicketBroker", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager.implementation", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "RoundsManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": "RoundsManager", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.serviceRegistry.implementation", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "ServiceRegistry", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": "ServiceRegistry", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingVotes.implementation", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V2", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V2", + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyTarget": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingVotes", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "implementationName": "BondingVotes", + "implementationVersion": "V2", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor.implementation", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": null, + "governorKey": "livepeerGovernorTarget", + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyTarget": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "livepeerGovernorTarget" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "LivepeerGovernor", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "implementationName": "LivepeerGovernor", + "implementationVersion": null, + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2Migrator.implementation", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "L2Migrator", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": "L2Migrator", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.1", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.2", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V3", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.3", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V3", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V4", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.4", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V4", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V5", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.5", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V5", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V6", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.6", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V6", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V7", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.7", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V7", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V8", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.8", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V8", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V9", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.9", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V9", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V10", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.10", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V10", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V11", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.11", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V11", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V12", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.12", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V12", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.Minter.historicalSeries.1", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "Minter", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:Minter" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.1", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.2", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "governance.BondingVotes.historicalSeries.1", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingVotes", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "governance:BondingVotes" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "migration.L2Migrator.historicalSeries.1", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "L2Migrator", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "migration:L2Migrator" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "current": [ + { + "id": "arbitrumOne.l2LPTDataCache", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "address": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "blockchainHref": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2LPTDataCache", + "controllerResolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "governorKey": "L2LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2LPTDataCache", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTGateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l2LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.aiServiceRegistry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", + "blockscoutLabel": "ServiceRegistry", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": "livepeer/go-livepeer", + "runtimeConsumerPath": "cmd/livepeer/starter/starter.go", + "runtimeConsumerResolvedCommit": "9e68815", + "runtimeConsumerExactAddressMatch": true, + "runtimeConsumerRequired": true, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Minter", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "170819630634242945376", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.bondingVotes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "governorKey": "BondingVotes", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "proxyTargetContractName": "BondingVotesTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.governor", + "name": "Governor", + "canonicalName": "Governor", + "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/Governor.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Governor", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "governorKey": "LivepeerGovernor", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "proxyTargetContractName": "LivepeerGovernorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "address": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Treasury", + "controllerResolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "governorKey": "Treasury", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "Treasury", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "active": [ + { + "id": "arbitrumOne.l2LPTDataCache", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "address": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "blockchainHref": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2LPTDataCache", + "controllerResolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "governorKey": "L2LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2LPTDataCache", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTGateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l2LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.aiServiceRegistry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", + "blockscoutLabel": "ServiceRegistry", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": "livepeer/go-livepeer", + "runtimeConsumerPath": "cmd/livepeer/starter/starter.go", + "runtimeConsumerResolvedCommit": "9e68815", + "runtimeConsumerExactAddressMatch": true, + "runtimeConsumerRequired": true, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Minter", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "170819630634242945376", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.bondingVotes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "governorKey": "BondingVotes", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "proxyTargetContractName": "BondingVotesTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.governor", + "name": "Governor", + "canonicalName": "Governor", + "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/Governor.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Governor", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "governorKey": "LivepeerGovernor", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "proxyTargetContractName": "LivepeerGovernorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "address": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Treasury", + "controllerResolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "governorKey": "Treasury", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "Treasury", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "paused": [], + "migration_residual": [ + { + "id": "arbitrumOne.l2Migrator", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "type": "proxy", + "deploymentKind": "proxy", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "governorKey": "L2Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "6714546397396733235", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "proxyTargetContractName": "L2MigratorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2Migrator", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "targetContractName": "L2MigratorTarget", + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.merkleSnapshot", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "address": "0x10736fface687658f88a46d042631d182c7757f7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "blockchainHref": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:37.558Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": "Migration proof registry retained for Confluence claim verification.", + "keccakHash": "0xb6138afe6f306a47bdf645c5aebcb9781efe787d221a1880e62d1f76dae58b84", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "MerkleSnapshot", + "controllerResolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "governorKey": "MerkleSnapshot", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleSnapshot", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "MerkleSnapshot" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/snapshots/MerkleSnapshot.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:37.558Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "MerkleSnapshot", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "legacy_operational": [], + "historical": [ + { + "id": "core.BondingManager.historicalSeries.4", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V4", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V5", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.7", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V7", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V8", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.3", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V3", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V4", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.5", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V5", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V6", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.12", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V12", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.8", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V8", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V9", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.9", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V9", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V10", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.6", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V6", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V7", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.2", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V3", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.10", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V10", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V11", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.1", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.11", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V11", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V12", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.Minter.historicalSeries.1", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "Minter", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:Minter" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.1", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.2", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "governance.BondingVotes.historicalSeries.1", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingVotes", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "governance:BondingVotes" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "migration.L2Migrator.historicalSeries.1", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "L2Migrator", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "migration:L2Migrator" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "historicalSeries": { + "core": [ + { + "category": "core", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "entries": [] + }, + { + "category": "core", + "name": "BondingManager", + "canonicalName": "BondingManager", + "entries": [ + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "isCurrent": false, + "status": "Replaced by V2", + "replacedBy": "V2" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "isCurrent": false, + "status": "Replaced by V3", + "replacedBy": "V3" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "version": "V3", + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "isCurrent": false, + "status": "Replaced by V4", + "replacedBy": "V4" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "version": "V4", + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "isCurrent": false, + "status": "Replaced by V5", + "replacedBy": "V5" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "version": "V5", + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "isCurrent": false, + "status": "Replaced by V6", + "replacedBy": "V6" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "version": "V6", + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "isCurrent": false, + "status": "Replaced by V7", + "replacedBy": "V7" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "version": "V7", + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "isCurrent": false, + "status": "Replaced by V8", + "replacedBy": "V8" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "version": "V8", + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "isCurrent": false, + "status": "Replaced by V9", + "replacedBy": "V9" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "version": "V9", + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "isCurrent": false, + "status": "Replaced by V10", + "replacedBy": "V10" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "version": "V10", + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "isCurrent": false, + "status": "Replaced by V11", + "replacedBy": "V11" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "version": "V11", + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "isCurrent": false, + "status": "Replaced by V12", + "replacedBy": "V12" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "version": "V12", + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "core", + "name": "Controller", + "canonicalName": "Controller", + "entries": [] + }, + { + "category": "core", + "name": "Minter", + "canonicalName": "Minter", + "entries": [ + { + "name": "Minter", + "canonicalName": "Minter", + "category": "core", + "chain": "arbitrumOne", + "type": "standalone", + "deploymentKind": "standalone", + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "core", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "entries": [] + }, + { + "category": "core", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "entries": [] + }, + { + "category": "core", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "entries": [ + { + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "isCurrent": false, + "status": "Replaced by V2", + "replacedBy": "V2" + }, + { + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + } + ], + "governance": [ + { + "category": "governance", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "entries": [ + { + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "category": "governance", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "governance", + "name": "Governor", + "canonicalName": "Governor", + "entries": [] + }, + { + "category": "governance", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "entries": [] + }, + { + "category": "governance", + "name": "Treasury", + "canonicalName": "Treasury", + "entries": [] + } + ], + "migration": [ + { + "category": "migration", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "entries": [ + { + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "category": "migration", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "migration", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "entries": [] + } + ], + "bridge": [ + { + "category": "bridge", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "entries": [] + }, + { + "category": "bridge", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "entries": [] + } + ], + "token": [ + { + "category": "token", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "entries": [] + } + ] + }, + "currentImplementations": [ + { + "id": "arbitrumOne.bondingManager.implementation", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V13", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V13", + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyTarget": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "implementationName": "BondingManager", + "implementationVersion": "V13", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager.implementation", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "RoundsManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": "RoundsManager", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.serviceRegistry.implementation", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "ServiceRegistry", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": "ServiceRegistry", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.ticketBroker.implementation", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "TicketBroker", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": "TicketBroker", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingVotes.implementation", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V2", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V2", + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyTarget": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingVotes", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "implementationName": "BondingVotes", + "implementationVersion": "V2", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor.implementation", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": null, + "governorKey": "livepeerGovernorTarget", + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyTarget": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "livepeerGovernorTarget" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "LivepeerGovernor", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "implementationName": "LivepeerGovernor", + "implementationVersion": null, + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2Migrator.implementation", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:54:48.961Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:54:48.961Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "L2Migrator", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": "L2Migrator", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + } + ] + }, + "ethereumMainnet": { + "inventory": [ + { + "id": "ethereumMainnet.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "blockchainHref": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x58b6a8a3302369daec383334672404ee733ab239", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.bridgeMinter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "address": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2d6c985061f27c6c02785799a715099670620c5dfed3f3ecfc6ab406e3e5a343", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "bridgeMinter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTGateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/mainnet/L1Escrow.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Escrow", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTDataCache", + "name": "L1LPTDataCache", + "canonicalName": "L1LPTDataCache", + "address": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "blockchainHref": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x49b03ce75a9e4ad81079c9677a5caac20548a2407ee6cae472e3c47548b37445", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Migrator", + "name": "L1Migrator", + "canonicalName": "L1Migrator", + "address": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "blockchainHref": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x90edd673ce561432d8b3317a5e6cd5e3a9bcf30c121147d0ff66db9271de9877", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Migrator", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.genesisManager", + "name": "GenesisManager", + "canonicalName": "GenesisManager", + "address": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xae790d27d0e1d3e6bbd97ff692b457d4c526ea8c8fafd0cbd395567a2ebbf182", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Genesis Manager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "GenesisManager", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Genesis Manager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/GenesisManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.merkleMine", + "name": "MerkleMine", + "canonicalName": "MerkleMine", + "address": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "blockchainHref": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x17b6becfe8dae798aba9441d55041b5cc410570c1d4330fd6ad71b5c21ce4f94", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Merkle Mine", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleMine", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Merkle Mine" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/MerkleMine.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.multiMerkleMine", + "name": "MultiMerkleMine", + "canonicalName": "MultiMerkleMine", + "address": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": "Legacy utility contract resolved from external explorer label search and on-chain verification.", + "keccakHash": "0xeab338ace3157e6cc2478b0ca6c2bf1dd8991ff5e15bac587ae2bc250362dae9", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Multi Merkle Mine", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MultiMerkleMine", + "sourceResolvedCommit": null, + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Multi Merkle Mine" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.refunder", + "name": "Refunder", + "canonicalName": "Refunder", + "address": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "blockchainHref": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x792b8bc44b1b160cb25ea702539f6fdf7df4775be134bad718a7290c9340e510", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Refunder", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Refunder", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "848888801326164832", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Refunder" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/refund/Refunder.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.sortedDoublyLL", + "name": "SortedDoublyLL", + "canonicalName": "SortedDoublyLL", + "address": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "blockchainHref": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xf32422ac790bd816e1e02dc866df27d6d55047c1dc08def99809859734b7ab2c", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Sorted Doubly LL", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "SortedDoublyLL", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Sorted Doubly LL" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/libraries/SortedDoublyLL.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.merkleProof", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "genesis", + "lifecycle": "historical", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/zeppelin/MerkleProof.sol", + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": true, + "meta": { + "statusLabel": "historical", + "notes": "Genesis-era helper contract preserved in historical output once revalidated from explorer proof.", + "keccakHash": "0x48da7f48060dcfe0b83a05a73e26537e5aa09d41c10ed70f96ce727a592b8f7f", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleProof", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "6e6b452634542ff92b93643196a97ff356bac230", + "path": "contracts/zeppelin/MerkleProof.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/zeppelin/MerkleProof.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x406a112f3218b988c66778fd72fc8467f2601366", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "blockchainHref": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "genesis.MerkleProof.historicalSeries.1", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "genesis", + "lifecycle": "historical", + "chain": "ethereumMainnet", + "proofChain": "historical-series", + "version": null, + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "MerkleProof", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "genesis:MerkleProof" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "current": [ + { + "id": "ethereumMainnet.bridgeMinter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "address": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2d6c985061f27c6c02785799a715099670620c5dfed3f3ecfc6ab406e3e5a343", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "bridgeMinter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/mainnet/L1Escrow.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Escrow", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTGateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x58b6a8a3302369daec383334672404ee733ab239", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "active": [ + { + "id": "ethereumMainnet.bridgeMinter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "address": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2d6c985061f27c6c02785799a715099670620c5dfed3f3ecfc6ab406e3e5a343", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "bridgeMinter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/mainnet/L1Escrow.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Escrow", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTGateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x58b6a8a3302369daec383334672404ee733ab239", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "paused": [ + { + "id": "ethereumMainnet.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "blockchainHref": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x406a112f3218b988c66778fd72fc8467f2601366", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "blockchainHref": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + } + ], + "migration_residual": [ + { + "id": "ethereumMainnet.l1Migrator", + "name": "L1Migrator", + "canonicalName": "L1Migrator", + "address": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "blockchainHref": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x90edd673ce561432d8b3317a5e6cd5e3a9bcf30c121147d0ff66db9271de9877", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Migrator", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "legacy_operational": [ + { + "id": "ethereumMainnet.l1LPTDataCache", + "name": "L1LPTDataCache", + "canonicalName": "L1LPTDataCache", + "address": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "blockchainHref": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x49b03ce75a9e4ad81079c9677a5caac20548a2407ee6cae472e3c47548b37445", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.genesisManager", + "name": "GenesisManager", + "canonicalName": "GenesisManager", + "address": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xae790d27d0e1d3e6bbd97ff692b457d4c526ea8c8fafd0cbd395567a2ebbf182", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Genesis Manager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "GenesisManager", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Genesis Manager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/GenesisManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.merkleMine", + "name": "MerkleMine", + "canonicalName": "MerkleMine", + "address": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "blockchainHref": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x17b6becfe8dae798aba9441d55041b5cc410570c1d4330fd6ad71b5c21ce4f94", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Merkle Mine", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleMine", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Merkle Mine" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/MerkleMine.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.multiMerkleMine", + "name": "MultiMerkleMine", + "canonicalName": "MultiMerkleMine", + "address": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": "Legacy utility contract resolved from external explorer label search and on-chain verification.", + "keccakHash": "0xeab338ace3157e6cc2478b0ca6c2bf1dd8991ff5e15bac587ae2bc250362dae9", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Multi Merkle Mine", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MultiMerkleMine", + "sourceResolvedCommit": null, + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Multi Merkle Mine" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.refunder", + "name": "Refunder", + "canonicalName": "Refunder", + "address": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "blockchainHref": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x792b8bc44b1b160cb25ea702539f6fdf7df4775be134bad718a7290c9340e510", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Refunder", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Refunder", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "848888801326164832", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Refunder" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/refund/Refunder.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.sortedDoublyLL", + "name": "SortedDoublyLL", + "canonicalName": "SortedDoublyLL", + "address": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "explorer-search", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "blockchainHref": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-02T18:53:46.253Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xf32422ac790bd816e1e02dc866df27d6d55047c1dc08def99809859734b7ab2c", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Sorted Doubly LL", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "SortedDoublyLL", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "explorer-search", + "repo": null, + "path": "/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "refMode": "search-handler", + "resolvedCommit": null, + "key": "Sorted Doubly LL" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/libraries/SortedDoublyLL.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-02T18:53:46.253Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "historical": [ + { + "id": "genesis.MerkleProof.historicalSeries.1", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "genesis", + "lifecycle": "historical", + "chain": "ethereumMainnet", + "proofChain": "historical-series", + "version": null, + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "MerkleProof", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "genesis:MerkleProof" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "historicalSeries": { + "core": [ + { + "category": "core", + "name": "BondingManager", + "canonicalName": "BondingManager", + "entries": [] + }, + { + "category": "core", + "name": "Controller", + "canonicalName": "Controller", + "entries": [] + }, + { + "category": "core", + "name": "Minter", + "canonicalName": "Minter", + "entries": [] + }, + { + "category": "core", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "entries": [] + }, + { + "category": "core", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "entries": [] + }, + { + "category": "core", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "entries": [] + } + ], + "token": [ + { + "category": "token", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "entries": [] + } + ], + "bridge": [ + { + "category": "bridge", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "entries": [] + }, + { + "category": "bridge", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "entries": [] + }, + { + "category": "bridge", + "name": "L1LPTDataCache", + "canonicalName": "L1LPTDataCache", + "entries": [] + }, + { + "category": "bridge", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "entries": [] + } + ], + "migration": [ + { + "category": "migration", + "name": "L1Migrator", + "canonicalName": "L1Migrator", + "entries": [] + } + ], + "utility": [ + { + "category": "utility", + "name": "GenesisManager", + "canonicalName": "GenesisManager", + "entries": [] + }, + { + "category": "utility", + "name": "MerkleMine", + "canonicalName": "MerkleMine", + "entries": [] + }, + { + "category": "utility", + "name": "MultiMerkleMine", + "canonicalName": "MultiMerkleMine", + "entries": [] + }, + { + "category": "utility", + "name": "Refunder", + "canonicalName": "Refunder", + "entries": [] + }, + { + "category": "utility", + "name": "SortedDoublyLL", + "canonicalName": "SortedDoublyLL", + "entries": [] + } + ], + "genesis": [ + { + "category": "genesis", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "entries": [ + { + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "category": "genesis", + "chain": "ethereumMainnet", + "type": "standalone", + "deploymentKind": "standalone", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "version": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + } + ] + }, + "currentImplementations": [] + }, + "historical": { + "arbitrumOne": { + "BondingManager": [ + { + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "replacedBy": "V2", + "status": "Replaced by V2" + }, + { + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "chain": "arbitrumOne", + "type": "target", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "replacedBy": "V3", + "status": "Replaced by V3" + }, + { + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "chain": "arbitrumOne", + "type": "target", + "version": "V3", + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "replacedBy": "V4", + "status": "Replaced by V4" + }, + { + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "chain": "arbitrumOne", + "type": "target", + "version": "V4", + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "replacedBy": "V5", + "status": "Replaced by V5" + }, + { + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "chain": "arbitrumOne", + "type": "target", + "version": "V5", + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "replacedBy": "V6", + "status": "Replaced by V6" + }, + { + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "chain": "arbitrumOne", + "type": "target", + "version": "V6", + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "replacedBy": "V7", + "status": "Replaced by V7" + }, + { + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "chain": "arbitrumOne", + "type": "target", + "version": "V7", + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "replacedBy": "V8", + "status": "Replaced by V8" + }, + { + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "chain": "arbitrumOne", + "type": "target", + "version": "V8", + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "replacedBy": "V9", + "status": "Replaced by V9" + }, + { + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "chain": "arbitrumOne", + "type": "target", + "version": "V9", + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "replacedBy": "V10", + "status": "Replaced by V10" + }, + { + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "chain": "arbitrumOne", + "type": "target", + "version": "V10", + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "replacedBy": "V11", + "status": "Replaced by V11" + }, + { + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "chain": "arbitrumOne", + "type": "target", + "version": "V11", + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "replacedBy": "V12", + "status": "Replaced by V12" + }, + { + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "chain": "arbitrumOne", + "type": "target", + "version": "V12", + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "replacedBy": null, + "status": "Deprecated" + } + ], + "Minter": [ + { + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "chain": "arbitrumOne", + "type": "standalone", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "replacedBy": null, + "status": "Deprecated" + } + ], + "TicketBroker": [ + { + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "replacedBy": "V2", + "status": "Replaced by V2" + }, + { + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "chain": "arbitrumOne", + "type": "target", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "replacedBy": null, + "status": "Deprecated" + } + ], + "BondingVotes": [ + { + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "replacedBy": null, + "status": "Deprecated" + } + ], + "L2Migrator": [ + { + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "replacedBy": null, + "status": "Deprecated" + } + ] + }, + "ethereumMainnet": { + "MerkleProof": [ + { + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "chain": "ethereumMainnet", + "type": "standalone", + "version": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "replacedBy": null, + "status": "Deprecated" + } + ] + } + }, + "meta": { + "lastUpdated": "2026-04-02T18:54:54.557Z", + "lastVerified": "3 Apr 2026", + "sourceRepo": "livepeer/governor-scripts", + "sourceCommit": "2cb192a", + "verificationSummary": "16/16 Arbitrum source-verified, 17/17 Mainnet source-verified", + "bytecodeSummary": "16/16 Arbitrum with bytecode, 17/17 Mainnet with bytecode", + "explorerUrls": { + "arbiscan": "https://arbiscan.io", + "arbiscanAddress": "https://arbiscan.io/address/", + "etherscan": "https://etherscan.io", + "etherscanAddress": "https://etherscan.io/address/", + "blockscoutArbitrum": "https://arbitrum.blockscout.com", + "blockscoutEthereum": "https://eth.blockscout.com" + }, + "rpcUrls": { + "arbitrumOne": [ + "https://arb1.arbitrum.io/rpc", + "https://arbitrum-one-rpc.publicnode.com", + "https://arbitrum.drpc.org" + ], + "ethereumMainnet": [ + "https://eth.llamarpc.com", + "https://ethereum-rpc.publicnode.com", + "https://eth.drpc.org" + ] + }, + "verificationModel": "contracts-proof-v2", + "watchedRepos": [ + { + "repo": "livepeer/protocol", + "preferredBranches": [ + "delta", + "streamflow", + "master" + ], + "role": "controller-and-provenance" + }, + { + "repo": "livepeer/arbitrum-lpt-bridge", + "preferredBranches": [ + "main" + ], + "role": "bridge-and-token" + }, + { + "repo": "livepeer/go-livepeer", + "preferredBranches": [ + "master", + "main" + ], + "role": "runtime-consumer" + }, + { + "repo": "livepeer/governor-scripts", + "preferredBranches": [ + "master", + "main" + ], + "role": "governance-discovery" + } + ], + "latestResolutionPolicy": [ + "Current controller-managed addresses are recovered from live controller reads on every run.", + "Bridge and detached families must resolve from watched upstream repositories or official manifests, then survive runtime and explorer validation.", + "Branch names are discovery inputs only. Published code provenance must resolve to repo, commit, and file path.", + "Docs-local files do not define publishable address truth, lifecycle truth, implementation truth, or code-source truth.", + "Silent degradation is not a permitted outcome. Unresolved truth, provenance, or branch anomalies produce a blocking incident artifact." + ], + "cadence": { + "defaultLabel": "daily", + "mainScheduleCron": "0 2 * * *", + "shadowScheduleCron": "30 2 * * *", + "configurable": true + } + } +} \ No newline at end of file diff --git a/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx b/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx new file mode 100644 index 000000000..7d0ddfc5d --- /dev/null +++ b/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx @@ -0,0 +1,345 @@ +--- +sidebarTitle: Contract Addresses +title: Contract Addresses +description: >- + Current and historical Livepeer protocol contract addresses across Arbitrum + One and Ethereum Mainnet. Verified on-chain. +keywords: + - livepeer + - livepeer contracts + - livepeer contract address + - livepeer contract addresses + - LPT contract address + - LPT token address + - livepeer token address + - livepeer smart contract address + - livepeer arbitrum contract address + - livepeer ethereum contract address + - livepeer official contract + - livepeer protocol contracts + - contract addresses + - arbitrum + - ethereum + - blockchain + - smart contracts + - canonical + - reference + - livepeer BondingManager + - livepeer TicketBroker + - livepeer Controller + - livepeer RoundsManager + - livepeer Governor + - livepeer verified contracts + - livepeer arbiscan + - official livepeer addresses + - "0x289ba1701C2F088cf0faf8B3705246331cB8A839" + - "0x58b6a8a3302369daec383334672404ee733ab239" +'og:title': Contract Addresses +'og:description': >- + Current and historical Livepeer protocol contract addresses across Arbitrum + One and Ethereum Mainnet. Verified on-chain. +'og:image': /snippets/assets/site/og-image/fallback.png +'og:image:alt': Livepeer Docs social preview image +'og:image:type': image/png +'og:image:width': 1200 +'og:image:height': 630 +'twitter:card': summary_large_image +'twitter:title': Contract Addresses +'twitter:description': >- + Current and historical Livepeer protocol contract addresses across Arbitrum + One and Ethereum Mainnet. Verified on-chain. +pageType: reference +purpose: reference +audience: community +status: current +lastVerified: 2026-03-26 +--- + +{/* components */} +import { CustomDivider, InlineDivider } from '/snippets/components/elements/spacing/Divider.jsx' +import { DoubleIconLink } from '/snippets/components/elements/links/Links.jsx' +import { SearchTableV2 } from '/snippets/components/wrappers/tables/SearchTable.jsx' +import { DynamicTable, DynamicTableV2 } from '/snippets/components/wrappers/tables/Table.jsx' +import { AccordionTitle } from '/snippets/components/elements/text/CustomCardTitle.jsx' +import { LinkIcon } from '/snippets/components/elements/links/Links.jsx' +import { CopyText } from '/snippets/components/elements/text/Text.jsx' +import { ArbitrumIcon, LivepeerIcon } from '/snippets/components/elements/icons/Icons.jsx' +import { HistoricalContractTable } from '/snippets/components/displays/tables/HistoricalContractTable.jsx' +import { DataWrap } from '/snippets/components/wrappers/data/workflows.jsx' +import VerifyContractAddresses from '/snippets/composables/pages/canonical/verify-contract-addresses.mdx' +import { + buildCategoryAccordionRows, + getActiveTableItems, + getLegacyOperationalTableItems, + getMigrationResidualTableItems, + getPausedTableItems, + getProxyTableItems, + historicalCategoryDescription, + historicalCategoryIcon, + historicalCategoryTitle, +} from '/snippets/composables/pages/canonical/data/livepeer-contract-addresses-page-data.jsx' + +{/* data */} +import { contractAddresses } from '/snippets/data/contract-addresses/contractAddressesData.jsx' + +<Danger> + Ensure you are on the official `docs.livepeer.org/` site before using any address. + <br/><br/> **ALWAYS VERIFY ADDRESSES ON-CHAIN** + - [Livepeer Contracts Address Verifier Widget](#verifier-widget-verify-contract-address) + - [No-Trust Livepeer Contract Verification On-chain Steps](#No-Trust-On-chain-Address-Verification) + </Danger> + +<Tip> + Addresses on this page are automatically updated via a GitHub Action workflow `update-contract-addresses.yml`. + + Current addresses are recovered from live controller reads, upstream deployment sources, commit-pinned code provenance, and explorer verification. + + **Last Verified:** <DataWrap value={contractAddresses.meta.lastVerified} /> +</Tip> + +<br/> +<Columns cols={2}> + <Card + href="https://github.com/livepeer/protocol" + icon="github" + title={<>Livepeer Protocol Source <br/> <Badge color="green"> Commit Pinned </Badge></>} + horizontal + /> + <Card + href="https://arbiscan.io/accounts/label/livepeer" + icon="cubes" + title={<>Livepeer Contracts Arbiscan <br/> <Badge color="green"> On-chain Verified </Badge></>} + horizontal + /> +</Columns> + +<CustomDivider /> + +<VerifyContractAddresses /> + +<CustomDivider /> + +## Livepeer Contract Overview + +Livepeer protocol contracts are deployed on **Arbitrum One** (active) and **Ethereum Mainnet** (legacy bridge and governance). Proxy addresses are stable across upgrades; target addresses change when a new implementation is deployed via governance. + +<AccordionGroup> + <Accordion title={<AccordionTitle icon={<Icon icon="gear" color="var(--accent)" />} title="Core" description="Staking, payments, round progression, and service discovery" />}> + <InlineDivider margin="0" /> + Core Contracts are the operational backbone of the protocol. Most use a [proxy/target](https://docs.openzeppelin.com/contracts/5.x/api/proxy#TransparentUpgradeableProxy) pattern where the proxy address is stable across governance upgrades. + - Controller + - BondingManager + - TicketBroker + - RoundsManager + - Minter + - ServiceRegistry + - AIServiceRegistry + <DoubleIconLink label="Full Documentation" iconLeft="file-code" href="/v2/about/livepeer-protocol/blockchain-contracts#core-protocol-contracts"/> + </Accordion> + <Accordion title={<AccordionTitle icon={<Icon icon="coins" color="var(--accent)" />} title="Token" description="The LPT ERC-20 token and bridge infrastructure" />}> + <InlineDivider margin="0" /> + The [Livepeer Token (LPT)](/v2/about/livepeer-protocol/livepeer-token) secures the protocol and enables governance and staking. Its main contract lives on the secure Ethereum L1 chain (genesis deployment) with a minter for Arbitrum L2 LPT. + - LivepeerToken + - BridgeMinter + <DoubleIconLink label="Full Documentation" iconLeft="file-code" href="/v2/about/livepeer-protocol/blockchain-contracts#token-contracts"/> + </Accordion> + <Accordion title={<AccordionTitle icon={<Icon icon="landmark" color="var(--accent)" />} title="Governance" description="On-chain voting, proposal execution, and treasury management" />}> + <InlineDivider margin="0" /> + Governance Contracts power protocol upgrades via [LIPs](https://github.com/livepeer/LIPs) and a democratic [Governance Model](/v2/about/livepeer-protocol/governance-model), and fund the public good [Treasury](/v2/about/livepeer-protocol/treasury). + - Governor + - LivepeerGovernor + - Treasury + - BondingVotes + - MerkleSnapshot + - PollCreator + <DoubleIconLink label="Full Documentation" iconLeft="file-code" href="/v2/about/livepeer-protocol/blockchain-contracts#governance-contracts"/> + </Accordion> + <Accordion title={<AccordionTitle icon={<Icon icon="bridge" color="var(--accent)" />} title="Bridge" description="Cross-chain infrastructure connecting Ethereum Mainnet and Arbitrum One" />}> + <InlineDivider margin="0" /> + Bridge Contracts provide LP Token transfers and data synchronisation between the Ethereum Mainnet and Arbitrum One. L1Escrow holds all bridged LPT. + - L2LPTGateway + - L2LPTDataCache + - L1LPTGateway + - L1LPTDataCache + - L1Escrow + - L1Migrator + <DoubleIconLink label="Full Documentation" iconLeft="file-code" href="/v2/about/livepeer-protocol/blockchain-contracts#bridge-contracts"/> + </Accordion> + <Accordion title={<AccordionTitle icon={<Icon icon="wrench" color="var(--accent)" />} title="Utility" description="Libraries and helper contracts (genesis distribution, sorting, refunds)" />}> + <InlineDivider margin="0" /> + Ethereum Mainnet only. Historical infrastructure from the original 2018 launch, which has been migrated to Arbitrum. + - GenesisManager + - MerkleMine + - MultiMerkleMine + - Refunder + - SortedDoublyLL + <DoubleIconLink label="Full Documentation" iconLeft="file-code" href="/v2/about/livepeer-protocol/blockchain-contracts"/> + </Accordion> + <Accordion title={<AccordionTitle icon={<Icon icon="clock-rotate-left" color="var(--accent)" />} title="Migration" description="Historical Confluence upgrade contracts (2022), migration complete" />}> + <InlineDivider margin="0" /> + Facilitated the migration of staked LPT from Ethereum Mainnet to Arbitrum One. No new migrations are possible. L2Migrator still accepts `claimStake` from participants who have not yet claimed. + - L2Migrator + - DelegatorPool + <DoubleIconLink label="Full Documentation" iconLeft="file-code" href="/v2/about/livepeer-protocol/blockchain-contracts#migration-contracts"/> + </Accordion> +</AccordionGroup> + +## Active Livepeer Contract Addresses +<Badge color="green"> ACTIVE </Badge> +<Icon icon="check" color="var(--text)"/> _Verified <DataWrap value={contractAddresses.meta.lastVerified}/>_ + +This table lists currently active standalone contract entrypoints together with the current implementation targets behind active upgradeable proxies. Active proxy addresses are listed separately below. Paused, migration-residual, and legacy-operational contracts are grouped into a separate section so the main searchable table stays active-only. + +<Accordion title="See Workflow Verification Information"> + The contracts registry on this page is generated by the GitHub Actions workflow [`update-contract-addresses.yml`](https://github.com/livepeer/docs/blob/main/.github/workflows/update-contract-addresses.yml). + + - Refresh cadence: Scheduled daily at 02:00 UTC (`0 2 * * *`) + - Manual dispatch: Supports `dry_run`, `skip_verify`, and `use_test_branch` + - Repository dispatch triggers: `governor-scripts-update`, `protocol-update`, `bridge-update`, `go-livepeer-update` +</Accordion> + +<SearchTableV2 + TableComponent={DynamicTableV2} + headerList={["Name", "Address", "Type", "Chain"]} + itemsList={getActiveTableItems(contractAddresses)} + columnWidths={{ Type: 'clamp(4.5rem, 6vw, 5.25rem)', Chain: 'clamp(12rem, 22vw, 15rem)' }} + monospaceColumns={[]} + searchPlaceholder="Search by name or address..." + searchColumns={["Name", "Address"]} + categoryColumn="Category" + filterColumns={["Chain", "Type"]} + showSeparators={true} + separatorColumn="Category" + boldFirstColumn={true} + columnVariant={{ "Type": "badge", "Chain": "textIcon", "Address": "addressWrapper" }} + categoryBadges={[ + { label: "target", color: "surface-destructive" }, + { label: "standalone", color: "blue" }, + ]} + textIcons={[ + { label: "Arbitrum One", icon: <ArbitrumIcon color="var(--arbitrum)"/> }, + { label: "Ethereum Mainnet", icon: <Icon icon="ethereum" color="var(--hero-text)" size={13} /> } + ]} +/> + +### Active Proxy Contract Addresses + +Proxy addresses are stable upgrade entrypoints for active controller-managed contracts. They are primarily useful for deployment, governance upgrade, and implementation-tracking workflows rather than day-to-day contract usage. + +<SearchTableV2 + TableComponent={DynamicTableV2} + headerList={["Name", "Proxy", "Proxy Address", "Chain", "Target", "Target Address"]} + itemsList={getProxyTableItems(contractAddresses)} + columnWidths={{ + Name: 'clamp(10rem, 16vw, 14rem)', + Proxy: 'clamp(3.75rem, 5vw, 4.5rem)', + "Proxy Address": 'clamp(14rem, 26vw, 20rem)', + Chain: 'clamp(12rem, 22vw, 15rem)', + Target: 'clamp(3.75rem, 5vw, 4.5rem)', + "Target Address": 'clamp(14rem, 26vw, 20rem)', + }} + monospaceColumns={[]} + searchPlaceholder="Search proxy contracts by name or address..." + searchColumns={["Name", "Proxy Address", "Target Address"]} + categoryColumn="Category" + filterColumns={["Chain"]} + showSeparators={true} + separatorColumn="Category" + boldFirstColumn={true} + columnVariant={{ "Proxy": "badge", "Proxy Address": "addressWrapper", "Chain": "textIcon", "Target": "badge", "Target Address": "addressWrapper" }} + categoryBadges={[ + { label: "proxy", color: "surface" }, + { label: "target", color: "surface-destructive" }, + ]} + textIcons={[ + { label: "Arbitrum One", icon: <ArbitrumIcon color="var(--arbitrum)"/> }, + { label: "Ethereum Mainnet", icon: <Icon icon="ethereum" color="var(--hero-text)" size={13} /> } + ]} +/> + +<CustomDivider /> + +### Published Non-Active Contracts + +Paused Ethereum contracts, migration-residual contracts, and legacy-operational helper contracts remain published for verification and audit purposes, but they are not part of the active contract table above. + +<AccordionGroup> + <Accordion title="Paused" icon="pause"> + <p style={{ color: "var(--text)", fontStyle: "italic", marginBottom: "0.75rem" }}> + Controller-era contracts that remain published for verification but are no longer active. + </p> + <DynamicTable + headerList={["Name", "Address", "Chain", "Type"]} + itemsList={buildCategoryAccordionRows(getPausedTableItems(contractAddresses))} + columnWidths={{ Chain: '36%' }} + showSeparators={true} + /> + </Accordion> + + <Accordion title="Migration" icon="clock-rotate-left"> + <p style={{ color: "var(--text)", fontStyle: "italic", marginBottom: "0.75rem" }}> + Contracts left in place for late claims or migration completion workflows. + </p> + <DynamicTable + headerList={["Name", "Address", "Chain", "Type"]} + itemsList={buildCategoryAccordionRows(getMigrationResidualTableItems(contractAddresses))} + columnWidths={{ Chain: '36%' }} + showSeparators={true} + /> + </Accordion> + + <Accordion title="Legacy Operational" icon="wrench"> + <p style={{ color: "var(--text)", fontStyle: "italic", marginBottom: "0.75rem" }}> + Legacy helper contracts that remain deployed for reference or support functions. + </p> + <DynamicTable + headerList={["Name", "Address", "Chain", "Type"]} + itemsList={buildCategoryAccordionRows(getLegacyOperationalTableItems(contractAddresses))} + columnWidths={{ Chain: '36%' }} + showSeparators={true} + /> + </Accordion> +</AccordionGroup> + +<CustomDivider /> + +## Historical Contract Addresses + +Historical implementations replaced through governance upgrades. These target contracts are superseded and listed for audit trail and version history only. Do not interact with deprecated targets directly. + +<AccordionGroup> + <Accordion title={<AccordionTitle icon={historicalCategoryIcon("core")} title={historicalCategoryTitle("core")} description={historicalCategoryDescription("core")} />}> + <HistoricalContractTable category="core" sourceData={contractAddresses} /> + </Accordion> + + <Accordion title={<AccordionTitle icon={historicalCategoryIcon("governance")} title={historicalCategoryTitle("governance")} description={historicalCategoryDescription("governance")} />}> + <HistoricalContractTable category="governance" sourceData={contractAddresses} /> + </Accordion> + + <Accordion title={<AccordionTitle icon={historicalCategoryIcon("migration")} title={historicalCategoryTitle("migration")} description={historicalCategoryDescription("migration")} />}> + <HistoricalContractTable category="migration" sourceData={contractAddresses} /> + </Accordion> + + <Accordion title={<AccordionTitle icon={historicalCategoryIcon("genesis")} title={historicalCategoryTitle("genesis")} description={historicalCategoryDescription("genesis")} />}> + <HistoricalContractTable category="genesis" sourceData={contractAddresses} /> + </Accordion> +</AccordionGroup> + +<CustomDivider /> + +## Contract Source Code + +<CardGroup cols={2}> + <Card title="Livepeer Protocol" icon="github" href="https://github.com/livepeer/protocol/tree/delta/contracts" arrow> + Core protocol Solidity contracts (BondingManager, TicketBroker, RoundsManager, Controller, governance) + </Card> + <Card title="Arbitrum LPT Bridge" icon="github" href="https://github.com/livepeer/arbitrum-lpt-bridge/tree/main/contracts" arrow> + Token bridge contracts connecting Ethereum Mainnet and Arbitrum One + </Card> + <Card title="Contracts Proof Inputs" icon="github" href="https://github.com/livepeer" arrow> + Watched upstream repositories used for discovery, provenance resolution, and verification support + </Card> + <Card title="Livepeer on Arbiscan" icon="cubes" href="https://arbiscan.io/accounts/label/livepeer" arrow> + All labelled Livepeer contracts on Arbitrum One block explorer + </Card> +</CardGroup> diff --git a/snippets/composables/pages/canonical/verify-contract-addresses.mdx b/snippets/composables/pages/canonical/verify-contract-addresses.mdx new file mode 100644 index 000000000..95565efa9 --- /dev/null +++ b/snippets/composables/pages/canonical/verify-contract-addresses.mdx @@ -0,0 +1,100 @@ +import { InlineDivider } from '/snippets/components/elements/spacing/Divider.jsx' +import { StyledSteps, StyledStep } from '/snippets/components/wrappers/steps/Steps.jsx' +import { ContractVerifier } from '/snippets/components/integrators/feeds/ContractVerifier.jsx' +import { CustomCardTitle } from '/snippets/components/elements/text/CustomCardTitle.jsx' +import { BorderedBox } from '/snippets/components/wrappers/containers/Containers.jsx' +import { contractAddresses } from '/snippets/data/contract-addresses/contractAddressesData.jsx' + +## Verifier Widget: Verify Contract Address + +Use the tool below to query the blockchain directly from your browser. + +<Accordion title={<CustomCardTitle variant="accordion" icon={<Icon icon="info-circle" color="var(--accent)" />} title="How this widget works" />}> + This widget queries the blockchain directly from your browser. No backend, no API keys, no sign-in. Every contract on this + page is verifiable. + + <StyledSteps> + <StyledStep title="Look up a contract by name" icon="terminal"> + Select any Livepeer contract from the dropdown. For contracts registered in the on-chain Controller, the widget calls + `getContract()` via a public Arbitrum RPC and compares the returned address against this page. For standalone and utility + contracts not in the Controller, the widget verifies the address directly on [Blockscout](https://arbitrum.blockscout.com), + confirming it is a deployed, verified contract. + </StyledStep> + <StyledStep title="Verify an address you already have" icon="magnifying-glass"> + Paste any address and the widget queries the [Blockscout API](https://arbitrum.blockscout.com) to check whether it is a + contract, whether its source code is verified, and what its explorer label is. It then cross-references the address against + the contract data on this page. + </StyledStep> + </StyledSteps> + + <Note> + Three public RPC endpoints are tried in sequence with automatic failover: + [arb1.arbitrum.io](https://arb1.arbitrum.io/rpc), + [publicnode.com](https://arbitrum-one-rpc.publicnode.com), + [drpc.org](https://arbitrum.drpc.org). + + If all are unreachable, the widget shows a `cast` command you can run locally. + Queries only fire when you click a button, never on page load. + No data leaves your browser except to these public endpoints. + + Full list of public Arbitrum One RPCs: [Chainlist](https://chainlist.org/chain/42161). + </Note> +</Accordion> + +<br/> + +<BorderedBox variant="accent"> + <ContractVerifier data={contractAddresses} /> +</BorderedBox> + +### No-Trust On-chain Address Verification + +Every Arbitrum One contract address can be independently verified by querying the Controller on-chain. No trust in documentation +or widgets is required. + +<Accordion title={<CustomCardTitle variant="accordion" icon={<Icon icon="key" color="var(--accent)" />} title="See steps to verify an address on-chain" />}> + <StyledSteps> + <StyledStep title={<span>Call <code>getContract</code> on the Controller</span>} icon="terminal"> + Query `getContract(keccak256("<ContractName>"))` on the Controller at `0xD8E8328501E9645d16Cf49539efC04f734606ee4` + (Arbitrum One, chain 42161). The returned address is the current registered implementation. + + ```bash title="Controller getContract Example" icon="terminal" + # Example: verify BondingManager proxy address + cast call 0xD8E8328501E9645d16Cf49539efC04f734606ee4 \ + "getContract(bytes32)(address)" \ + $(cast keccak "BondingManager") \ + --rpc-url https://arb1.arbitrum.io/rpc + ``` + + A registered contract returns a non-zero 42-character address: + + ```txt title="Example Controller Response" icon="terminal" + 0x35Bcf3c30594191d53231E4FF333E8A770453e40 + ``` + + If the output is `0x0000000000000000000000000000000000000000`, the contract name is misspelled or does not exist on this chain. + + <InlineDivider margin="0.5rem 0" /> + </StyledStep> + + <StyledStep title={<span>Cross Check Against Published Proof</span>} icon="triangle-exclamation"> + Confirm the returned address matches the current row on this page, then inspect the row's source link and explorer link. + The page publishes the same verified address, chain, and source provenance that the contracts pipeline generated on the last + successful run. + + <InlineDivider margin="0.5rem 0" /> + </StyledStep> + + <StyledStep title="Inspect on Arbiscan" icon="triangle-exclamation"> + Paste the address into [Arbiscan](https://arbiscan.io) or [Blockscout](https://arbitrum.blockscout.com) to confirm: + + - **Contract label** - the header shows "Livepeer: [ContractName]" or "Livepeer: Proxy [ContractName]" + - **Verified source** - the Contract tab has a green checkmark + - **Deployer** - deployed by `0x5C83dC...` (the Livepeer Foundation deployer) + - **Transaction history** - at least several transactions going back to the deployment date + + <Danger> An address that returns no label, unverified bytecode, zero transactions, or "This address is not a contract" is not a Livepeer protocol contract.</Danger> + <InlineDivider margin="0.2rem 0" /> + </StyledStep> + </StyledSteps> +</Accordion> diff --git a/snippets/data/contract-addresses/_branch-watch-state.json b/snippets/data/contract-addresses/_branch-watch-state.json new file mode 100644 index 000000000..809d49e29 --- /dev/null +++ b/snippets/data/contract-addresses/_branch-watch-state.json @@ -0,0 +1,201 @@ +{ + "generatedAt": "2026-04-03T10:00:28.003Z", + "repos": [ + { + "repo": "livepeer/protocol", + "role": "controller-and-provenance", + "defaultBranch": "delta", + "branches": [ + "0xcadams/update-deploy", + "add_vscode_hardhat_contribution_note", + "cf/next", + "confluence", + "delta", + "delta-lip91", + "delta-lip92", + "dependabot/npm_and_yarn/cookiejar-2.1.4", + "dependabot/npm_and_yarn/decode-uri-component-0.2.2", + "dependabot/npm_and_yarn/express-4.18.2", + "dependabot/npm_and_yarn/http-cache-semantics-4.1.1", + "dependabot/npm_and_yarn/openzeppelin/contracts-4.7.3", + "dependabot/npm_and_yarn/qs-6.5.3", + "develop", + "expand-active-transcoder-set-old", + "feat/add-reward-caller/reward-caller-to-transcoder-signature", + "feat/extend-auxdata", + "fix/add-reward-caller/reward-caller-to-transcoder", + "internal-audit-v1", + "kk/deployment-update-2", + "kk/purge-BM", + "kk/refactor-rpc-class", + "kk/remove-web3js", + "master", + "next", + "nitro-devnet-deployment", + "nv/commission", + "nv/cumul-earnings-bug", + "nv/fluent-active-set", + "nv/gas-report", + "nv/lip56", + "nv/remove-pending-params", + "nv/viewer-contract", + "pm", + "rb/broadcaster-info-hh-task", + "rb/localhost-deployment", + "rb/transcoderPool-aggregate-queries", + "staking-update-spike", + "streamflow", + "streamflow-audit", + "streamflow-internal-audit", + "vg/fork-test-2", + "vg/spike/treasury", + "vg/test/treasury-logs", + "yf/confluence-deploy-updates", + "yf/cumulative-earnings", + "yf/cumulative-earnings-diff", + "yf/fix-active-stake-update-round-bug", + "yf/freeze-reserve-remainder-of-round-spike", + "yf/lip83", + "yf/pm-reserve", + "yf/public-get-ticket-hash", + "yf/solc-update", + "yf/transcoder-vote-weight-spike", + "yf/unsorted-list" + ] + }, + { + "repo": "livepeer/arbitrum-lpt-bridge", + "role": "bridge-and-token", + "defaultBranch": "main", + "branches": [ + "kk/automation", + "kk/deployment-update", + "kk/fetch-protocol-addresses", + "main", + "yf/deployment-update", + "yf/events", + "yf/fix-migrator", + "yf/validate" + ] + }, + { + "repo": "livepeer/go-livepeer", + "role": "runtime-consumer", + "defaultBranch": "master", + "branches": [ + "403-instead", + "AI_323_review", + "BYOC", + "ENG-2368-orch-webhook-omitempty", + "TTS_pipeline_integration_rebase_rick", + "add_ai_gateway_overlay", + "add_ai_service_registry_info_log", + "add_build_stable_release", + "add_capacity_orch_error", + "add_devtool_args", + "add_optimization_flags_docker", + "add_reward_call_retries", + "ai-video-ai-spe-base-capacity", + "ai-video-build-ci-fix", + "ai-video-build-ci-python-setup-fix", + "ai-video-fix-selection-pr-rebased", + "ai-video-fix-win-bin", + "ai-video-remoteaiworker-pr-rebase", + "ai_remote_worker_patches", + "ak/connection_close_fix", + "ak/fix_make_build_tags", + "ak/mock_transcoder", + "allow_scientific_price_notation", + "ar/handle-custom-bitrate-ladder-squashed-tiny", + "av/add-byoc-streaming", + "av/add-data-url", + "av/add-random-selection-to-ai-pools", + "av/byoc-add-streaming", + "av/check-profiles-bitrate", + "av/label-temp-files", + "av/large-payments-test", + "av/update-go-livepeer-docker-build", + "bp/add-fields-to-img2vid", + "bug/handle-invalid-input-duration", + "bump_lpms", + "chore/add-code-owners", + "corey/fix-dockerfile", + "corey/inf-410-investigate-orchestrator-capacity-alerts", + "create_vscode_dev_container", + "cursor/migrate-and-clean-up-old-containers-426b", + "cursor/migrate-docker-tests-to-use-synctest-2591", + "dependabot/docker/docker/golang-1.25.4", + "dependabot/github_actions/actions/cache-4", + "dependabot/github_actions/actions/download-artifact-6", + "dependabot/github_actions/actions/upload-artifact-5", + "dependabot/github_actions/dawidd6/action-download-artifact-11", + "dependabot/github_actions/google-github-actions/upload-cloud-storage-3", + "dependabot/go_modules/github.com/consensys/gnark-crypto-0.18.1", + "dependabot/go_modules/github.com/containerd/containerd-1.7.11", + "dependabot/go_modules/github.com/docker/docker-24.0.9incompatible", + "dependabot/go_modules/github.com/docker/docker-28.5.1incompatible", + "dependabot/go_modules/github.com/ethereum/go-ethereum-1.13.15", + "dependabot/go_modules/github.com/ethereum/go-ethereum-1.16.5", + "dependabot/go_modules/github.com/getkin/kin-openapi-0.131.0", + "dependabot/go_modules/github.com/getkin/kin-openapi-0.133.0", + "dependabot/go_modules/github.com/go-chi/chi/v5-5.2.2", + "dependabot/go_modules/github.com/go-chi/chi/v5-5.2.3", + "dependabot/go_modules/github.com/golang-jwt/jwt/v4-4.5.2", + "dependabot/go_modules/github.com/golang/glog-1.2.5", + "dependabot/go_modules/github.com/ipfs/go-libipfs-0.4.1", + "dependabot/go_modules/github.com/jaypipes/ghw-0.20.0", + "dependabot/go_modules/github.com/livepeer/go-tools-0.3.8", + "dependabot/go_modules/github.com/opencontainers/runc-1.1.12", + "dependabot/go_modules/github.com/pion/interceptor-0.1.39", + "dependabot/go_modules/github.com/pion/interceptor-0.1.41", + "dependabot/go_modules/github.com/urfave/cli-1.22.17", + "dependabot/go_modules/golang.org/x/crypto-0.45.0", + "dependabot/go_modules/golang.org/x/net-0.23.0", + "dependabot/go_modules/golang.org/x/net-0.46.0", + "dependabot/go_modules/golang.org/x/oauth2-0.27.0", + "dependabot/go_modules/google.golang.org/grpc-1.56.3", + "devin/1741203886-add-gpu-count-metric", + "docker-build", + "eli/broken-recordings", + "eli/cpu-retry-hack-2", + "eli/ffmpeg-build", + "eli/lb-llvm-build-test", + "eli/liveingest-cuda-devel", + "eli/liveingest-hwframes", + "eli/liveingest-request-uri", + "eli/media-integration-lowmem", + "eli/no-npp", + "eli/onlyaudio-test", + "eli/pts-rollback", + "eli/quick-test", + "eli/record-mode", + "eli/rollback-recordings", + "eli/static-gnutls", + "eli/win-add-automake", + "eli/windows-static-technique", + "eli/working-1frame", + "enable_worker_container_pulling", + "et/bugfixx", + "et/cbs-bitrate-ladder", + "et/circle-update", + "et/eth-retry", + "et/mainnet-changes", + "et/skynet", + "et/swarm-feed", + "feat/add-ability-to-switch-runtimes" + ] + }, + { + "repo": "livepeer/governor-scripts", + "role": "governance-discovery", + "defaultBranch": "master", + "branches": [ + "2026-03-06_l2-lip-107", + "check-controller-addresses", + "l2-migrate-to-bounded-minter", + "master", + "vg/fix/inflated-ticket" + ] + } + ] +} \ No newline at end of file diff --git a/snippets/data/contract-addresses/_health-checks.json b/snippets/data/contract-addresses/_health-checks.json index 16631e53d..9d12e3e21 100644 --- a/snippets/data/contract-addresses/_health-checks.json +++ b/snippets/data/contract-addresses/_health-checks.json @@ -1,26 +1,4 @@ { - "timestamp": "2026-03-30T15:11:02.987Z", - "checks": [], - "sourceValidation": [ - { - "contract": "L2LPTDataCache", - "type": "broken-source-link", - "detail": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L2/L2LPTDataCache.sol returned 404" - }, - { - "contract": "L2Migrator", - "type": "broken-source-link", - "detail": "https://github.com/livepeer/protocol/blob/delta/contracts/L2/L2Migrator.sol returned 404" - }, - { - "contract": "L1LPTDataCache", - "type": "broken-source-link", - "detail": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L1/L1LPTDataCache.sol returned 404" - }, - { - "contract": "L1Migrator", - "type": "broken-source-link", - "detail": "https://github.com/livepeer/protocol/blob/delta/contracts/L1/L1Migrator.sol returned 404" - } - ] + "timestamp": "2026-04-03T10:02:24.220Z", + "checks": [] } \ No newline at end of file diff --git a/snippets/data/contract-addresses/blockchainContractsPageData.json b/snippets/data/contract-addresses/blockchainContractsPageData.json new file mode 100644 index 000000000..6bf188ac7 --- /dev/null +++ b/snippets/data/contract-addresses/blockchainContractsPageData.json @@ -0,0 +1,3650 @@ +{ + "_generated": { + "by": "fetch-contract-addresses.js", + "at": "2026-04-03T10:02:24.221Z", + "source": "livepeer/governor-scripts (2cb192a)" + }, + "meta": { + "lastUpdated": "2026-04-03T10:02:24.221Z", + "lastVerified": "3 Apr 2026", + "verificationModel": "contracts-proof-v2", + "sourceCommit": "2cb192a", + "explorerUrls": { + "arbiscan": "https://arbiscan.io", + "arbiscanAddress": "https://arbiscan.io/address/", + "etherscan": "https://etherscan.io", + "etherscanAddress": "https://etherscan.io/address/", + "blockscoutArbitrum": "https://arbitrum.blockscout.com", + "blockscoutEthereum": "https://eth.blockscout.com" + } + }, + "sections": [ + { + "slug": "core-protocol-contracts", + "title": "Core Protocol Contracts", + "contracts": [ + "controller", + "bonding-manager", + "ticket-broker", + "rounds-manager", + "minter", + "service-registry", + "ai-service-registry" + ] + }, + { + "slug": "token-and-utility-contracts", + "title": "Token and Utility Contracts", + "contracts": [ + "livepeer-token-arbitrum", + "livepeer-token-ethereum", + "bridge-minter", + "l2-lpt-gateway", + "l1-lpt-gateway", + "l1-escrow", + "livepeer-token-faucet" + ] + }, + { + "slug": "governance-contracts", + "title": "Governance Contracts", + "contracts": [ + "bonding-votes", + "governor", + "livepeer-governor", + "treasury" + ] + }, + { + "slug": "migration-contracts", + "title": "Migration Contracts", + "contracts": [ + "l2-migrator", + "merkle-snapshot" + ] + } + ], + "contracts": { + "controller": { + "slug": "controller", + "name": "Controller", + "canonicalName": "Controller", + "subtitle": "Contract Registry", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/Controller.sol", + "contractCodeLabel": "Controller.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setContractInfo", + "params": [ + "bytes32 _id", + "address _contractAddress", + "bytes20 _gitCommitHash" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Controller", + "signature": "Controller.setContractInfo(bytes32 _id, address _contractAddress, bytes20 _gitCommitHash)" + }, + { + "name": "updateController", + "params": [ + "bytes32 _id", + "address _controller" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Controller", + "signature": "Controller.updateController(bytes32 _id, address _controller)" + }, + { + "name": "getContractInfo", + "params": [ + "bytes32 _id" + ], + "returns": "(address, bytes20)", + "stateMutability": "view", + "declaredIn": "Controller", + "signature": "Controller.getContractInfo(bytes32 _id) returns (address, bytes20) view" + }, + { + "name": "getContract", + "params": [ + "bytes32 _id" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "Controller", + "signature": "Controller.getContract(bytes32 _id) returns address view" + } + ], + "sourceContractName": "Controller", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Pausable", + "IController" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registry", + "Active" + ] + }, + "bonding-manager": { + "slug": "bonding-manager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "subtitle": "Staking and Rewards", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "targetAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyBlockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "targetBlockchainHref": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/bonding/BondingManager.sol", + "contractCodeLabel": "BondingManager.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setUnbondingPeriod", + "params": [ + "uint64 _unbondingPeriod" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setUnbondingPeriod(uint64 _unbondingPeriod)" + }, + { + "name": "setTreasuryRewardCutRate", + "params": [ + "uint256 _cutRate" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setTreasuryRewardCutRate(uint256 _cutRate)" + }, + { + "name": "setTreasuryBalanceCeiling", + "params": [ + "uint256 _ceiling" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setTreasuryBalanceCeiling(uint256 _ceiling)" + }, + { + "name": "setNumActiveTranscoders", + "params": [ + "uint256 _numActiveTranscoders" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setNumActiveTranscoders(uint256 _numActiveTranscoders)" + }, + { + "name": "transcoder", + "params": [ + "uint256 _rewardCut", + "uint256 _feeShare" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.transcoder(uint256 _rewardCut, uint256 _feeShare)" + }, + { + "name": "bond", + "params": [ + "uint256 _amount", + "address _to" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.bond(uint256 _amount, address _to)" + }, + { + "name": "unbond", + "params": [ + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.unbond(uint256 _amount)" + }, + { + "name": "rebond", + "params": [ + "uint256 _unbondingLockId" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rebond(uint256 _unbondingLockId)" + }, + { + "name": "rebondFromUnbonded", + "params": [ + "address _to", + "uint256 _unbondingLockId" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rebondFromUnbonded(address _to, uint256 _unbondingLockId)" + }, + { + "name": "checkpointBondingState", + "params": [ + "address _account" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.checkpointBondingState(address _account)" + }, + { + "name": "withdrawStake", + "params": [ + "uint256 _unbondingLockId" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.withdrawStake(uint256 _unbondingLockId)" + }, + { + "name": "withdrawFees", + "params": [ + "address _recipient", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.withdrawFees(address _recipient, uint256 _amount)" + }, + { + "name": "reward", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.reward()" + }, + { + "name": "updateTranscoderWithFees", + "params": [ + "address _transcoder", + "uint256 _fees", + "uint256 _round" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.updateTranscoderWithFees(address _transcoder, uint256 _fees, uint256 _round)" + }, + { + "name": "slashTranscoder", + "params": [ + "address _transcoder", + "address _finder", + "uint256 _slashAmount", + "uint256 _finderFee" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.slashTranscoder(address _transcoder, address _finder, uint256 _slashAmount, uint256 _finderFee)" + }, + { + "name": "claimEarnings", + "params": [ + "uint256 _endRound" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.claimEarnings(uint256 _endRound)" + }, + { + "name": "setCurrentRoundTotalActiveStake", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setCurrentRoundTotalActiveStake()" + }, + { + "name": "transcoderWithHint", + "params": [ + "uint256 _rewardCut", + "uint256 _feeShare", + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.transcoderWithHint(uint256 _rewardCut, uint256 _feeShare, address _newPosPrev, address _newPosNext)" + }, + { + "name": "bondForWithHint", + "params": [ + "uint256 _amount", + "address _owner", + "address _to", + "address _oldDelegateNewPosPrev", + "address _oldDelegateNewPosNext", + "address _currDelegateNewPosPrev", + "address _currDelegateNewPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.bondForWithHint(uint256 _amount, address _owner, address _to, address _oldDelegateNewPosPrev, address _oldDelegateNewPosNext, address _currDelegateNewPosPrev, address _currDelegateNewPosNext)" + }, + { + "name": "bondWithHint", + "params": [ + "uint256 _amount", + "address _to", + "address _oldDelegateNewPosPrev", + "address _oldDelegateNewPosNext", + "address _currDelegateNewPosPrev", + "address _currDelegateNewPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.bondWithHint(uint256 _amount, address _to, address _oldDelegateNewPosPrev, address _oldDelegateNewPosNext, address _currDelegateNewPosPrev, address _currDelegateNewPosNext)" + }, + { + "name": "transferBond", + "params": [ + "address _delegator", + "uint256 _amount", + "address _oldDelegateNewPosPrev", + "address _oldDelegateNewPosNext", + "address _newDelegateNewPosPrev", + "address _newDelegateNewPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.transferBond(address _delegator, uint256 _amount, address _oldDelegateNewPosPrev, address _oldDelegateNewPosNext, address _newDelegateNewPosPrev, address _newDelegateNewPosNext)" + }, + { + "name": "unbondWithHint", + "params": [ + "uint256 _amount", + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.unbondWithHint(uint256 _amount, address _newPosPrev, address _newPosNext)" + }, + { + "name": "rebondWithHint", + "params": [ + "uint256 _unbondingLockId", + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rebondWithHint(uint256 _unbondingLockId, address _newPosPrev, address _newPosNext)" + }, + { + "name": "rebondFromUnbondedWithHint", + "params": [ + "address _to", + "uint256 _unbondingLockId", + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rebondFromUnbondedWithHint(address _to, uint256 _unbondingLockId, address _newPosPrev, address _newPosNext)" + }, + { + "name": "rewardWithHint", + "params": [ + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rewardWithHint(address _newPosPrev, address _newPosNext)" + }, + { + "name": "pendingStake", + "params": [ + "address _delegator", + "uint256 _endRound" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.pendingStake(address _delegator, uint256 _endRound) returns uint256 view" + }, + { + "name": "pendingFees", + "params": [ + "address _delegator", + "uint256 _endRound" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.pendingFees(address _delegator, uint256 _endRound) returns uint256 view" + }, + { + "name": "transcoderTotalStake", + "params": [ + "address _transcoder" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.transcoderTotalStake(address _transcoder) returns uint256 view" + }, + { + "name": "transcoderStatus", + "params": [ + "address _transcoder" + ], + "returns": "TranscoderStatus", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.transcoderStatus(address _transcoder) returns TranscoderStatus view" + }, + { + "name": "delegatorStatus", + "params": [ + "address _delegator" + ], + "returns": "DelegatorStatus", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.delegatorStatus(address _delegator) returns DelegatorStatus view" + }, + { + "name": "getTranscoder", + "params": [ + "address _transcoder" + ], + "returns": "(uint256 lastRewardRound, uint256 rewardCut, uint256 feeShare, uint256 lastActiveStakeUpdateRound, uint256 activationRound, uint256 deactivationRound, uint256 activeCumulativeRewards, uint256 cumulativeRewards, uint256 cumulativeFees, uint256 lastFeeRound)", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTranscoder(address _transcoder) returns (uint256 lastRewardRound, uint256 rewardCut, uint256 feeShare, uint256 lastActiveStakeUpdateRound, uint256 activationRound, uint256 deactivationRound, uint256 activeCumulativeRewards, uint256 cumulativeRewards, uint256 cumulativeFees, uint256 lastFeeRound) view" + }, + { + "name": "getTranscoderEarningsPoolForRound", + "params": [ + "address _transcoder", + "uint256 _round" + ], + "returns": "(uint256 totalStake, uint256 transcoderRewardCut, uint256 transcoderFeeShare, uint256 cumulativeRewardFactor, uint256 cumulativeFeeFactor)", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTranscoderEarningsPoolForRound(address _transcoder, uint256 _round) returns (uint256 totalStake, uint256 transcoderRewardCut, uint256 transcoderFeeShare, uint256 cumulativeRewardFactor, uint256 cumulativeFeeFactor) view" + }, + { + "name": "getDelegator", + "params": [ + "address _delegator" + ], + "returns": "(uint256 bondedAmount, uint256 fees, address delegateAddress, uint256 delegatedAmount, uint256 startRound, uint256 lastClaimRound, uint256 nextUnbondingLockId)", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getDelegator(address _delegator) returns (uint256 bondedAmount, uint256 fees, address delegateAddress, uint256 delegatedAmount, uint256 startRound, uint256 lastClaimRound, uint256 nextUnbondingLockId) view" + }, + { + "name": "getDelegatorUnbondingLock", + "params": [ + "address _delegator", + "uint256 _unbondingLockId" + ], + "returns": "(uint256 amount, uint256 withdrawRound)", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getDelegatorUnbondingLock(address _delegator, uint256 _unbondingLockId) returns (uint256 amount, uint256 withdrawRound) view" + }, + { + "name": "getTranscoderPoolMaxSize", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTranscoderPoolMaxSize() returns uint256 view" + }, + { + "name": "getTranscoderPoolSize", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTranscoderPoolSize() returns uint256 view" + }, + { + "name": "getFirstTranscoderInPool", + "params": [], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getFirstTranscoderInPool() returns address view" + }, + { + "name": "getNextTranscoderInPool", + "params": [ + "address _transcoder" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getNextTranscoderInPool(address _transcoder) returns address view" + }, + { + "name": "getTotalBonded", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTotalBonded() returns uint256 view" + }, + { + "name": "isActiveTranscoder", + "params": [ + "address _transcoder" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.isActiveTranscoder(address _transcoder) returns bool view" + }, + { + "name": "isRegisteredTranscoder", + "params": [ + "address _transcoder" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.isRegisteredTranscoder(address _transcoder) returns bool view" + }, + { + "name": "isValidUnbondingLock", + "params": [ + "address _delegator", + "uint256 _unbondingLockId" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.isValidUnbondingLock(address _delegator, uint256 _unbondingLockId) returns bool view" + } + ], + "sourceContractName": "BondingManager", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "IBondingManager" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved", + "Target V13" + ] + }, + "ticket-broker": { + "slug": "ticket-broker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "subtitle": "Micropayments", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "targetAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyBlockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "targetBlockchainHref": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/pm/TicketBroker.sol", + "contractCodeLabel": "TicketBroker.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setUnlockPeriod", + "params": [ + "uint256 _unlockPeriod" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "TicketBroker", + "signature": "TicketBroker.setUnlockPeriod(uint256 _unlockPeriod)" + }, + { + "name": "setTicketValidityPeriod", + "params": [ + "uint256 _ticketValidityPeriod" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "TicketBroker", + "signature": "TicketBroker.setTicketValidityPeriod(uint256 _ticketValidityPeriod)" + } + ], + "sourceContractName": "TicketBroker", + "sourceContractKind": "contract", + "sourceInheritance": [ + "MixinContractRegistry", + "MixinReserve", + "MixinTicketBrokerCore", + "MixinTicketProcessor", + "MixinWrappers" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved" + ] + }, + "rounds-manager": { + "slug": "rounds-manager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "subtitle": "Round Progression", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "targetAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyBlockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "targetBlockchainHref": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/rounds/RoundsManager.sol", + "contractCodeLabel": "RoundsManager.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setRoundLength", + "params": [ + "uint256 _roundLength" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "RoundsManager", + "signature": "RoundsManager.setRoundLength(uint256 _roundLength)" + }, + { + "name": "setRoundLockAmount", + "params": [ + "uint256 _roundLockAmount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "RoundsManager", + "signature": "RoundsManager.setRoundLockAmount(uint256 _roundLockAmount)" + }, + { + "name": "initializeRound", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "RoundsManager", + "signature": "RoundsManager.initializeRound()" + }, + { + "name": "setLIPUpgradeRound", + "params": [ + "uint256 _lip", + "uint256 _round" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "RoundsManager", + "signature": "RoundsManager.setLIPUpgradeRound(uint256 _lip, uint256 _round)" + }, + { + "name": "blockNum", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.blockNum() returns uint256 view" + }, + { + "name": "blockHash", + "params": [ + "uint256 _block" + ], + "returns": "bytes32", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.blockHash(uint256 _block) returns bytes32 view" + }, + { + "name": "blockHashForRound", + "params": [ + "uint256 _round" + ], + "returns": "bytes32", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.blockHashForRound(uint256 _round) returns bytes32 view" + }, + { + "name": "currentRound", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.currentRound() returns uint256 view" + }, + { + "name": "currentRoundStartBlock", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.currentRoundStartBlock() returns uint256 view" + }, + { + "name": "currentRoundInitialized", + "params": [], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.currentRoundInitialized() returns bool view" + }, + { + "name": "currentRoundLocked", + "params": [], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.currentRoundLocked() returns bool view" + } + ], + "sourceContractName": "RoundsManager", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "IRoundsManager" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved" + ] + }, + "minter": { + "slug": "minter", + "name": "Minter", + "canonicalName": "Minter", + "subtitle": "Token Inflation", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/token/Minter.sol", + "contractCodeLabel": "Minter.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setTargetBondingRate", + "params": [ + "uint256 _targetBondingRate" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.setTargetBondingRate(uint256 _targetBondingRate)" + }, + { + "name": "setInflationChange", + "params": [ + "uint256 _inflationChange" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.setInflationChange(uint256 _inflationChange)" + }, + { + "name": "migrateToNewMinter", + "params": [ + "IMinter _newMinter" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.migrateToNewMinter(IMinter _newMinter)" + }, + { + "name": "createReward", + "params": [ + "uint256 _fracNum", + "uint256 _fracDenom" + ], + "returns": "uint256", + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.createReward(uint256 _fracNum, uint256 _fracDenom) returns uint256" + }, + { + "name": "trustedTransferTokens", + "params": [ + "address _to", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.trustedTransferTokens(address _to, uint256 _amount)" + }, + { + "name": "trustedBurnTokens", + "params": [ + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.trustedBurnTokens(uint256 _amount)" + }, + { + "name": "trustedWithdrawETH", + "params": [ + "address _to", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.trustedWithdrawETH(address _to, uint256 _amount)" + }, + { + "name": "depositETH", + "params": [], + "returns": "bool", + "stateMutability": "payable", + "declaredIn": "Minter", + "signature": "Minter.depositETH() returns bool payable" + }, + { + "name": "setCurrentRewardTokens", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.setCurrentRewardTokens()" + }, + { + "name": "getController", + "params": [], + "returns": "IController", + "stateMutability": "view", + "declaredIn": "Minter", + "signature": "Minter.getController() returns IController view" + }, + { + "name": "getGlobalTotalSupply", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "Minter", + "signature": "Minter.getGlobalTotalSupply() returns uint256 view" + } + ], + "sourceContractName": "Minter", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Manager", + "IMinter" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active" + ] + }, + "service-registry": { + "slug": "service-registry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "subtitle": "Orchestrator URI Mapping", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "targetAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyBlockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "targetBlockchainHref": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/ServiceRegistry.sol", + "contractCodeLabel": "ServiceRegistry.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setServiceURI", + "params": [ + "string calldata _serviceURI" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "ServiceRegistry", + "signature": "ServiceRegistry.setServiceURI(string calldata _serviceURI)" + }, + { + "name": "getServiceURI", + "params": [ + "address _addr" + ], + "returns": "string memory", + "stateMutability": "view", + "declaredIn": "ServiceRegistry", + "signature": "ServiceRegistry.getServiceURI(address _addr) returns string memory view" + } + ], + "sourceContractName": "ServiceRegistry", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved" + ] + }, + "ai-service-registry": { + "slug": "ai-service-registry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "subtitle": "AI Capability Registration", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "detached", + "proofChainLabel": "Detached runtime-backed", + "type": "standalone", + "currentAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/ServiceRegistry.sol", + "contractCodeLabel": "ServiceRegistry.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setServiceURI", + "params": [ + "string calldata _serviceURI" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "ServiceRegistry", + "signature": "ServiceRegistry.setServiceURI(string calldata _serviceURI)" + }, + { + "name": "getServiceURI", + "params": [ + "address _addr" + ], + "returns": "string memory", + "stateMutability": "view", + "declaredIn": "ServiceRegistry", + "signature": "ServiceRegistry.getServiceURI(address _addr) returns string memory view" + } + ], + "sourceContractName": "ServiceRegistry", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Deployment artifact confirmed", + "Runtime consumer confirmed", + "Active" + ] + }, + "livepeer-token-arbitrum": { + "slug": "livepeer-token-arbitrum", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "subtitle": "ERC-20 Token", + "category": "token", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L2/token/LivepeerToken.sol", + "contractCodeLabel": "LivepeerToken.sol (L2)", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "mint", + "params": [ + "address _to", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerToken", + "signature": "LivepeerToken.mint(address _to, uint256 _amount)" + }, + { + "name": "burn", + "params": [ + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerToken", + "signature": "LivepeerToken.burn(uint256 _amount)" + }, + { + "name": "burnFrom", + "params": [ + "address _from", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerToken", + "signature": "LivepeerToken.burnFrom(address _from, uint256 _amount)" + } + ], + "sourceContractName": "LivepeerToken", + "sourceContractKind": "contract", + "sourceInheritance": [ + "AccessControl", + "ERC20Burnable", + "ERC20Permit" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active" + ] + }, + "livepeer-token-ethereum": { + "slug": "livepeer-token-ethereum", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "subtitle": "ERC-20 Token", + "category": "token", + "chain": "ethereumMainnet", + "chainLabel": "Ethereum Mainnet", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/cbcdf50/contracts/token/LivepeerToken.sol", + "contractCodeLabel": "LivepeerToken.sol (L1)", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [], + "sourceContractName": "LivepeerToken", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ILivepeerToken", + "VariableSupplyToken" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active" + ] + }, + "bridge-minter": { + "slug": "bridge-minter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "subtitle": "L1 Bridge Minting", + "category": "bridge", + "chain": "ethereumMainnet", + "chainLabel": "Ethereum Mainnet", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "bridge", + "proofChainLabel": "Bridge-derived", + "type": "standalone", + "currentAddress": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/01d4ddb/contracts/token/BridgeMinter.sol", + "contractCodeLabel": "BridgeMinter.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setL1Migrator", + "params": [ + "address _l1MigratorAddr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.setL1Migrator(address _l1MigratorAddr)" + }, + { + "name": "setL1LPTGateway", + "params": [ + "address _l1LPTGatewayAddr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.setL1LPTGateway(address _l1LPTGatewayAddr)" + }, + { + "name": "migrateToNewMinter", + "params": [ + "address _newMinterAddr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.migrateToNewMinter(address _newMinterAddr)" + }, + { + "name": "withdrawETHToL1Migrator", + "params": [], + "returns": "uint256", + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.withdrawETHToL1Migrator() returns uint256" + }, + { + "name": "withdrawLPTToL1Migrator", + "params": [], + "returns": "uint256", + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.withdrawLPTToL1Migrator() returns uint256" + }, + { + "name": "bridgeMint", + "params": [ + "address _to", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.bridgeMint(address _to, uint256 _amount)" + }, + { + "name": "depositETH", + "params": [], + "returns": "bool", + "stateMutability": "payable", + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.depositETH() returns bool payable" + }, + { + "name": "getController", + "params": [], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.getController() returns address view" + } + ], + "sourceContractName": "BridgeMinter", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Manager" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Bridge-derived", + "Active" + ] + }, + "l2-lpt-gateway": { + "slug": "l2-lpt-gateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "subtitle": "Token Bridge", + "category": "bridge", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "bridge", + "proofChainLabel": "Bridge-derived", + "type": "standalone", + "currentAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "contractCodeLabel": "L2LPTGateway.sol", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setCounterpart", + "params": [ + "address _l1Counterpart" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.setCounterpart(address _l1Counterpart)" + }, + { + "name": "outboundTransfer", + "params": [ + "address _l1Token", + "address _to", + "uint256 _amount", + "bytes calldata _data" + ], + "returns": "bytes memory", + "stateMutability": null, + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.outboundTransfer(address _l1Token, address _to, uint256 _amount, bytes calldata _data) returns bytes memory" + }, + { + "name": "outboundTransfer", + "params": [ + "address _l1Token", + "address _to", + "uint256 _amount", + "uint256", + "uint256", + "bytes calldata _data" + ], + "returns": "bytes memory", + "stateMutability": null, + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.outboundTransfer(address _l1Token, address _to, uint256 _amount, uint256, uint256, bytes calldata _data) returns bytes memory" + }, + { + "name": "finalizeInboundTransfer", + "params": [ + "address _l1Token", + "address _from", + "address _to", + "uint256 _amount", + "bytes calldata" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.finalizeInboundTransfer(address _l1Token, address _from, address _to, uint256 _amount, bytes calldata)" + }, + { + "name": "counterpartGateway", + "params": [], + "returns": "address", + "stateMutability": "view", + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.counterpartGateway() returns address view" + }, + { + "name": "calculateL2TokenAddress", + "params": [ + "address l1Token" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.calculateL2TokenAddress(address l1Token) returns address view" + }, + { + "name": "getOutboundCalldata", + "params": [ + "address token", + "address from", + "address to", + "uint256 amount", + "bytes memory data" + ], + "returns": "bytes memory outboundCalldata", + "stateMutability": "pure", + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.getOutboundCalldata(address token, address from, address to, uint256 amount, bytes memory data) returns bytes memory outboundCalldata pure" + } + ], + "sourceContractName": "L2LPTGateway", + "sourceContractKind": "contract", + "sourceInheritance": [ + "IL2LPTGateway", + "ControlledGateway", + "L2ArbitrumMessenger" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Bridge-derived", + "Bridge artifact confirmed", + "Active" + ] + }, + "l1-lpt-gateway": { + "slug": "l1-lpt-gateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "subtitle": "Token Bridge", + "category": "bridge", + "chain": "ethereumMainnet", + "chainLabel": "Ethereum Mainnet", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "bridge", + "proofChainLabel": "Bridge-derived", + "type": "standalone", + "currentAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "contractCodeLabel": "L1LPTGateway.sol", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setCounterpart", + "params": [ + "address _l2Counterpart" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.setCounterpart(address _l2Counterpart)" + }, + { + "name": "setMinter", + "params": [ + "address _minter" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.setMinter(address _minter)" + }, + { + "name": "outboundTransfer", + "params": [ + "address _l1Token", + "address _to", + "uint256 _amount", + "uint256 _maxGas", + "uint256 _gasPriceBid", + "bytes calldata _data" + ], + "returns": "bytes memory", + "stateMutability": "payable", + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.outboundTransfer(address _l1Token, address _to, uint256 _amount, uint256 _maxGas, uint256 _gasPriceBid, bytes calldata _data) returns bytes memory payable" + }, + { + "name": "finalizeInboundTransfer", + "params": [ + "address l1Token", + "address from", + "address to", + "uint256 amount", + "bytes calldata data" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.finalizeInboundTransfer(address l1Token, address from, address to, uint256 amount, bytes calldata data)" + }, + { + "name": "counterpartGateway", + "params": [], + "returns": "address", + "stateMutability": "view", + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.counterpartGateway() returns address view" + }, + { + "name": "calculateL2TokenAddress", + "params": [ + "address l1Token" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.calculateL2TokenAddress(address l1Token) returns address view" + }, + { + "name": "getOutboundCalldata", + "params": [ + "address l1Token", + "address from", + "address to", + "uint256 amount", + "bytes memory data" + ], + "returns": "bytes memory outboundCalldata", + "stateMutability": "pure", + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.getOutboundCalldata(address l1Token, address from, address to, uint256 amount, bytes memory data) returns bytes memory outboundCalldata pure" + } + ], + "sourceContractName": "L1LPTGateway", + "sourceContractKind": "contract", + "sourceInheritance": [ + "IL1LPTGateway", + "ControlledGateway", + "L1ArbitrumMessenger" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Bridge-derived", + "Bridge artifact confirmed", + "Active" + ] + }, + "l1-escrow": { + "slug": "l1-escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "subtitle": "Token Bridge Escrow", + "category": "bridge", + "chain": "ethereumMainnet", + "chainLabel": "Ethereum Mainnet", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "bridge", + "proofChainLabel": "Bridge-derived", + "type": "standalone", + "currentAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L1/escrow/L1Escrow.sol", + "contractCodeLabel": "L1Escrow.sol", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "approve", + "params": [ + "address _token", + "address _spender", + "uint256 _value" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L1Escrow", + "signature": "L1Escrow.approve(address _token, address _spender, uint256 _value)" + } + ], + "sourceContractName": "L1Escrow", + "sourceContractKind": "contract", + "sourceInheritance": [ + "AccessControl" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Bridge-derived", + "Bridge artifact confirmed", + "Active" + ] + }, + "livepeer-token-faucet": { + "slug": "livepeer-token-faucet", + "name": "LivepeerTokenFaucet", + "canonicalName": "LivepeerTokenFaucet", + "subtitle": "Local development utility contract.", + "category": "token", + "chain": null, + "chainLabel": null, + "lifecycle": "source_only", + "lifecycleLabel": "Source only", + "proofChain": "source-only", + "proofChainLabel": "Source-backed", + "type": "standalone", + "currentAddress": null, + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": null, + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/LivepeerTokenFaucet.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/token/LivepeerTokenFaucet.sol", + "contractCodeLabel": "LivepeerTokenFaucet.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/LivepeerTokenFaucet.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/LivepeerTokenFaucet.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": null, + "verification": null, + "supported": false, + "unsupportedNote": "Local development utility contract.", + "functions": [ + { + "name": "addToWhitelist", + "params": [ + "address _addr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerTokenFaucet", + "signature": "LivepeerTokenFaucet.addToWhitelist(address _addr)" + }, + { + "name": "removeFromWhitelist", + "params": [ + "address _addr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerTokenFaucet", + "signature": "LivepeerTokenFaucet.removeFromWhitelist(address _addr)" + }, + { + "name": "request", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerTokenFaucet", + "signature": "LivepeerTokenFaucet.request()" + } + ], + "sourceContractName": "LivepeerTokenFaucet", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Ownable" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [] + }, + "bonding-votes": { + "slug": "bonding-votes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "subtitle": "Voting Power Checkpoints", + "category": "governance", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "targetAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyBlockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "targetBlockchainHref": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/bonding/BondingVotes.sol", + "contractCodeLabel": "BondingVotes.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "name", + "params": [], + "returns": "string memory", + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.name() returns string memory pure" + }, + { + "name": "symbol", + "params": [], + "returns": "string memory", + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.symbol() returns string memory pure" + }, + { + "name": "decimals", + "params": [], + "returns": "uint8", + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.decimals() returns uint8 pure" + }, + { + "name": "clock", + "params": [], + "returns": "uint48", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.clock() returns uint48 view" + }, + { + "name": "CLOCK_MODE", + "params": [], + "returns": "string memory", + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.CLOCK_MODE() returns string memory pure" + }, + { + "name": "getVotes", + "params": [ + "address _account" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getVotes(address _account) returns uint256 view" + }, + { + "name": "getPastVotes", + "params": [ + "address _account", + "uint256 _round" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getPastVotes(address _account, uint256 _round) returns uint256 view" + }, + { + "name": "totalSupply", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.totalSupply() returns uint256 view" + }, + { + "name": "getPastTotalSupply", + "params": [ + "uint256 _round" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getPastTotalSupply(uint256 _round) returns uint256 view" + }, + { + "name": "delegates", + "params": [ + "address _account" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.delegates(address _account) returns address view" + }, + { + "name": "delegatedAt", + "params": [ + "address _account", + "uint256 _round" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.delegatedAt(address _account, uint256 _round) returns address view" + }, + { + "name": "delegate", + "params": [ + "address" + ], + "returns": null, + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.delegate(address) pure" + }, + { + "name": "delegateBySig", + "params": [ + "address", + "uint256", + "uint256", + "uint8", + "bytes32", + "bytes32" + ], + "returns": null, + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.delegateBySig(address, uint256, uint256, uint8, bytes32, bytes32) pure" + }, + { + "name": "checkpointBondingState", + "params": [ + "address _account", + "uint256 _startRound", + "uint256 _bondedAmount", + "address _delegateAddress", + "uint256 _delegatedAmount", + "uint256 _lastClaimRound", + "uint256 _lastRewardRound" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingVotes", + "signature": "BondingVotes.checkpointBondingState(address _account, uint256 _startRound, uint256 _bondedAmount, address _delegateAddress, uint256 _delegatedAmount, uint256 _lastClaimRound, uint256 _lastRewardRound)" + }, + { + "name": "checkpointTotalActiveStake", + "params": [ + "uint256 _totalStake", + "uint256 _round" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingVotes", + "signature": "BondingVotes.checkpointTotalActiveStake(uint256 _totalStake, uint256 _round)" + }, + { + "name": "hasCheckpoint", + "params": [ + "address _account" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.hasCheckpoint(address _account) returns bool view" + }, + { + "name": "getTotalActiveStakeAt", + "params": [ + "uint256 _round" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getTotalActiveStakeAt(uint256 _round) returns uint256 view" + }, + { + "name": "getVotesAndDelegateAtRoundStart", + "params": [ + "address _account", + "uint256 _round" + ], + "returns": "(uint256 votes, address delegateAddress)", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getVotesAndDelegateAtRoundStart(address _account, uint256 _round) returns (uint256 votes, address delegateAddress) view" + } + ], + "sourceContractName": "BondingVotes", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "IBondingVotes" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved", + "Target V2" + ] + }, + "governor": { + "slug": "governor", + "name": "Governor", + "canonicalName": "Governor", + "subtitle": "Upgrade Executor", + "category": "governance", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "detached", + "proofChainLabel": "Detached runtime-backed", + "type": "standalone", + "currentAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/governance/Governor.sol", + "contractCodeLabel": "Governor.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "transferOwnership", + "params": [ + "address newOwner" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Governor", + "signature": "Governor.transferOwnership(address newOwner)" + }, + { + "name": "stage", + "params": [ + "Update memory _update", + "uint256 _delay" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Governor", + "signature": "Governor.stage(Update memory _update, uint256 _delay)" + }, + { + "name": "execute", + "params": [ + "Update memory _update" + ], + "returns": null, + "stateMutability": "payable", + "declaredIn": "Governor", + "signature": "Governor.execute(Update memory _update) payable" + }, + { + "name": "cancel", + "params": [ + "Update memory _update" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Governor", + "signature": "Governor.cancel(Update memory _update)" + } + ], + "sourceContractName": "Governor", + "sourceContractKind": "contract", + "sourceInheritance": [], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Deployment artifact confirmed", + "Active" + ] + }, + "livepeer-governor": { + "slug": "livepeer-governor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "subtitle": "On-chain Voting", + "category": "governance", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "targetAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyBlockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "targetBlockchainHref": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "contractCodeLabel": "LivepeerGovernor.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "initialize", + "params": [ + "uint256 initialVotingDelay", + "uint256 initialVotingPeriod", + "uint256 initialProposalThreshold", + "uint256 initialQuorum", + "uint256 quota" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.initialize(uint256 initialVotingDelay, uint256 initialVotingPeriod, uint256 initialProposalThreshold, uint256 initialQuorum, uint256 quota)" + }, + { + "name": "quorumDenominator", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.quorumDenominator() returns uint256 view" + }, + { + "name": "votes", + "params": [], + "returns": "IVotes", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.votes() returns IVotes view" + }, + { + "name": "bumpGovernorVotesTokenAddress", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.bumpGovernorVotesTokenAddress()" + }, + { + "name": "proposalThreshold", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.proposalThreshold() returns uint256 view" + }, + { + "name": "state", + "params": [ + "uint256 proposalId" + ], + "returns": "ProposalState", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.state(uint256 proposalId) returns ProposalState view" + }, + { + "name": "supportsInterface", + "params": [ + "bytes4 interfaceId" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.supportsInterface(bytes4 interfaceId) returns bool view" + } + ], + "sourceContractName": "LivepeerGovernor", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "Initializable", + "GovernorUpgradeable", + "GovernorSettingsUpgradeable", + "GovernorTimelockControlUpgradeable", + "GovernorVotesUpgradeable", + "GovernorVotesQuorumFractionUpgradeable", + "GovernorCountingOverridable" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved" + ] + }, + "treasury": { + "slug": "treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "subtitle": "Protocol Treasury", + "category": "governance", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/treasury/Treasury.sol", + "contractCodeLabel": "Treasury.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "initialize", + "params": [ + "uint256 minDelay", + "address[] memory proposers", + "address[] memory executors", + "address admin" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Treasury", + "signature": "Treasury.initialize(uint256 minDelay, address[] memory proposers, address[] memory executors, address admin)" + } + ], + "sourceContractName": "Treasury", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Initializable", + "TimelockControllerUpgradeable" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active" + ] + }, + "l2-migrator": { + "slug": "l2-migrator", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "subtitle": "Stake Migration", + "category": "migration", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "migration_residual", + "lifecycleLabel": "Migration", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "targetAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "blockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyBlockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "targetBlockchainHref": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L2/gateway/L2Migrator.sol", + "contractCodeLabel": "L2Migrator.sol", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2Migrator" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2Migrator", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "targetContractName": "L2MigratorTarget", + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "initialize", + "params": [ + "address _l1MigratorAddr", + "address _delegatorPoolImpl" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.initialize(address _l1MigratorAddr, address _delegatorPoolImpl)" + }, + { + "name": "setL1Migrator", + "params": [ + "address _l1MigratorAddr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.setL1Migrator(address _l1MigratorAddr)" + }, + { + "name": "setDelegatorPoolImpl", + "params": [ + "address _delegatorPoolImpl" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.setDelegatorPoolImpl(address _delegatorPoolImpl)" + }, + { + "name": "setClaimStakeEnabled", + "params": [ + "bool _enabled" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.setClaimStakeEnabled(bool _enabled)" + }, + { + "name": "finalizeMigrateDelegator", + "params": [ + "MigrateDelegatorParams calldata _params" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.finalizeMigrateDelegator(MigrateDelegatorParams calldata _params)" + }, + { + "name": "finalizeMigrateUnbondingLocks", + "params": [ + "MigrateUnbondingLocksParams calldata _params" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.finalizeMigrateUnbondingLocks(MigrateUnbondingLocksParams calldata _params)" + }, + { + "name": "finalizeMigrateSender", + "params": [ + "MigrateSenderParams calldata _params" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.finalizeMigrateSender(MigrateSenderParams calldata _params)" + }, + { + "name": "claimStake", + "params": [ + "address _delegate", + "uint256 _stake", + "uint256 _fees", + "bytes32[] calldata _proof", + "address _newDelegate" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.claimStake(address _delegate, uint256 _stake, uint256 _fees, bytes32[] calldata _proof, address _newDelegate)" + }, + { + "name": "syncControllerContracts", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.syncControllerContracts()" + } + ], + "sourceContractName": "L2Migrator", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "L2ArbitrumMessenger", + "IMigrator" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Migration", + "Proxy target resolved" + ] + }, + "merkle-snapshot": { + "slug": "merkle-snapshot", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "subtitle": "Migration Proof Verification", + "category": "migration", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "migration_residual", + "lifecycleLabel": "Migration", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "contractCodeLabel": "MerkleSnapshot.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/snapshots/MerkleSnapshot.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "MerkleSnapshot" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "MerkleSnapshot", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setSnapshot", + "params": [ + "bytes32 _id", + "bytes32 _root" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "MerkleSnapshot", + "signature": "MerkleSnapshot.setSnapshot(bytes32 _id, bytes32 _root)" + }, + { + "name": "verify", + "params": [ + "bytes32 _id", + "bytes32[] calldata _proof", + "bytes32 _leaf" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "MerkleSnapshot", + "signature": "MerkleSnapshot.verify(bytes32 _id, bytes32[] calldata _proof, bytes32 _leaf) returns bool view" + } + ], + "sourceContractName": "MerkleSnapshot", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Manager" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Migration" + ] + } + } +} \ No newline at end of file diff --git a/snippets/data/contract-addresses/blockchainContractsPageData.jsx b/snippets/data/contract-addresses/blockchainContractsPageData.jsx new file mode 100644 index 000000000..626a84c4e --- /dev/null +++ b/snippets/data/contract-addresses/blockchainContractsPageData.jsx @@ -0,0 +1,3654 @@ +/** + * Auto-generated by fetch-contract-addresses.js + * Source: livepeer/governor-scripts (2cb192a) + * Last updated: 2026-04-03T10:02:24.221Z + * DO NOT EDIT MANUALLY + */ + +export const blockchainContractsPageData = { + "meta": { + "lastUpdated": "2026-04-03T10:02:24.221Z", + "lastVerified": "3 Apr 2026", + "verificationModel": "contracts-proof-v2", + "sourceCommit": "2cb192a", + "explorerUrls": { + "arbiscan": "https://arbiscan.io", + "arbiscanAddress": "https://arbiscan.io/address/", + "etherscan": "https://etherscan.io", + "etherscanAddress": "https://etherscan.io/address/", + "blockscoutArbitrum": "https://arbitrum.blockscout.com", + "blockscoutEthereum": "https://eth.blockscout.com" + } + }, + "sections": [ + { + "slug": "core-protocol-contracts", + "title": "Core Protocol Contracts", + "contracts": [ + "controller", + "bonding-manager", + "ticket-broker", + "rounds-manager", + "minter", + "service-registry", + "ai-service-registry" + ] + }, + { + "slug": "token-and-utility-contracts", + "title": "Token and Utility Contracts", + "contracts": [ + "livepeer-token-arbitrum", + "livepeer-token-ethereum", + "bridge-minter", + "l2-lpt-gateway", + "l1-lpt-gateway", + "l1-escrow", + "livepeer-token-faucet" + ] + }, + { + "slug": "governance-contracts", + "title": "Governance Contracts", + "contracts": [ + "bonding-votes", + "governor", + "livepeer-governor", + "treasury" + ] + }, + { + "slug": "migration-contracts", + "title": "Migration Contracts", + "contracts": [ + "l2-migrator", + "merkle-snapshot" + ] + } + ], + "contracts": { + "controller": { + "slug": "controller", + "name": "Controller", + "canonicalName": "Controller", + "subtitle": "Contract Registry", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/Controller.sol", + "contractCodeLabel": "Controller.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setContractInfo", + "params": [ + "bytes32 _id", + "address _contractAddress", + "bytes20 _gitCommitHash" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Controller", + "signature": "Controller.setContractInfo(bytes32 _id, address _contractAddress, bytes20 _gitCommitHash)" + }, + { + "name": "updateController", + "params": [ + "bytes32 _id", + "address _controller" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Controller", + "signature": "Controller.updateController(bytes32 _id, address _controller)" + }, + { + "name": "getContractInfo", + "params": [ + "bytes32 _id" + ], + "returns": "(address, bytes20)", + "stateMutability": "view", + "declaredIn": "Controller", + "signature": "Controller.getContractInfo(bytes32 _id) returns (address, bytes20) view" + }, + { + "name": "getContract", + "params": [ + "bytes32 _id" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "Controller", + "signature": "Controller.getContract(bytes32 _id) returns address view" + } + ], + "sourceContractName": "Controller", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Pausable", + "IController" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registry", + "Active" + ] + }, + "bonding-manager": { + "slug": "bonding-manager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "subtitle": "Staking and Rewards", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "targetAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyBlockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "targetBlockchainHref": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/bonding/BondingManager.sol", + "contractCodeLabel": "BondingManager.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setUnbondingPeriod", + "params": [ + "uint64 _unbondingPeriod" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setUnbondingPeriod(uint64 _unbondingPeriod)" + }, + { + "name": "setTreasuryRewardCutRate", + "params": [ + "uint256 _cutRate" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setTreasuryRewardCutRate(uint256 _cutRate)" + }, + { + "name": "setTreasuryBalanceCeiling", + "params": [ + "uint256 _ceiling" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setTreasuryBalanceCeiling(uint256 _ceiling)" + }, + { + "name": "setNumActiveTranscoders", + "params": [ + "uint256 _numActiveTranscoders" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setNumActiveTranscoders(uint256 _numActiveTranscoders)" + }, + { + "name": "transcoder", + "params": [ + "uint256 _rewardCut", + "uint256 _feeShare" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.transcoder(uint256 _rewardCut, uint256 _feeShare)" + }, + { + "name": "bond", + "params": [ + "uint256 _amount", + "address _to" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.bond(uint256 _amount, address _to)" + }, + { + "name": "unbond", + "params": [ + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.unbond(uint256 _amount)" + }, + { + "name": "rebond", + "params": [ + "uint256 _unbondingLockId" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rebond(uint256 _unbondingLockId)" + }, + { + "name": "rebondFromUnbonded", + "params": [ + "address _to", + "uint256 _unbondingLockId" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rebondFromUnbonded(address _to, uint256 _unbondingLockId)" + }, + { + "name": "checkpointBondingState", + "params": [ + "address _account" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.checkpointBondingState(address _account)" + }, + { + "name": "withdrawStake", + "params": [ + "uint256 _unbondingLockId" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.withdrawStake(uint256 _unbondingLockId)" + }, + { + "name": "withdrawFees", + "params": [ + "address _recipient", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.withdrawFees(address _recipient, uint256 _amount)" + }, + { + "name": "reward", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.reward()" + }, + { + "name": "updateTranscoderWithFees", + "params": [ + "address _transcoder", + "uint256 _fees", + "uint256 _round" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.updateTranscoderWithFees(address _transcoder, uint256 _fees, uint256 _round)" + }, + { + "name": "slashTranscoder", + "params": [ + "address _transcoder", + "address _finder", + "uint256 _slashAmount", + "uint256 _finderFee" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.slashTranscoder(address _transcoder, address _finder, uint256 _slashAmount, uint256 _finderFee)" + }, + { + "name": "claimEarnings", + "params": [ + "uint256 _endRound" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.claimEarnings(uint256 _endRound)" + }, + { + "name": "setCurrentRoundTotalActiveStake", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.setCurrentRoundTotalActiveStake()" + }, + { + "name": "transcoderWithHint", + "params": [ + "uint256 _rewardCut", + "uint256 _feeShare", + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.transcoderWithHint(uint256 _rewardCut, uint256 _feeShare, address _newPosPrev, address _newPosNext)" + }, + { + "name": "bondForWithHint", + "params": [ + "uint256 _amount", + "address _owner", + "address _to", + "address _oldDelegateNewPosPrev", + "address _oldDelegateNewPosNext", + "address _currDelegateNewPosPrev", + "address _currDelegateNewPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.bondForWithHint(uint256 _amount, address _owner, address _to, address _oldDelegateNewPosPrev, address _oldDelegateNewPosNext, address _currDelegateNewPosPrev, address _currDelegateNewPosNext)" + }, + { + "name": "bondWithHint", + "params": [ + "uint256 _amount", + "address _to", + "address _oldDelegateNewPosPrev", + "address _oldDelegateNewPosNext", + "address _currDelegateNewPosPrev", + "address _currDelegateNewPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.bondWithHint(uint256 _amount, address _to, address _oldDelegateNewPosPrev, address _oldDelegateNewPosNext, address _currDelegateNewPosPrev, address _currDelegateNewPosNext)" + }, + { + "name": "transferBond", + "params": [ + "address _delegator", + "uint256 _amount", + "address _oldDelegateNewPosPrev", + "address _oldDelegateNewPosNext", + "address _newDelegateNewPosPrev", + "address _newDelegateNewPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.transferBond(address _delegator, uint256 _amount, address _oldDelegateNewPosPrev, address _oldDelegateNewPosNext, address _newDelegateNewPosPrev, address _newDelegateNewPosNext)" + }, + { + "name": "unbondWithHint", + "params": [ + "uint256 _amount", + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.unbondWithHint(uint256 _amount, address _newPosPrev, address _newPosNext)" + }, + { + "name": "rebondWithHint", + "params": [ + "uint256 _unbondingLockId", + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rebondWithHint(uint256 _unbondingLockId, address _newPosPrev, address _newPosNext)" + }, + { + "name": "rebondFromUnbondedWithHint", + "params": [ + "address _to", + "uint256 _unbondingLockId", + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rebondFromUnbondedWithHint(address _to, uint256 _unbondingLockId, address _newPosPrev, address _newPosNext)" + }, + { + "name": "rewardWithHint", + "params": [ + "address _newPosPrev", + "address _newPosNext" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingManager", + "signature": "BondingManager.rewardWithHint(address _newPosPrev, address _newPosNext)" + }, + { + "name": "pendingStake", + "params": [ + "address _delegator", + "uint256 _endRound" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.pendingStake(address _delegator, uint256 _endRound) returns uint256 view" + }, + { + "name": "pendingFees", + "params": [ + "address _delegator", + "uint256 _endRound" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.pendingFees(address _delegator, uint256 _endRound) returns uint256 view" + }, + { + "name": "transcoderTotalStake", + "params": [ + "address _transcoder" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.transcoderTotalStake(address _transcoder) returns uint256 view" + }, + { + "name": "transcoderStatus", + "params": [ + "address _transcoder" + ], + "returns": "TranscoderStatus", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.transcoderStatus(address _transcoder) returns TranscoderStatus view" + }, + { + "name": "delegatorStatus", + "params": [ + "address _delegator" + ], + "returns": "DelegatorStatus", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.delegatorStatus(address _delegator) returns DelegatorStatus view" + }, + { + "name": "getTranscoder", + "params": [ + "address _transcoder" + ], + "returns": "(uint256 lastRewardRound, uint256 rewardCut, uint256 feeShare, uint256 lastActiveStakeUpdateRound, uint256 activationRound, uint256 deactivationRound, uint256 activeCumulativeRewards, uint256 cumulativeRewards, uint256 cumulativeFees, uint256 lastFeeRound)", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTranscoder(address _transcoder) returns (uint256 lastRewardRound, uint256 rewardCut, uint256 feeShare, uint256 lastActiveStakeUpdateRound, uint256 activationRound, uint256 deactivationRound, uint256 activeCumulativeRewards, uint256 cumulativeRewards, uint256 cumulativeFees, uint256 lastFeeRound) view" + }, + { + "name": "getTranscoderEarningsPoolForRound", + "params": [ + "address _transcoder", + "uint256 _round" + ], + "returns": "(uint256 totalStake, uint256 transcoderRewardCut, uint256 transcoderFeeShare, uint256 cumulativeRewardFactor, uint256 cumulativeFeeFactor)", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTranscoderEarningsPoolForRound(address _transcoder, uint256 _round) returns (uint256 totalStake, uint256 transcoderRewardCut, uint256 transcoderFeeShare, uint256 cumulativeRewardFactor, uint256 cumulativeFeeFactor) view" + }, + { + "name": "getDelegator", + "params": [ + "address _delegator" + ], + "returns": "(uint256 bondedAmount, uint256 fees, address delegateAddress, uint256 delegatedAmount, uint256 startRound, uint256 lastClaimRound, uint256 nextUnbondingLockId)", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getDelegator(address _delegator) returns (uint256 bondedAmount, uint256 fees, address delegateAddress, uint256 delegatedAmount, uint256 startRound, uint256 lastClaimRound, uint256 nextUnbondingLockId) view" + }, + { + "name": "getDelegatorUnbondingLock", + "params": [ + "address _delegator", + "uint256 _unbondingLockId" + ], + "returns": "(uint256 amount, uint256 withdrawRound)", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getDelegatorUnbondingLock(address _delegator, uint256 _unbondingLockId) returns (uint256 amount, uint256 withdrawRound) view" + }, + { + "name": "getTranscoderPoolMaxSize", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTranscoderPoolMaxSize() returns uint256 view" + }, + { + "name": "getTranscoderPoolSize", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTranscoderPoolSize() returns uint256 view" + }, + { + "name": "getFirstTranscoderInPool", + "params": [], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getFirstTranscoderInPool() returns address view" + }, + { + "name": "getNextTranscoderInPool", + "params": [ + "address _transcoder" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getNextTranscoderInPool(address _transcoder) returns address view" + }, + { + "name": "getTotalBonded", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.getTotalBonded() returns uint256 view" + }, + { + "name": "isActiveTranscoder", + "params": [ + "address _transcoder" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.isActiveTranscoder(address _transcoder) returns bool view" + }, + { + "name": "isRegisteredTranscoder", + "params": [ + "address _transcoder" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.isRegisteredTranscoder(address _transcoder) returns bool view" + }, + { + "name": "isValidUnbondingLock", + "params": [ + "address _delegator", + "uint256 _unbondingLockId" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "BondingManager", + "signature": "BondingManager.isValidUnbondingLock(address _delegator, uint256 _unbondingLockId) returns bool view" + } + ], + "sourceContractName": "BondingManager", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "IBondingManager" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved", + "Target V13" + ] + }, + "ticket-broker": { + "slug": "ticket-broker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "subtitle": "Micropayments", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "targetAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyBlockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "targetBlockchainHref": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/pm/TicketBroker.sol", + "contractCodeLabel": "TicketBroker.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setUnlockPeriod", + "params": [ + "uint256 _unlockPeriod" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "TicketBroker", + "signature": "TicketBroker.setUnlockPeriod(uint256 _unlockPeriod)" + }, + { + "name": "setTicketValidityPeriod", + "params": [ + "uint256 _ticketValidityPeriod" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "TicketBroker", + "signature": "TicketBroker.setTicketValidityPeriod(uint256 _ticketValidityPeriod)" + } + ], + "sourceContractName": "TicketBroker", + "sourceContractKind": "contract", + "sourceInheritance": [ + "MixinContractRegistry", + "MixinReserve", + "MixinTicketBrokerCore", + "MixinTicketProcessor", + "MixinWrappers" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved" + ] + }, + "rounds-manager": { + "slug": "rounds-manager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "subtitle": "Round Progression", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "targetAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyBlockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "targetBlockchainHref": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/rounds/RoundsManager.sol", + "contractCodeLabel": "RoundsManager.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setRoundLength", + "params": [ + "uint256 _roundLength" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "RoundsManager", + "signature": "RoundsManager.setRoundLength(uint256 _roundLength)" + }, + { + "name": "setRoundLockAmount", + "params": [ + "uint256 _roundLockAmount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "RoundsManager", + "signature": "RoundsManager.setRoundLockAmount(uint256 _roundLockAmount)" + }, + { + "name": "initializeRound", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "RoundsManager", + "signature": "RoundsManager.initializeRound()" + }, + { + "name": "setLIPUpgradeRound", + "params": [ + "uint256 _lip", + "uint256 _round" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "RoundsManager", + "signature": "RoundsManager.setLIPUpgradeRound(uint256 _lip, uint256 _round)" + }, + { + "name": "blockNum", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.blockNum() returns uint256 view" + }, + { + "name": "blockHash", + "params": [ + "uint256 _block" + ], + "returns": "bytes32", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.blockHash(uint256 _block) returns bytes32 view" + }, + { + "name": "blockHashForRound", + "params": [ + "uint256 _round" + ], + "returns": "bytes32", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.blockHashForRound(uint256 _round) returns bytes32 view" + }, + { + "name": "currentRound", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.currentRound() returns uint256 view" + }, + { + "name": "currentRoundStartBlock", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.currentRoundStartBlock() returns uint256 view" + }, + { + "name": "currentRoundInitialized", + "params": [], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.currentRoundInitialized() returns bool view" + }, + { + "name": "currentRoundLocked", + "params": [], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "RoundsManager", + "signature": "RoundsManager.currentRoundLocked() returns bool view" + } + ], + "sourceContractName": "RoundsManager", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "IRoundsManager" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved" + ] + }, + "minter": { + "slug": "minter", + "name": "Minter", + "canonicalName": "Minter", + "subtitle": "Token Inflation", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/token/Minter.sol", + "contractCodeLabel": "Minter.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setTargetBondingRate", + "params": [ + "uint256 _targetBondingRate" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.setTargetBondingRate(uint256 _targetBondingRate)" + }, + { + "name": "setInflationChange", + "params": [ + "uint256 _inflationChange" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.setInflationChange(uint256 _inflationChange)" + }, + { + "name": "migrateToNewMinter", + "params": [ + "IMinter _newMinter" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.migrateToNewMinter(IMinter _newMinter)" + }, + { + "name": "createReward", + "params": [ + "uint256 _fracNum", + "uint256 _fracDenom" + ], + "returns": "uint256", + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.createReward(uint256 _fracNum, uint256 _fracDenom) returns uint256" + }, + { + "name": "trustedTransferTokens", + "params": [ + "address _to", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.trustedTransferTokens(address _to, uint256 _amount)" + }, + { + "name": "trustedBurnTokens", + "params": [ + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.trustedBurnTokens(uint256 _amount)" + }, + { + "name": "trustedWithdrawETH", + "params": [ + "address _to", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.trustedWithdrawETH(address _to, uint256 _amount)" + }, + { + "name": "depositETH", + "params": [], + "returns": "bool", + "stateMutability": "payable", + "declaredIn": "Minter", + "signature": "Minter.depositETH() returns bool payable" + }, + { + "name": "setCurrentRewardTokens", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "Minter", + "signature": "Minter.setCurrentRewardTokens()" + }, + { + "name": "getController", + "params": [], + "returns": "IController", + "stateMutability": "view", + "declaredIn": "Minter", + "signature": "Minter.getController() returns IController view" + }, + { + "name": "getGlobalTotalSupply", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "Minter", + "signature": "Minter.getGlobalTotalSupply() returns uint256 view" + } + ], + "sourceContractName": "Minter", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Manager", + "IMinter" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active" + ] + }, + "service-registry": { + "slug": "service-registry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "subtitle": "Orchestrator URI Mapping", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "targetAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyBlockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "targetBlockchainHref": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/ServiceRegistry.sol", + "contractCodeLabel": "ServiceRegistry.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setServiceURI", + "params": [ + "string calldata _serviceURI" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "ServiceRegistry", + "signature": "ServiceRegistry.setServiceURI(string calldata _serviceURI)" + }, + { + "name": "getServiceURI", + "params": [ + "address _addr" + ], + "returns": "string memory", + "stateMutability": "view", + "declaredIn": "ServiceRegistry", + "signature": "ServiceRegistry.getServiceURI(address _addr) returns string memory view" + } + ], + "sourceContractName": "ServiceRegistry", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved" + ] + }, + "ai-service-registry": { + "slug": "ai-service-registry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "subtitle": "AI Capability Registration", + "category": "core", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "detached", + "proofChainLabel": "Detached runtime-backed", + "type": "standalone", + "currentAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/ServiceRegistry.sol", + "contractCodeLabel": "ServiceRegistry.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setServiceURI", + "params": [ + "string calldata _serviceURI" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "ServiceRegistry", + "signature": "ServiceRegistry.setServiceURI(string calldata _serviceURI)" + }, + { + "name": "getServiceURI", + "params": [ + "address _addr" + ], + "returns": "string memory", + "stateMutability": "view", + "declaredIn": "ServiceRegistry", + "signature": "ServiceRegistry.getServiceURI(address _addr) returns string memory view" + } + ], + "sourceContractName": "ServiceRegistry", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Deployment artifact confirmed", + "Runtime consumer confirmed", + "Active" + ] + }, + "livepeer-token-arbitrum": { + "slug": "livepeer-token-arbitrum", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "subtitle": "ERC-20 Token", + "category": "token", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L2/token/LivepeerToken.sol", + "contractCodeLabel": "LivepeerToken.sol (L2)", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "mint", + "params": [ + "address _to", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerToken", + "signature": "LivepeerToken.mint(address _to, uint256 _amount)" + }, + { + "name": "burn", + "params": [ + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerToken", + "signature": "LivepeerToken.burn(uint256 _amount)" + }, + { + "name": "burnFrom", + "params": [ + "address _from", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerToken", + "signature": "LivepeerToken.burnFrom(address _from, uint256 _amount)" + } + ], + "sourceContractName": "LivepeerToken", + "sourceContractKind": "contract", + "sourceInheritance": [ + "AccessControl", + "ERC20Burnable", + "ERC20Permit" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active" + ] + }, + "livepeer-token-ethereum": { + "slug": "livepeer-token-ethereum", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "subtitle": "ERC-20 Token", + "category": "token", + "chain": "ethereumMainnet", + "chainLabel": "Ethereum Mainnet", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/cbcdf50/contracts/token/LivepeerToken.sol", + "contractCodeLabel": "LivepeerToken.sol (L1)", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [], + "sourceContractName": "LivepeerToken", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ILivepeerToken", + "VariableSupplyToken" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active" + ] + }, + "bridge-minter": { + "slug": "bridge-minter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "subtitle": "L1 Bridge Minting", + "category": "bridge", + "chain": "ethereumMainnet", + "chainLabel": "Ethereum Mainnet", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "bridge", + "proofChainLabel": "Bridge-derived", + "type": "standalone", + "currentAddress": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/01d4ddb/contracts/token/BridgeMinter.sol", + "contractCodeLabel": "BridgeMinter.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setL1Migrator", + "params": [ + "address _l1MigratorAddr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.setL1Migrator(address _l1MigratorAddr)" + }, + { + "name": "setL1LPTGateway", + "params": [ + "address _l1LPTGatewayAddr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.setL1LPTGateway(address _l1LPTGatewayAddr)" + }, + { + "name": "migrateToNewMinter", + "params": [ + "address _newMinterAddr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.migrateToNewMinter(address _newMinterAddr)" + }, + { + "name": "withdrawETHToL1Migrator", + "params": [], + "returns": "uint256", + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.withdrawETHToL1Migrator() returns uint256" + }, + { + "name": "withdrawLPTToL1Migrator", + "params": [], + "returns": "uint256", + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.withdrawLPTToL1Migrator() returns uint256" + }, + { + "name": "bridgeMint", + "params": [ + "address _to", + "uint256 _amount" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.bridgeMint(address _to, uint256 _amount)" + }, + { + "name": "depositETH", + "params": [], + "returns": "bool", + "stateMutability": "payable", + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.depositETH() returns bool payable" + }, + { + "name": "getController", + "params": [], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BridgeMinter", + "signature": "BridgeMinter.getController() returns address view" + } + ], + "sourceContractName": "BridgeMinter", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Manager" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Bridge-derived", + "Active" + ] + }, + "l2-lpt-gateway": { + "slug": "l2-lpt-gateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "subtitle": "Token Bridge", + "category": "bridge", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "bridge", + "proofChainLabel": "Bridge-derived", + "type": "standalone", + "currentAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "contractCodeLabel": "L2LPTGateway.sol", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setCounterpart", + "params": [ + "address _l1Counterpart" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.setCounterpart(address _l1Counterpart)" + }, + { + "name": "outboundTransfer", + "params": [ + "address _l1Token", + "address _to", + "uint256 _amount", + "bytes calldata _data" + ], + "returns": "bytes memory", + "stateMutability": null, + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.outboundTransfer(address _l1Token, address _to, uint256 _amount, bytes calldata _data) returns bytes memory" + }, + { + "name": "outboundTransfer", + "params": [ + "address _l1Token", + "address _to", + "uint256 _amount", + "uint256", + "uint256", + "bytes calldata _data" + ], + "returns": "bytes memory", + "stateMutability": null, + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.outboundTransfer(address _l1Token, address _to, uint256 _amount, uint256, uint256, bytes calldata _data) returns bytes memory" + }, + { + "name": "finalizeInboundTransfer", + "params": [ + "address _l1Token", + "address _from", + "address _to", + "uint256 _amount", + "bytes calldata" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.finalizeInboundTransfer(address _l1Token, address _from, address _to, uint256 _amount, bytes calldata)" + }, + { + "name": "counterpartGateway", + "params": [], + "returns": "address", + "stateMutability": "view", + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.counterpartGateway() returns address view" + }, + { + "name": "calculateL2TokenAddress", + "params": [ + "address l1Token" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.calculateL2TokenAddress(address l1Token) returns address view" + }, + { + "name": "getOutboundCalldata", + "params": [ + "address token", + "address from", + "address to", + "uint256 amount", + "bytes memory data" + ], + "returns": "bytes memory outboundCalldata", + "stateMutability": "pure", + "declaredIn": "L2LPTGateway", + "signature": "L2LPTGateway.getOutboundCalldata(address token, address from, address to, uint256 amount, bytes memory data) returns bytes memory outboundCalldata pure" + } + ], + "sourceContractName": "L2LPTGateway", + "sourceContractKind": "contract", + "sourceInheritance": [ + "IL2LPTGateway", + "ControlledGateway", + "L2ArbitrumMessenger" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Bridge-derived", + "Bridge artifact confirmed", + "Active" + ] + }, + "l1-lpt-gateway": { + "slug": "l1-lpt-gateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "subtitle": "Token Bridge", + "category": "bridge", + "chain": "ethereumMainnet", + "chainLabel": "Ethereum Mainnet", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "bridge", + "proofChainLabel": "Bridge-derived", + "type": "standalone", + "currentAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "contractCodeLabel": "L1LPTGateway.sol", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setCounterpart", + "params": [ + "address _l2Counterpart" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.setCounterpart(address _l2Counterpart)" + }, + { + "name": "setMinter", + "params": [ + "address _minter" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.setMinter(address _minter)" + }, + { + "name": "outboundTransfer", + "params": [ + "address _l1Token", + "address _to", + "uint256 _amount", + "uint256 _maxGas", + "uint256 _gasPriceBid", + "bytes calldata _data" + ], + "returns": "bytes memory", + "stateMutability": "payable", + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.outboundTransfer(address _l1Token, address _to, uint256 _amount, uint256 _maxGas, uint256 _gasPriceBid, bytes calldata _data) returns bytes memory payable" + }, + { + "name": "finalizeInboundTransfer", + "params": [ + "address l1Token", + "address from", + "address to", + "uint256 amount", + "bytes calldata data" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.finalizeInboundTransfer(address l1Token, address from, address to, uint256 amount, bytes calldata data)" + }, + { + "name": "counterpartGateway", + "params": [], + "returns": "address", + "stateMutability": "view", + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.counterpartGateway() returns address view" + }, + { + "name": "calculateL2TokenAddress", + "params": [ + "address l1Token" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.calculateL2TokenAddress(address l1Token) returns address view" + }, + { + "name": "getOutboundCalldata", + "params": [ + "address l1Token", + "address from", + "address to", + "uint256 amount", + "bytes memory data" + ], + "returns": "bytes memory outboundCalldata", + "stateMutability": "pure", + "declaredIn": "L1LPTGateway", + "signature": "L1LPTGateway.getOutboundCalldata(address l1Token, address from, address to, uint256 amount, bytes memory data) returns bytes memory outboundCalldata pure" + } + ], + "sourceContractName": "L1LPTGateway", + "sourceContractKind": "contract", + "sourceInheritance": [ + "IL1LPTGateway", + "ControlledGateway", + "L1ArbitrumMessenger" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Bridge-derived", + "Bridge artifact confirmed", + "Active" + ] + }, + "l1-escrow": { + "slug": "l1-escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "subtitle": "Token Bridge Escrow", + "category": "bridge", + "chain": "ethereumMainnet", + "chainLabel": "Ethereum Mainnet", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "bridge", + "proofChainLabel": "Bridge-derived", + "type": "standalone", + "currentAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L1/escrow/L1Escrow.sol", + "contractCodeLabel": "L1Escrow.sol", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "approve", + "params": [ + "address _token", + "address _spender", + "uint256 _value" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L1Escrow", + "signature": "L1Escrow.approve(address _token, address _spender, uint256 _value)" + } + ], + "sourceContractName": "L1Escrow", + "sourceContractKind": "contract", + "sourceInheritance": [ + "AccessControl" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Bridge-derived", + "Bridge artifact confirmed", + "Active" + ] + }, + "livepeer-token-faucet": { + "slug": "livepeer-token-faucet", + "name": "LivepeerTokenFaucet", + "canonicalName": "LivepeerTokenFaucet", + "subtitle": "Local development utility contract.", + "category": "token", + "chain": null, + "chainLabel": null, + "lifecycle": "source_only", + "lifecycleLabel": "Source only", + "proofChain": "source-only", + "proofChainLabel": "Source-backed", + "type": "standalone", + "currentAddress": null, + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": null, + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/LivepeerTokenFaucet.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/token/LivepeerTokenFaucet.sol", + "contractCodeLabel": "LivepeerTokenFaucet.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/LivepeerTokenFaucet.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/LivepeerTokenFaucet.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": null, + "verification": null, + "supported": false, + "unsupportedNote": "Local development utility contract.", + "functions": [ + { + "name": "addToWhitelist", + "params": [ + "address _addr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerTokenFaucet", + "signature": "LivepeerTokenFaucet.addToWhitelist(address _addr)" + }, + { + "name": "removeFromWhitelist", + "params": [ + "address _addr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerTokenFaucet", + "signature": "LivepeerTokenFaucet.removeFromWhitelist(address _addr)" + }, + { + "name": "request", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerTokenFaucet", + "signature": "LivepeerTokenFaucet.request()" + } + ], + "sourceContractName": "LivepeerTokenFaucet", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Ownable" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [] + }, + "bonding-votes": { + "slug": "bonding-votes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "subtitle": "Voting Power Checkpoints", + "category": "governance", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "targetAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyBlockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "targetBlockchainHref": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/bonding/BondingVotes.sol", + "contractCodeLabel": "BondingVotes.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "name", + "params": [], + "returns": "string memory", + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.name() returns string memory pure" + }, + { + "name": "symbol", + "params": [], + "returns": "string memory", + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.symbol() returns string memory pure" + }, + { + "name": "decimals", + "params": [], + "returns": "uint8", + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.decimals() returns uint8 pure" + }, + { + "name": "clock", + "params": [], + "returns": "uint48", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.clock() returns uint48 view" + }, + { + "name": "CLOCK_MODE", + "params": [], + "returns": "string memory", + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.CLOCK_MODE() returns string memory pure" + }, + { + "name": "getVotes", + "params": [ + "address _account" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getVotes(address _account) returns uint256 view" + }, + { + "name": "getPastVotes", + "params": [ + "address _account", + "uint256 _round" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getPastVotes(address _account, uint256 _round) returns uint256 view" + }, + { + "name": "totalSupply", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.totalSupply() returns uint256 view" + }, + { + "name": "getPastTotalSupply", + "params": [ + "uint256 _round" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getPastTotalSupply(uint256 _round) returns uint256 view" + }, + { + "name": "delegates", + "params": [ + "address _account" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.delegates(address _account) returns address view" + }, + { + "name": "delegatedAt", + "params": [ + "address _account", + "uint256 _round" + ], + "returns": "address", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.delegatedAt(address _account, uint256 _round) returns address view" + }, + { + "name": "delegate", + "params": [ + "address" + ], + "returns": null, + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.delegate(address) pure" + }, + { + "name": "delegateBySig", + "params": [ + "address", + "uint256", + "uint256", + "uint8", + "bytes32", + "bytes32" + ], + "returns": null, + "stateMutability": "pure", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.delegateBySig(address, uint256, uint256, uint8, bytes32, bytes32) pure" + }, + { + "name": "checkpointBondingState", + "params": [ + "address _account", + "uint256 _startRound", + "uint256 _bondedAmount", + "address _delegateAddress", + "uint256 _delegatedAmount", + "uint256 _lastClaimRound", + "uint256 _lastRewardRound" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingVotes", + "signature": "BondingVotes.checkpointBondingState(address _account, uint256 _startRound, uint256 _bondedAmount, address _delegateAddress, uint256 _delegatedAmount, uint256 _lastClaimRound, uint256 _lastRewardRound)" + }, + { + "name": "checkpointTotalActiveStake", + "params": [ + "uint256 _totalStake", + "uint256 _round" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "BondingVotes", + "signature": "BondingVotes.checkpointTotalActiveStake(uint256 _totalStake, uint256 _round)" + }, + { + "name": "hasCheckpoint", + "params": [ + "address _account" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.hasCheckpoint(address _account) returns bool view" + }, + { + "name": "getTotalActiveStakeAt", + "params": [ + "uint256 _round" + ], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getTotalActiveStakeAt(uint256 _round) returns uint256 view" + }, + { + "name": "getVotesAndDelegateAtRoundStart", + "params": [ + "address _account", + "uint256 _round" + ], + "returns": "(uint256 votes, address delegateAddress)", + "stateMutability": "view", + "declaredIn": "BondingVotes", + "signature": "BondingVotes.getVotesAndDelegateAtRoundStart(address _account, uint256 _round) returns (uint256 votes, address delegateAddress) view" + } + ], + "sourceContractName": "BondingVotes", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "IBondingVotes" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved", + "Target V2" + ] + }, + "governor": { + "slug": "governor", + "name": "Governor", + "canonicalName": "Governor", + "subtitle": "Upgrade Executor", + "category": "governance", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "detached", + "proofChainLabel": "Detached runtime-backed", + "type": "standalone", + "currentAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/governance/Governor.sol", + "contractCodeLabel": "Governor.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "transferOwnership", + "params": [ + "address newOwner" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Governor", + "signature": "Governor.transferOwnership(address newOwner)" + }, + { + "name": "stage", + "params": [ + "Update memory _update", + "uint256 _delay" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Governor", + "signature": "Governor.stage(Update memory _update, uint256 _delay)" + }, + { + "name": "execute", + "params": [ + "Update memory _update" + ], + "returns": null, + "stateMutability": "payable", + "declaredIn": "Governor", + "signature": "Governor.execute(Update memory _update) payable" + }, + { + "name": "cancel", + "params": [ + "Update memory _update" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Governor", + "signature": "Governor.cancel(Update memory _update)" + } + ], + "sourceContractName": "Governor", + "sourceContractKind": "contract", + "sourceInheritance": [], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Deployment artifact confirmed", + "Active" + ] + }, + "livepeer-governor": { + "slug": "livepeer-governor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "subtitle": "On-chain Voting", + "category": "governance", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "targetAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyBlockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "targetBlockchainHref": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "contractCodeLabel": "LivepeerGovernor.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "initialize", + "params": [ + "uint256 initialVotingDelay", + "uint256 initialVotingPeriod", + "uint256 initialProposalThreshold", + "uint256 initialQuorum", + "uint256 quota" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.initialize(uint256 initialVotingDelay, uint256 initialVotingPeriod, uint256 initialProposalThreshold, uint256 initialQuorum, uint256 quota)" + }, + { + "name": "quorumDenominator", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.quorumDenominator() returns uint256 view" + }, + { + "name": "votes", + "params": [], + "returns": "IVotes", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.votes() returns IVotes view" + }, + { + "name": "bumpGovernorVotesTokenAddress", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.bumpGovernorVotesTokenAddress()" + }, + { + "name": "proposalThreshold", + "params": [], + "returns": "uint256", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.proposalThreshold() returns uint256 view" + }, + { + "name": "state", + "params": [ + "uint256 proposalId" + ], + "returns": "ProposalState", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.state(uint256 proposalId) returns ProposalState view" + }, + { + "name": "supportsInterface", + "params": [ + "bytes4 interfaceId" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "LivepeerGovernor", + "signature": "LivepeerGovernor.supportsInterface(bytes4 interfaceId) returns bool view" + } + ], + "sourceContractName": "LivepeerGovernor", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "Initializable", + "GovernorUpgradeable", + "GovernorSettingsUpgradeable", + "GovernorTimelockControlUpgradeable", + "GovernorVotesUpgradeable", + "GovernorVotesQuorumFractionUpgradeable", + "GovernorCountingOverridable" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active", + "Proxy target resolved" + ] + }, + "treasury": { + "slug": "treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "subtitle": "Protocol Treasury", + "category": "governance", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "active", + "lifecycleLabel": "Active", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/treasury/Treasury.sol", + "contractCodeLabel": "Treasury.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "initialize", + "params": [ + "uint256 minDelay", + "address[] memory proposers", + "address[] memory executors", + "address admin" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "Treasury", + "signature": "Treasury.initialize(uint256 minDelay, address[] memory proposers, address[] memory executors, address admin)" + } + ], + "sourceContractName": "Treasury", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Initializable", + "TimelockControllerUpgradeable" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Active" + ] + }, + "l2-migrator": { + "slug": "l2-migrator", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "subtitle": "Stake Migration", + "category": "migration", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "migration_residual", + "lifecycleLabel": "Migration", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "proxy", + "currentAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "targetAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "blockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyBlockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "targetBlockchainHref": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/603314d/contracts/L2/gateway/L2Migrator.sol", + "contractCodeLabel": "L2Migrator.sol", + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2Migrator" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2Migrator", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "targetContractName": "L2MigratorTarget", + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "initialize", + "params": [ + "address _l1MigratorAddr", + "address _delegatorPoolImpl" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.initialize(address _l1MigratorAddr, address _delegatorPoolImpl)" + }, + { + "name": "setL1Migrator", + "params": [ + "address _l1MigratorAddr" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.setL1Migrator(address _l1MigratorAddr)" + }, + { + "name": "setDelegatorPoolImpl", + "params": [ + "address _delegatorPoolImpl" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.setDelegatorPoolImpl(address _delegatorPoolImpl)" + }, + { + "name": "setClaimStakeEnabled", + "params": [ + "bool _enabled" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.setClaimStakeEnabled(bool _enabled)" + }, + { + "name": "finalizeMigrateDelegator", + "params": [ + "MigrateDelegatorParams calldata _params" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.finalizeMigrateDelegator(MigrateDelegatorParams calldata _params)" + }, + { + "name": "finalizeMigrateUnbondingLocks", + "params": [ + "MigrateUnbondingLocksParams calldata _params" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.finalizeMigrateUnbondingLocks(MigrateUnbondingLocksParams calldata _params)" + }, + { + "name": "finalizeMigrateSender", + "params": [ + "MigrateSenderParams calldata _params" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.finalizeMigrateSender(MigrateSenderParams calldata _params)" + }, + { + "name": "claimStake", + "params": [ + "address _delegate", + "uint256 _stake", + "uint256 _fees", + "bytes32[] calldata _proof", + "address _newDelegate" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.claimStake(address _delegate, uint256 _stake, uint256 _fees, bytes32[] calldata _proof, address _newDelegate)" + }, + { + "name": "syncControllerContracts", + "params": [], + "returns": null, + "stateMutability": null, + "declaredIn": "L2Migrator", + "signature": "L2Migrator.syncControllerContracts()" + } + ], + "sourceContractName": "L2Migrator", + "sourceContractKind": "contract", + "sourceInheritance": [ + "ManagerProxyTarget", + "L2ArbitrumMessenger", + "IMigrator" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Migration", + "Proxy target resolved" + ] + }, + "merkle-snapshot": { + "slug": "merkle-snapshot", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "subtitle": "Migration Proof Verification", + "category": "migration", + "chain": "arbitrumOne", + "chainLabel": "Arbitrum One", + "lifecycle": "migration_residual", + "lifecycleLabel": "Migration", + "proofChain": "controller", + "proofChainLabel": "Controller-managed", + "type": "standalone", + "currentAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "proxyAddress": null, + "targetAddress": null, + "blockchainHref": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7", + "proxyBlockchainHref": null, + "targetBlockchainHref": null, + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "rawContractCodeHref": "https://raw.githubusercontent.com/livepeer/protocol/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "contractCodeLabel": "MerkleSnapshot.sol", + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/snapshots/MerkleSnapshot.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "MerkleSnapshot" + }, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "MerkleSnapshot", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + }, + "supported": true, + "unsupportedNote": null, + "functions": [ + { + "name": "setSnapshot", + "params": [ + "bytes32 _id", + "bytes32 _root" + ], + "returns": null, + "stateMutability": null, + "declaredIn": "MerkleSnapshot", + "signature": "MerkleSnapshot.setSnapshot(bytes32 _id, bytes32 _root)" + }, + { + "name": "verify", + "params": [ + "bytes32 _id", + "bytes32[] calldata _proof", + "bytes32 _leaf" + ], + "returns": "bool", + "stateMutability": "view", + "declaredIn": "MerkleSnapshot", + "signature": "MerkleSnapshot.verify(bytes32 _id, bytes32[] calldata _proof, bytes32 _leaf) returns bool view" + } + ], + "sourceContractName": "MerkleSnapshot", + "sourceContractKind": "contract", + "sourceInheritance": [ + "Manager" + ], + "sourceContractFound": true, + "sourceParseError": null, + "facts": [ + "Controller registered", + "Migration" + ] + } + } +}; + +export default blockchainContractsPageData; diff --git a/snippets/data/contract-addresses/contractAddressesData.json b/snippets/data/contract-addresses/contractAddressesData.json new file mode 100644 index 000000000..fd6c8f38b --- /dev/null +++ b/snippets/data/contract-addresses/contractAddressesData.json @@ -0,0 +1,16492 @@ +{ + "_generated": { + "by": "fetch-contract-addresses.js", + "at": "2026-04-03T10:02:24.221Z", + "source": "livepeer/governor-scripts (2cb192a)" + }, + "arbitrumOne": { + "inventory": [ + { + "id": "arbitrumOne.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Minter", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "170387616144807792234", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.aiServiceRegistry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", + "blockscoutLabel": "ServiceRegistry", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": "livepeer/go-livepeer", + "runtimeConsumerPath": "cmd/livepeer/starter/starter.go", + "runtimeConsumerResolvedCommit": "9e68815", + "runtimeConsumerExactAddressMatch": true, + "runtimeConsumerRequired": true, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.governor", + "name": "Governor", + "canonicalName": "Governor", + "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/Governor.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Governor", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingVotes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "governorKey": "BondingVotes", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "proxyTargetContractName": "BondingVotesTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "governorKey": "LivepeerGovernor", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "proxyTargetContractName": "LivepeerGovernorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "address": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Treasury", + "controllerResolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "governorKey": "Treasury", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "Treasury", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTGateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l2LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTDataCache", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "address": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "blockchainHref": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2LPTDataCache", + "controllerResolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "governorKey": "L2LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2LPTDataCache", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2Migrator", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "type": "proxy", + "deploymentKind": "proxy", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "governorKey": "L2Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "6714546397396733235", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "proxyTargetContractName": "L2MigratorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2Migrator", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "targetContractName": "L2MigratorTarget", + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.merkleSnapshot", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "address": "0x10736fface687658f88a46d042631d182c7757f7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "blockchainHref": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": "Migration proof registry retained for Confluence claim verification.", + "keccakHash": "0xb6138afe6f306a47bdf645c5aebcb9781efe787d221a1880e62d1f76dae58b84", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "MerkleSnapshot", + "controllerResolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "governorKey": "MerkleSnapshot", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleSnapshot", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "MerkleSnapshot" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/snapshots/MerkleSnapshot.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "MerkleSnapshot", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager.implementation", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V13", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V13", + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyTarget": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "implementationName": "BondingManager", + "implementationVersion": "V13", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.ticketBroker.implementation", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "TicketBroker", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": "TicketBroker", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager.implementation", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "RoundsManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": "RoundsManager", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.serviceRegistry.implementation", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "ServiceRegistry", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": "ServiceRegistry", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingVotes.implementation", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V2", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V2", + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyTarget": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingVotes", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "implementationName": "BondingVotes", + "implementationVersion": "V2", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor.implementation", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": null, + "governorKey": "livepeerGovernorTarget", + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyTarget": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "livepeerGovernorTarget" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "LivepeerGovernor", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "implementationName": "LivepeerGovernor", + "implementationVersion": null, + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2Migrator.implementation", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "L2Migrator", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": "L2Migrator", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.1", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.2", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V3", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.3", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V3", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V4", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.4", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V4", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V5", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.5", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V5", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V6", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.6", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V6", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V7", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.7", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V7", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V8", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.8", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V8", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V9", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.9", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V9", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V10", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.10", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V10", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V11", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.11", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V11", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V12", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.12", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V12", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.Minter.historicalSeries.1", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "Minter", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:Minter" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.1", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.2", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "governance.BondingVotes.historicalSeries.1", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingVotes", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "governance:BondingVotes" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "migration.L2Migrator.historicalSeries.1", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "L2Migrator", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "migration:L2Migrator" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "current": [ + { + "id": "arbitrumOne.l2LPTDataCache", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "address": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "blockchainHref": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2LPTDataCache", + "controllerResolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "governorKey": "L2LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2LPTDataCache", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTGateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l2LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.aiServiceRegistry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", + "blockscoutLabel": "ServiceRegistry", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": "livepeer/go-livepeer", + "runtimeConsumerPath": "cmd/livepeer/starter/starter.go", + "runtimeConsumerResolvedCommit": "9e68815", + "runtimeConsumerExactAddressMatch": true, + "runtimeConsumerRequired": true, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Minter", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "170387616144807792234", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.bondingVotes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "governorKey": "BondingVotes", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "proxyTargetContractName": "BondingVotesTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.governor", + "name": "Governor", + "canonicalName": "Governor", + "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/Governor.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Governor", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "governorKey": "LivepeerGovernor", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "proxyTargetContractName": "LivepeerGovernorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "address": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Treasury", + "controllerResolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "governorKey": "Treasury", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "Treasury", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "active": [ + { + "id": "arbitrumOne.l2LPTDataCache", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "address": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "blockchainHref": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2LPTDataCache", + "controllerResolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "governorKey": "L2LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2LPTDataCache", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTGateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l2LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.aiServiceRegistry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", + "blockscoutLabel": "ServiceRegistry", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": "livepeer/go-livepeer", + "runtimeConsumerPath": "cmd/livepeer/starter/starter.go", + "runtimeConsumerResolvedCommit": "9e68815", + "runtimeConsumerExactAddressMatch": true, + "runtimeConsumerRequired": true, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Minter", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "170387616144807792234", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.bondingVotes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "governorKey": "BondingVotes", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "proxyTargetContractName": "BondingVotesTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.governor", + "name": "Governor", + "canonicalName": "Governor", + "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/Governor.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Governor", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "governorKey": "LivepeerGovernor", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "proxyTargetContractName": "LivepeerGovernorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "address": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Treasury", + "controllerResolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "governorKey": "Treasury", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "Treasury", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "paused": [], + "migration_residual": [ + { + "id": "arbitrumOne.l2Migrator", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "type": "proxy", + "deploymentKind": "proxy", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "governorKey": "L2Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "6714546397396733235", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "proxyTargetContractName": "L2MigratorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2Migrator", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "targetContractName": "L2MigratorTarget", + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.merkleSnapshot", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "address": "0x10736fface687658f88a46d042631d182c7757f7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "blockchainHref": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": "Migration proof registry retained for Confluence claim verification.", + "keccakHash": "0xb6138afe6f306a47bdf645c5aebcb9781efe787d221a1880e62d1f76dae58b84", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "MerkleSnapshot", + "controllerResolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "governorKey": "MerkleSnapshot", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleSnapshot", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "MerkleSnapshot" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/snapshots/MerkleSnapshot.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "MerkleSnapshot", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "legacy_operational": [], + "historical": [ + { + "id": "core.BondingManager.historicalSeries.4", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V4", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V5", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.7", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V7", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V8", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.3", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V3", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V4", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.5", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V5", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V6", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.12", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V12", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.8", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V8", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V9", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.9", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V9", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V10", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.6", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V6", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V7", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.2", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V3", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.10", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V10", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V11", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.1", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.11", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V11", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V12", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.Minter.historicalSeries.1", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "Minter", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:Minter" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.1", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.2", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "governance.BondingVotes.historicalSeries.1", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingVotes", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "governance:BondingVotes" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "migration.L2Migrator.historicalSeries.1", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "L2Migrator", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "migration:L2Migrator" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "historicalSeries": { + "core": [ + { + "category": "core", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "entries": [] + }, + { + "category": "core", + "name": "BondingManager", + "canonicalName": "BondingManager", + "entries": [ + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "isCurrent": false, + "status": "Replaced by V2", + "replacedBy": "V2" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "isCurrent": false, + "status": "Replaced by V3", + "replacedBy": "V3" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "version": "V3", + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "isCurrent": false, + "status": "Replaced by V4", + "replacedBy": "V4" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "version": "V4", + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "isCurrent": false, + "status": "Replaced by V5", + "replacedBy": "V5" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "version": "V5", + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "isCurrent": false, + "status": "Replaced by V6", + "replacedBy": "V6" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "version": "V6", + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "isCurrent": false, + "status": "Replaced by V7", + "replacedBy": "V7" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "version": "V7", + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "isCurrent": false, + "status": "Replaced by V8", + "replacedBy": "V8" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "version": "V8", + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "isCurrent": false, + "status": "Replaced by V9", + "replacedBy": "V9" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "version": "V9", + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "isCurrent": false, + "status": "Replaced by V10", + "replacedBy": "V10" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "version": "V10", + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "isCurrent": false, + "status": "Replaced by V11", + "replacedBy": "V11" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "version": "V11", + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "isCurrent": false, + "status": "Replaced by V12", + "replacedBy": "V12" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "version": "V12", + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "core", + "name": "Controller", + "canonicalName": "Controller", + "entries": [] + }, + { + "category": "core", + "name": "Minter", + "canonicalName": "Minter", + "entries": [ + { + "name": "Minter", + "canonicalName": "Minter", + "category": "core", + "chain": "arbitrumOne", + "type": "standalone", + "deploymentKind": "standalone", + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "core", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "entries": [] + }, + { + "category": "core", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "entries": [] + }, + { + "category": "core", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "entries": [ + { + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "isCurrent": false, + "status": "Replaced by V2", + "replacedBy": "V2" + }, + { + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + } + ], + "governance": [ + { + "category": "governance", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "entries": [ + { + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "category": "governance", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "governance", + "name": "Governor", + "canonicalName": "Governor", + "entries": [] + }, + { + "category": "governance", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "entries": [] + }, + { + "category": "governance", + "name": "Treasury", + "canonicalName": "Treasury", + "entries": [] + } + ], + "migration": [ + { + "category": "migration", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "entries": [ + { + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "category": "migration", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "migration", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "entries": [] + } + ], + "bridge": [ + { + "category": "bridge", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "entries": [] + }, + { + "category": "bridge", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "entries": [] + } + ], + "token": [ + { + "category": "token", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "entries": [] + } + ] + }, + "currentImplementations": [ + { + "id": "arbitrumOne.bondingManager.implementation", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V13", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V13", + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyTarget": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "implementationName": "BondingManager", + "implementationVersion": "V13", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager.implementation", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "RoundsManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": "RoundsManager", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.serviceRegistry.implementation", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "ServiceRegistry", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": "ServiceRegistry", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.ticketBroker.implementation", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "TicketBroker", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": "TicketBroker", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingVotes.implementation", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V2", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V2", + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyTarget": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingVotes", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "implementationName": "BondingVotes", + "implementationVersion": "V2", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor.implementation", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": null, + "governorKey": "livepeerGovernorTarget", + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyTarget": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "livepeerGovernorTarget" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "LivepeerGovernor", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "implementationName": "LivepeerGovernor", + "implementationVersion": null, + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2Migrator.implementation", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "L2Migrator", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": "L2Migrator", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + } + ] + }, + "ethereumMainnet": { + "inventory": [ + { + "id": "ethereumMainnet.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "blockchainHref": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x58b6a8a3302369daec383334672404ee733ab239", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.bridgeMinter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "address": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2d6c985061f27c6c02785799a715099670620c5dfed3f3ecfc6ab406e3e5a343", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "bridgeMinter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTGateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/mainnet/L1Escrow.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Escrow", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTDataCache", + "name": "L1LPTDataCache", + "canonicalName": "L1LPTDataCache", + "address": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "blockchainHref": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x49b03ce75a9e4ad81079c9677a5caac20548a2407ee6cae472e3c47548b37445", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.genesisManager", + "name": "GenesisManager", + "canonicalName": "GenesisManager", + "address": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xae790d27d0e1d3e6bbd97ff692b457d4c526ea8c8fafd0cbd395567a2ebbf182", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "GenesisManager", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/GenesisManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.merkleMine", + "name": "MerkleMine", + "canonicalName": "MerkleMine", + "address": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "blockchainHref": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x17b6becfe8dae798aba9441d55041b5cc410570c1d4330fd6ad71b5c21ce4f94", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleMine", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/MerkleMine.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.multiMerkleMine", + "name": "MultiMerkleMine", + "canonicalName": "MultiMerkleMine", + "address": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": "Legacy utility contract preserved through direct explorer verification of the published seed address.", + "keccakHash": "0xeab338ace3157e6cc2478b0ca6c2bf1dd8991ff5e15bac587ae2bc250362dae9", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MultiMerkleMine", + "sourceResolvedCommit": null, + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.refunder", + "name": "Refunder", + "canonicalName": "Refunder", + "address": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "blockchainHref": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x792b8bc44b1b160cb25ea702539f6fdf7df4775be134bad718a7290c9340e510", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Refunder", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "848888801326164832", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/refund/Refunder.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.sortedDoublyLL", + "name": "SortedDoublyLL", + "canonicalName": "SortedDoublyLL", + "address": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "blockchainHref": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xf32422ac790bd816e1e02dc866df27d6d55047c1dc08def99809859734b7ab2c", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "SortedDoublyLL", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/libraries/SortedDoublyLL.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Migrator", + "name": "L1Migrator", + "canonicalName": "L1Migrator", + "address": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "blockchainHref": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x90edd673ce561432d8b3317a5e6cd5e3a9bcf30c121147d0ff66db9271de9877", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Migrator", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x406a112f3218b988c66778fd72fc8467f2601366", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "blockchainHref": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "genesis.MerkleProof.historicalSeries.1", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "genesis", + "lifecycle": "historical", + "chain": "ethereumMainnet", + "proofChain": "historical-series", + "version": null, + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "MerkleProof", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "genesis:MerkleProof" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "current": [ + { + "id": "ethereumMainnet.bridgeMinter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "address": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2d6c985061f27c6c02785799a715099670620c5dfed3f3ecfc6ab406e3e5a343", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "bridgeMinter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/mainnet/L1Escrow.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Escrow", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTGateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x58b6a8a3302369daec383334672404ee733ab239", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "active": [ + { + "id": "ethereumMainnet.bridgeMinter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "address": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2d6c985061f27c6c02785799a715099670620c5dfed3f3ecfc6ab406e3e5a343", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "bridgeMinter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/mainnet/L1Escrow.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Escrow", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTGateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x58b6a8a3302369daec383334672404ee733ab239", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "paused": [ + { + "id": "ethereumMainnet.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "blockchainHref": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x406a112f3218b988c66778fd72fc8467f2601366", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "blockchainHref": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "ethereumMainnet.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + } + ], + "migration_residual": [ + { + "id": "ethereumMainnet.l1Migrator", + "name": "L1Migrator", + "canonicalName": "L1Migrator", + "address": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "blockchainHref": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x90edd673ce561432d8b3317a5e6cd5e3a9bcf30c121147d0ff66db9271de9877", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Migrator", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "legacy_operational": [ + { + "id": "ethereumMainnet.l1LPTDataCache", + "name": "L1LPTDataCache", + "canonicalName": "L1LPTDataCache", + "address": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "blockchainHref": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x49b03ce75a9e4ad81079c9677a5caac20548a2407ee6cae472e3c47548b37445", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.genesisManager", + "name": "GenesisManager", + "canonicalName": "GenesisManager", + "address": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xae790d27d0e1d3e6bbd97ff692b457d4c526ea8c8fafd0cbd395567a2ebbf182", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "GenesisManager", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/GenesisManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.merkleMine", + "name": "MerkleMine", + "canonicalName": "MerkleMine", + "address": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "blockchainHref": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x17b6becfe8dae798aba9441d55041b5cc410570c1d4330fd6ad71b5c21ce4f94", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleMine", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/MerkleMine.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.multiMerkleMine", + "name": "MultiMerkleMine", + "canonicalName": "MultiMerkleMine", + "address": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": "Legacy utility contract preserved through direct explorer verification of the published seed address.", + "keccakHash": "0xeab338ace3157e6cc2478b0ca6c2bf1dd8991ff5e15bac587ae2bc250362dae9", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MultiMerkleMine", + "sourceResolvedCommit": null, + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.refunder", + "name": "Refunder", + "canonicalName": "Refunder", + "address": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "blockchainHref": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x792b8bc44b1b160cb25ea702539f6fdf7df4775be134bad718a7290c9340e510", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Refunder", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "848888801326164832", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/refund/Refunder.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.sortedDoublyLL", + "name": "SortedDoublyLL", + "canonicalName": "SortedDoublyLL", + "address": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "blockchainHref": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xf32422ac790bd816e1e02dc866df27d6d55047c1dc08def99809859734b7ab2c", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "SortedDoublyLL", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/libraries/SortedDoublyLL.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "historical": [ + { + "id": "genesis.MerkleProof.historicalSeries.1", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "genesis", + "lifecycle": "historical", + "chain": "ethereumMainnet", + "proofChain": "historical-series", + "version": null, + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "MerkleProof", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "genesis:MerkleProof" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "historicalSeries": { + "core": [ + { + "category": "core", + "name": "BondingManager", + "canonicalName": "BondingManager", + "entries": [] + }, + { + "category": "core", + "name": "Controller", + "canonicalName": "Controller", + "entries": [] + }, + { + "category": "core", + "name": "Minter", + "canonicalName": "Minter", + "entries": [] + }, + { + "category": "core", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "entries": [] + }, + { + "category": "core", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "entries": [] + }, + { + "category": "core", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "entries": [] + } + ], + "token": [ + { + "category": "token", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "entries": [] + } + ], + "bridge": [ + { + "category": "bridge", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "entries": [] + }, + { + "category": "bridge", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "entries": [] + }, + { + "category": "bridge", + "name": "L1LPTDataCache", + "canonicalName": "L1LPTDataCache", + "entries": [] + }, + { + "category": "bridge", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "entries": [] + } + ], + "migration": [ + { + "category": "migration", + "name": "L1Migrator", + "canonicalName": "L1Migrator", + "entries": [] + } + ], + "utility": [ + { + "category": "utility", + "name": "GenesisManager", + "canonicalName": "GenesisManager", + "entries": [] + }, + { + "category": "utility", + "name": "MerkleMine", + "canonicalName": "MerkleMine", + "entries": [] + }, + { + "category": "utility", + "name": "MultiMerkleMine", + "canonicalName": "MultiMerkleMine", + "entries": [] + }, + { + "category": "utility", + "name": "Refunder", + "canonicalName": "Refunder", + "entries": [] + }, + { + "category": "utility", + "name": "SortedDoublyLL", + "canonicalName": "SortedDoublyLL", + "entries": [] + } + ], + "genesis": [ + { + "category": "genesis", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "entries": [ + { + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "category": "genesis", + "chain": "ethereumMainnet", + "type": "standalone", + "deploymentKind": "standalone", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "version": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + } + ] + }, + "currentImplementations": [] + }, + "historical": { + "arbitrumOne": { + "BondingManager": [ + { + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "replacedBy": "V2", + "status": "Replaced by V2" + }, + { + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "chain": "arbitrumOne", + "type": "target", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "replacedBy": "V3", + "status": "Replaced by V3" + }, + { + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "chain": "arbitrumOne", + "type": "target", + "version": "V3", + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "replacedBy": "V4", + "status": "Replaced by V4" + }, + { + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "chain": "arbitrumOne", + "type": "target", + "version": "V4", + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "replacedBy": "V5", + "status": "Replaced by V5" + }, + { + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "chain": "arbitrumOne", + "type": "target", + "version": "V5", + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "replacedBy": "V6", + "status": "Replaced by V6" + }, + { + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "chain": "arbitrumOne", + "type": "target", + "version": "V6", + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "replacedBy": "V7", + "status": "Replaced by V7" + }, + { + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "chain": "arbitrumOne", + "type": "target", + "version": "V7", + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "replacedBy": "V8", + "status": "Replaced by V8" + }, + { + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "chain": "arbitrumOne", + "type": "target", + "version": "V8", + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "replacedBy": "V9", + "status": "Replaced by V9" + }, + { + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "chain": "arbitrumOne", + "type": "target", + "version": "V9", + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "replacedBy": "V10", + "status": "Replaced by V10" + }, + { + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "chain": "arbitrumOne", + "type": "target", + "version": "V10", + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "replacedBy": "V11", + "status": "Replaced by V11" + }, + { + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "chain": "arbitrumOne", + "type": "target", + "version": "V11", + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "replacedBy": "V12", + "status": "Replaced by V12" + }, + { + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "chain": "arbitrumOne", + "type": "target", + "version": "V12", + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "replacedBy": null, + "status": "Deprecated" + } + ], + "Minter": [ + { + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "chain": "arbitrumOne", + "type": "standalone", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "replacedBy": null, + "status": "Deprecated" + } + ], + "TicketBroker": [ + { + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "replacedBy": "V2", + "status": "Replaced by V2" + }, + { + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "chain": "arbitrumOne", + "type": "target", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "replacedBy": null, + "status": "Deprecated" + } + ], + "BondingVotes": [ + { + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "replacedBy": null, + "status": "Deprecated" + } + ], + "L2Migrator": [ + { + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "replacedBy": null, + "status": "Deprecated" + } + ] + }, + "ethereumMainnet": { + "MerkleProof": [ + { + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "chain": "ethereumMainnet", + "type": "standalone", + "version": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "replacedBy": null, + "status": "Deprecated" + } + ] + } + }, + "meta": { + "lastUpdated": "2026-04-03T10:02:24.221Z", + "lastVerified": "3 Apr 2026", + "sourceRepo": "livepeer/governor-scripts", + "sourceCommit": "2cb192a", + "verificationSummary": "16/16 Arbitrum source-verified, 17/17 Mainnet source-verified", + "bytecodeSummary": "16/16 Arbitrum with bytecode, 17/17 Mainnet with bytecode", + "explorerUrls": { + "arbiscan": "https://arbiscan.io", + "arbiscanAddress": "https://arbiscan.io/address/", + "etherscan": "https://etherscan.io", + "etherscanAddress": "https://etherscan.io/address/", + "blockscoutArbitrum": "https://arbitrum.blockscout.com", + "blockscoutEthereum": "https://eth.blockscout.com" + }, + "rpcUrls": { + "arbitrumOne": [ + "https://arb1.arbitrum.io/rpc", + "https://arbitrum-one-rpc.publicnode.com", + "https://arbitrum.drpc.org" + ], + "ethereumMainnet": [ + "https://eth.llamarpc.com", + "https://ethereum-rpc.publicnode.com", + "https://eth.drpc.org" + ] + }, + "verificationModel": "contracts-proof-v2", + "watchedRepos": [ + { + "repo": "livepeer/protocol", + "preferredBranches": [ + "delta", + "streamflow", + "master" + ], + "role": "controller-and-provenance" + }, + { + "repo": "livepeer/arbitrum-lpt-bridge", + "preferredBranches": [ + "main" + ], + "role": "bridge-and-token" + }, + { + "repo": "livepeer/go-livepeer", + "preferredBranches": [ + "master", + "main" + ], + "role": "runtime-consumer" + }, + { + "repo": "livepeer/governor-scripts", + "preferredBranches": [ + "master", + "main" + ], + "role": "governance-discovery" + } + ], + "latestResolutionPolicy": [ + "Current controller-managed addresses are recovered from live controller reads on every run.", + "Bridge and detached families must resolve from watched upstream repositories or official manifests, then survive runtime and explorer validation.", + "Branch names are discovery inputs only. Published code provenance must resolve to repo, commit, and file path.", + "Docs-local files do not define publishable address truth, lifecycle truth, implementation truth, or code-source truth.", + "Silent degradation is not a permitted outcome. Unresolved truth, provenance, or branch anomalies produce a blocking incident artifact." + ], + "cadence": { + "defaultLabel": "daily", + "mainScheduleCron": "0 2 * * *", + "shadowScheduleCron": "30 2 * * *", + "configurable": true + } + } +} \ No newline at end of file diff --git a/snippets/data/contract-addresses/contractAddressesData.jsx b/snippets/data/contract-addresses/contractAddressesData.jsx index 0c1b9c947..860fe7d59 100644 --- a/snippets/data/contract-addresses/contractAddressesData.jsx +++ b/snippets/data/contract-addresses/contractAddressesData.jsx @@ -1,2397 +1,16432 @@ /** * Auto-generated by fetch-contract-addresses.js - * Source: livepeer/governor-scripts (commit 2cb192a) - * Last updated: 2026-03-26T04:46:31.137Z + * Source: livepeer/governor-scripts (2cb192a) + * Last updated: 2026-04-03T10:02:24.221Z * DO NOT EDIT MANUALLY - * - * @typedef {Object} ContractEntry - * @property {string} name - Contract name, e.g. "BondingManager" - * @property {string} address - Deployed address (checksummed) - * @property {'proxy'|'target'|'standalone'} type - Proxy (stable), target (changes on upgrade), or standalone - * @property {string} category - Functional group: "core" | "governance" | "token" | "migration" - * @property {boolean} isHistorical - true if superseded by a newer deployment - * @property {boolean} verified - On-chain verification status from explorer - * @property {string} verifiedAt - Human-readable date, DD Mon YYYY (e.g. "26 Mar 2026") - * @property {string} chain - Network: "arbitrumOne" | "ethereumMainnet" - * @property {string} repoSrc - Source repo and branch, e.g. "livepeer/protocol@delta" - * @property {string} contractCodeHref - Full GitHub URL to .sol source file - * @property {string} blockchainHref - Full explorer URL to contract address - * @property {Object} meta - Per-contract metadata for display surfaces - * @property {string} meta.statusLabel - Editorial status: "Active" | "Migration complete" | "Paused" - * @property {string|null} meta.deployedBy - Deployer label: "Livepeer Deployer" | "AI subnet deployer" | null - * @property {string|null} meta.deployedAt - Deploy date, Mon YYYY (e.g. "Apr 2024") | null - * @property {string|null} meta.notes - Editorial context: "Origin token" | "Holds bridged LPT" | null - * @property {string|null} meta.holderCount - Token holder count as formatted string | null (non-tokens) - * @property {number|null} meta.transactionCount - Total transaction count | null - * @property {string|null} meta.lastActiveDate - Last transaction date, Mon YYYY | null - * @property {string|null} meta.blockscoutLabel - Name shown on explorer | null - * @property {boolean} meta.registeredInController - Whether Controller.getContract() returns this address - * - * @typedef {Object} HistoricalGroup - * @property {string} note - Group description - * @property {Array<{address: string, version: string}>} entries - Versioned historical addresses - * - * @typedef {Object} ContractAddresses - * @property {Object} arbitrumOne - * @property {ContractEntry[]} arbitrumOne.current - Active Arbitrum One contracts - * @property {Object.<string, HistoricalGroup>} arbitrumOne.historical - Deprecated, grouped by contract name - * @property {Object} ethereumMainnet - * @property {ContractEntry[]} ethereumMainnet.current - Active Ethereum Mainnet contracts - * @property {Object.<string, HistoricalGroup>} ethereumMainnet.historical - Deprecated, grouped by contract name - * @property {Object} meta - * @property {string} meta.lastUpdated - ISO timestamp of last script run - * @property {string} meta.lastVerified - Human-readable date, DD Mon YYYY - * @property {string} meta.sourceRepo - Source repo URL - * @property {string} meta.sourceCommit - Commit SHA - * @property {string} meta.verificationSummary - e.g. "25/25 Arbitrum, 24/24 Mainnet" - * @property {Object} meta.explorerUrls - * @property {string} meta.explorerUrls.arbiscan - Arbiscan base URL - * @property {string} meta.explorerUrls.etherscan - Etherscan base URL */ -/** Human-readable definitions for field values. Used by page tooltips and table headers. */ -export const definitions = { - type: { - proxy: - 'Stable address that delegates to a target implementation. Survives upgrades — users always interact with this address.', - target: - 'Implementation contract behind a proxy. Replaced on governance upgrades. Do not interact with directly.', - standalone: - 'Contract with no proxy pattern. Address changes only if redeployed (rare).', - }, - category: { - core: 'Staking, payments, round progression, and service discovery. The operational backbone of the protocol.', - token: - 'The LPT ERC-20 token and bridge infrastructure connecting Ethereum Mainnet and Arbitrum One.', - governance: - 'On-chain voting, proposal execution, treasury management, and stake checkpointing.', - bridge: - 'Cross-chain infrastructure for the Confluence migration from Ethereum to Arbitrum.', - migration: - 'Historical contracts from the Confluence upgrade (2022). Migration is complete.', - utility: - 'Libraries and helper contracts (sorting, genesis distribution, refunds).', - }, - chain: { - arbitrumOne: - 'Arbitrum One (chain 42161). All active protocol operations run here.', - ethereumMainnet: - 'Ethereum Mainnet (chain 1). Only LivepeerToken (origin) and BridgeMinter remain operational. All other L1 contracts are paused.', - local: 'Local only testnet contracts', - }, - verified: { - true: 'Contract bytecode verified on the block explorer. Source code matches deployed bytecode.', - false: 'Contract bytecode not yet verified on the block explorer.', - null: 'local testnet', - }, - statusLabel: { - Active: 'Contract is live and processing transactions.', - Deprecated: - 'Superseded by a newer implementation via governance upgrade. No longer receiving transactions. Listed for audit and historical reference.', - 'Migration complete': - 'Contract served the Confluence migration. No new migrations possible, but may still process pending claims.', - Paused: 'Contract is deployed but not currently processing transactions.', - 'Testnet only': - 'Deployed only on test networks. Not present on mainnet or Arbitrum One.', - }, - registeredInController: { - true: 'Controller.getContract(keccak256(name)) returns this address. The protocol routes calls through it.', - false: - 'Not registered in the Controller. Either standalone, detached, or on a different chain.', - }, - meta: { - statusLabel: - 'Operational status of the contract. Set editorially, not derived from on-chain data.', - deployedBy: - 'The entity that deployed this contract. Derived from the creator address on the block explorer.', - deployedAt: - 'Date of contract creation on-chain. Sourced from the first transaction on the block explorer.', - notes: - 'Editorial context about this contract that cannot be derived from on-chain data.', - referencePage: 'Livpeer Docs Reference Page', - holderCount: - 'Number of unique addresses holding this token. Only populated for ERC-20 token contracts.', - transactionCount: - 'Total number of transactions sent to this contract address.', - lastActiveDate: - 'Date of the most recent transaction involving this contract.', - blockscoutLabel: - 'The human-readable name shown for this address on the Blockscout explorer.', - registeredInController: - 'Whether the protocol Controller contract returns this address when queried by name.', - contractCodeHref: 'Link to the Solidity source code on GitHub.', - blockchainHref: 'Link to the contract on the block explorer.', - repoSrc: - 'The GitHub repository and branch containing this contract source code.', - verified: - 'Whether the deployed bytecode has been verified against source code on the block explorer.', - verifiedAt: - 'Date the contract was last verified by the pipeline. Human-readable DD Mon YYYY.', - }, -} - export const contractAddresses = { "arbitrumOne": { - "current": [ + "inventory": [ { - "name": "LivepeerToken", - "address": "0x289ba1701C2F088cf0faf8B3705246331cB8A839", + "id": "arbitrumOne.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", "type": "standalone", - "category": "token", - "isHistorical": false, + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", "chain": "arbitrumOne", - "repoSrc": "livepeer/arbitrum-lpt-bridge@main", - "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L2/token/LivepeerToken.sol", - "blockchainHref": "https://arbiscan.io/address/0x289ba1701C2F088cf0faf8B3705246331cB8A839", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": "Livepeer Deployer", "notes": null, - "holderCount": "245,861", - "transactionCount": 127236, - "deployedAt": "12 Feb 2022", - "lastActiveDate": "31 Mar 2026", - "blockscoutLabel": "Livepeer", - "registeredInController": true, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2022-02-11T13:19:54.000Z", - "tokenTransferCount": 20, - "validationsCount": 0, - "totalSupply": "31760035937375890105669644", - "decimals": "18", - "symbol": "LPT", - "lastActiveDateISO": "2026-03-30T14:14:29.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "8 Oct 2024", - "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", - "repoIsPrivate": false, - "transactionsRecent": 3 + "controllerRegistered": null }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } }, { - "name": "BondingVotes", - "address": "0x0B9C254837E72Ebe9Fe04960C43B69782E68169A", - "type": "proxy", - "category": "governance", - "isHistorical": false, + "id": "arbitrumOne.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/bonding/BondingVotes.sol", - "blockchainHref": "https://arbiscan.io/address/0x0B9C254837E72Ebe9Fe04960C43B69782E68169A", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, "notes": null, - "holderCount": null, - "transactionCount": 0, - "deployedAt": "12 Oct 2023", - "lastActiveDate": "12 Oct 2023", - "blockscoutLabel": "ManagerProxy", + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", "registeredInController": true, - "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2023-10-11T22:24:18.000Z", - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDateISO": "2023-10-11T22:24:18.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "27 Apr 2025", - "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", - "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", - "repoIsPrivate": false, - "transactionsRecent": 0 + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } }, { - "name": "BondingVotes", - "address": "0x1561fC5F7Efc049476224005DFf38256dccfc509", - "type": "target", - "category": "governance", - "isHistorical": false, + "id": "arbitrumOne.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/bonding/BondingVotes.sol", - "blockchainHref": "https://arbiscan.io/address/0x1561fC5F7Efc049476224005DFf38256dccfc509", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, - "notes": null, - "holderCount": null, - "transactionCount": 0, - "deployedAt": "12 Oct 2023", - "lastActiveDate": "12 Oct 2023", - "blockscoutLabel": "BondingVotes", - "registeredInController": null, - "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Minter", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, - "balance": "0", - "deployedAtISO": "2023-10-11T22:24:12.000Z", - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDateISO": "2023-10-11T22:24:12.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Mar 2026", - "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", - "repoIsPrivate": false, - "transactionsRecent": 0 + "balance": "170387616144807792234", + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } }, { - "name": "Governor", - "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", - "type": "standalone", - "category": "governance", + "id": "arbitrumOne.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "Governor", + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "12 Feb 2022", - "deployedAtISO": "2022-02-11T13:25:54.000Z", - "transactionCount": 22, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "20 Mar 2026", - "lastActiveDateISO": "2026-03-19T15:32:21.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "16 May 2025", - "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", - "registeredInController": false, - "transactionsRecent": 0 + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } } }, { - "name": "LivepeerGovernor", - "address": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", - "type": "target", - "category": "governance", - "isHistorical": false, + "id": "arbitrumOne.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/treasury/LivepeerGovernor.sol", - "blockchainHref": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, - "notes": null, - "holderCount": null, - "transactionCount": 0, - "deployedAt": "12 Oct 2023", - "lastActiveDate": "12 Oct 2023", - "blockscoutLabel": "LivepeerGovernor", - "registeredInController": null, - "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2023-10-11T22:24:36.000Z", - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDateISO": "2023-10-11T22:24:36.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "19 Jul 2024", - "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", - "repoIsPrivate": false, - "transactionsRecent": 0 + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } }, { - "name": "LivepeerGovernor", - "address": "0xcFE4E2879B786C3aa075813F0E364bb5acCb6aa0", + "id": "arbitrumOne.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", "type": "proxy", - "category": "governance", - "isHistorical": false, + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/treasury/LivepeerGovernor.sol", - "blockchainHref": "https://arbiscan.io/address/0xcFE4E2879B786C3aa075813F0E364bb5acCb6aa0", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, "notes": null, - "holderCount": null, - "transactionCount": 2936, - "deployedAt": "12 Oct 2023", - "lastActiveDate": "31 Mar 2026", - "blockscoutLabel": "ManagerProxy", + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", "registeredInController": true, - "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2023-10-11T22:24:42.000Z", - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDateISO": "2026-03-30T13:09:50.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "16 Dec 2024", - "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", - "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", - "repoIsPrivate": false, - "transactionsRecent": 1 + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } }, { - "name": "MerkleSnapshot", - "address": "0x10736ffaCe687658F88a46D042631d182C7757f7", - "type": "standalone", - "category": "governance", + "id": "arbitrumOne.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "MerkleSnapshot", + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "12 Feb 2022", - "deployedAtISO": "2022-02-11T13:25:54.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "12 Feb 2022", - "lastActiveDateISO": "2022-02-11T13:25:54.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "30 Dec 2025", - "keccakHash": "0xb6138afe6f306a47bdf645c5aebcb9781efe787d221a1880e62d1f76dae58b84", - "registeredInController": true, - "transactionsRecent": 0 + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } } }, { - "name": "PollCreator", - "address": "0x8bb50806D60c492c0004DAD5D9627DAA2d9732E6", + "id": "arbitrumOne.aiServiceRegistry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", "type": "standalone", - "category": "governance", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "PollCreator", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "statusLabel": "Active", + "notes": "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", + "blockscoutLabel": "ServiceRegistry", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": "livepeer/go-livepeer", + "runtimeConsumerPath": "cmd/livepeer/starter/starter.go", + "runtimeConsumerResolvedCommit": "9e68815", + "runtimeConsumerExactAddressMatch": true, + "runtimeConsumerRequired": true, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "12 Feb 2022", - "deployedAtISO": "2022-02-11T13:40:11.000Z", - "transactionCount": 6, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "26 Feb 2026", - "lastActiveDateISO": "2026-02-26T07:27:46.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "21 Jan 2026", - "keccakHash": "0x0343f01276c9038f8c7154dcdf7873ad6edd872ce0e719ebd989c051b4b1039b", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "Treasury", - "address": "0xf82C1FF415F1fCf582554fDba790E27019c8E8C4", + "id": "arbitrumOne.governor", + "name": "Governor", + "canonicalName": "Governor", + "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", "type": "standalone", + "deploymentKind": "standalone", "category": "governance", - "isHistorical": false, + "lifecycle": "active", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/treasury/Treasury.sol", - "blockchainHref": "https://arbiscan.io/address/0xf82C1FF415F1fCf582554fDba790E27019c8E8C4", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, "notes": null, - "holderCount": null, - "transactionCount": 5, - "deployedAt": "12 Oct 2023", - "lastActiveDate": "12 Oct 2023", - "blockscoutLabel": "Treasury", - "registeredInController": true, - "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/Governor.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Governor", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2023-10-11T22:24:25.000Z", - "tokenTransferCount": 65549, - "validationsCount": 0, - "lastActiveDateISO": "2023-10-11T22:57:19.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "21 Jan 2026", - "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", - "repoIsPrivate": false, - "transactionsRecent": 0 + "controllerRegistered": null }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } }, { - "name": "L2LPTDataCache", - "address": "0xd78b6bD09cd28A83cFb21aFa0DA95c685A6bb0B1", - "type": "standalone", - "category": "bridge", - "isHistorical": false, + "id": "arbitrumOne.bondingVotes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", "chain": "arbitrumOne", - "repoSrc": "livepeer/arbitrum-lpt-bridge@main", - "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L2/L2LPTDataCache.sol", - "blockchainHref": "https://arbiscan.io/address/0xd78b6bD09cd28A83cFb21aFa0DA95c685A6bb0B1", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, "notes": null, - "holderCount": null, - "transactionCount": 6, - "deployedAt": "12 Feb 2022", - "lastActiveDate": "1 Dec 2022", - "blockscoutLabel": "L2LPTDataCache", + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "registered", "registeredInController": true, - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "governorKey": "BondingVotes", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2022-02-11T16:10:49.000Z", - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDateISO": "2022-12-01T09:14:06.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "21 Jan 2026", - "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", - "repoIsPrivate": false, - "transactionsRecent": 0 + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "proxyTargetContractName": "BondingVotesTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } }, { - "name": "L2LPTGateway", - "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", - "type": "standalone", - "category": "bridge", - "isHistorical": false, + "id": "arbitrumOne.livepeerGovernor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", "chain": "arbitrumOne", - "repoSrc": "livepeer/arbitrum-lpt-bridge@main", - "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L2/gateway/L2LPTGateway.sol", - "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, "notes": null, - "holderCount": null, - "transactionCount": 5337, - "deployedAt": "12 Feb 2022", - "lastActiveDate": "30 Mar 2026", - "blockscoutLabel": "L2LPTGateway", - "registeredInController": false, - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "governorKey": "LivepeerGovernor", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2022-02-11T16:13:02.000Z", - "tokenTransferCount": 3, - "validationsCount": 0, - "lastActiveDateISO": "2026-03-30T12:00:41.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "16 Nov 2024", - "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", - "repoIsPrivate": false, - "transactionsRecent": 0 + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "proxyTargetContractName": "LivepeerGovernorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } }, { - "name": "L2Migrator", - "address": "0x148D5b6B4df9530c7C76A810bd1Cdf69EC4c2085", - "type": "proxy", - "category": "bridge", - "isHistorical": false, + "id": "arbitrumOne.treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "address": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/L2/L2Migrator.sol", - "blockchainHref": "https://arbiscan.io/address/0x148D5b6B4df9530c7C76A810bd1Cdf69EC4c2085", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { - "statusLabel": "Migration complete", - "deployedBy": null, - "notes": "Still processing pending claimStake calls", - "holderCount": null, - "transactionCount": 1754, - "deployedAt": "12 Feb 2022", - "lastActiveDate": "30 Mar 2026", - "blockscoutLabel": "ManagerProxy", + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", + "registrationState": "registered", "registeredInController": true, - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "bsVerified": true, - "isContract": true, - "balance": "6714546397396733235", - "deployedAtISO": "2022-02-11T16:15:34.000Z", - "tokenTransferCount": 325, - "validationsCount": 0, - "lastActiveDateISO": "2026-03-30T00:08:37.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "29 Dec 2025", - "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", - "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "controllerSlot": "Treasury", + "controllerResolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "governorKey": "Treasury", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, "repoIsPrivate": false, - "transactionsRecent": 0 - }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" - }, - { - "name": "L2Migrator", - "address": "0x93BB030735747708b4D33093A98d4c804Cd6B58C", - "type": "target", - "category": "bridge", - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", - "meta": { - "blockscoutLabel": "L2Migrator", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "Treasury", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "15 Feb 2022", - "deployedAtISO": "2022-02-15T02:46:40.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "15 Feb 2022", - "lastActiveDateISO": "2022-02-15T02:46:40.000Z", - "compilerVersion": "v0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "29 Dec 2025", - "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", - "transactionsRecent": 0 + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "SortedDoublyLL", - "address": "0xC45f6918F7Bcac7aBc8fe05302b3cDF39776cdeb", + "id": "arbitrumOne.l2LPTGateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", "type": "standalone", - "category": "utility", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "SortedDoublyLL", + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l2LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "12 Feb 2022", - "deployedAtISO": "2022-02-11T13:25:10.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "12 Feb 2022", - "lastActiveDateISO": "2022-02-11T13:25:10.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "5 Apr 2025", - "keccakHash": "0xf32422ac790bd816e1e02dc866df27d6d55047c1dc08def99809859734b7ab2c", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "AIServiceRegistry", - "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", - "type": "target", - "category": "core", - "_note": "Detached from controller", + "id": "arbitrumOne.l2LPTDataCache", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "address": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "blockchainHref": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", - "meta": { - "blockscoutLabel": "ServiceRegistry", - "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", - "bsVerified": true, - "isContract": true, - "balance": "0", - "deployedAt": "18 Apr 2024", - "deployedAtISO": "2024-04-17T15:16:57.000Z", - "transactionCount": 173, - "tokenTransferCount": 1, - "validationsCount": 0, - "lastActiveDate": "30 Mar 2026", - "lastActiveDateISO": "2026-03-29T18:12:52.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "23 Jul 2024", - "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", - "transactionsRecent": 1 - } - }, - { - "name": "BondingManager", - "address": "0x35Bcf3c30594191d53231E4FF333E8A770453e40", - "type": "proxy", - "category": "core", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", "isHistorical": false, - "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/bonding/BondingManager.sol", - "blockchainHref": "https://arbiscan.io/address/0x35Bcf3c30594191d53231E4FF333E8A770453e40", "meta": { "statusLabel": "Active", - "deployedBy": null, "notes": null, - "holderCount": null, - "transactionCount": 224146, - "deployedAt": "12 Feb 2022", - "lastActiveDate": "31 Mar 2026", - "blockscoutLabel": "ManagerProxy", + "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", + "registrationState": "registered", "registeredInController": true, + "controllerSlot": "L2LPTDataCache", + "controllerResolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "governorKey": "L2LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2022-02-11T13:25:10.000Z", - "tokenTransferCount": 7, - "validationsCount": 0, - "lastActiveDateISO": "2026-03-30T14:47:48.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "16 Dec 2024", - "proxyTarget": "0x363cdb9bae210ef182c60b5a496139e980330127", - "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", - "repoIsPrivate": false, - "transactionsRecent": 19 + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2LPTDataCache", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } }, { - "name": "Controller", - "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", - "type": "standalone", - "category": "core", - "isHistorical": false, + "id": "arbitrumOne.l2Migrator", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "type": "proxy", + "deploymentKind": "proxy", + "category": "migration", + "lifecycle": "migration_residual", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/Controller.sol", - "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { - "statusLabel": "Active", - "deployedBy": "Livepeer Deployer", + "statusLabel": "migration residual", "notes": null, - "holderCount": null, - "transactionCount": 20, - "deployedAt": "12 Feb 2022", - "lastActiveDate": "26 Dec 2024", - "blockscoutLabel": "Controller", - "registeredInController": null, + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "governorKey": "L2Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, - "balance": "0", - "deployedAtISO": "2022-02-11T13:24:06.000Z", - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDateISO": "2024-12-25T22:08:50.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "16 May 2025", - "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", - "repoIsPrivate": false, - "transactionsRecent": 0 + "balance": "6714546397396733235", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "proxyTargetContractName": "L2MigratorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2Migrator", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "targetContractName": "L2MigratorTarget", + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } }, { - "name": "DelegatorPool", - "address": "0xfdb06109032AD3671a8f14f5f2E78f4B9E81b567", + "id": "arbitrumOne.merkleSnapshot", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "address": "0x10736fface687658f88a46d042631d182c7757f7", "type": "standalone", - "category": "core", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "blockchainHref": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "DelegatorPool", + "statusLabel": "migration residual", + "notes": "Migration proof registry retained for Confluence claim verification.", + "keccakHash": "0xb6138afe6f306a47bdf645c5aebcb9781efe787d221a1880e62d1f76dae58b84", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "MerkleSnapshot", + "controllerResolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "governorKey": "MerkleSnapshot", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleSnapshot", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "12 Feb 2022", - "deployedAtISO": "2022-02-11T16:15:34.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "12 Feb 2022", - "lastActiveDateISO": "2022-02-11T16:15:34.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "29 Dec 2025", - "keccakHash": "0x7a9ff95f60f5743cfd4d2b01f213bbd2032518d7d7b630413bff404321d96022", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "MerkleSnapshot" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/snapshots/MerkleSnapshot.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "MerkleSnapshot", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "Minter", - "address": "0x4969dcCF5186e1c49411638fc8A2a020Fdab752E", - "type": "standalone", + "id": "arbitrumOne.bondingManager.implementation", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "type": "target", + "deploymentKind": "target", "category": "core", - "isHistorical": false, + "lifecycle": "historical", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/token/Minter.sol", - "blockchainHref": "https://arbiscan.io/address/0x4969dcCF5186e1c49411638fc8A2a020Fdab752E", + "version": "V13", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, "meta": { - "statusLabel": "Active", - "deployedBy": null, - "notes": null, - "holderCount": null, - "transactionCount": 0, - "deployedAt": "12 Feb 2022", - "lastActiveDate": "12 Feb 2022", - "blockscoutLabel": "Minter", + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "not_applicable", "registeredInController": false, - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "bsVerified": true, - "isContract": true, - "balance": "0", - "deployedAtISO": "2022-02-11T13:24:06.000Z", - "tokenTransferCount": 268, - "validationsCount": 0, - "lastActiveDateISO": "2022-02-11T13:24:06.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Mar 2026", - "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "controllerSlot": "BondingManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V13", + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyTarget": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, "repoIsPrivate": false, - "transactionsRecent": 0 + "controllerRegistered": null }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "implementationName": "BondingManager", + "implementationVersion": "V13", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } }, { - "name": "Minter", - "address": "0xc20DE37170B45774e6CD3d2304017fc962f27252", - "type": "standalone", + "id": "arbitrumOne.ticketBroker.implementation", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "type": "target", + "deploymentKind": "target", "category": "core", - "version": "V2", - "isHistorical": false, + "lifecycle": "historical", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/token/Minter.sol", - "blockchainHref": "https://arbiscan.io/address/0xc20DE37170B45774e6CD3d2304017fc962f27252", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, "meta": { - "statusLabel": "Active", - "deployedBy": null, - "notes": null, - "holderCount": null, - "transactionCount": 2, - "deployedAt": "18 Feb 2022", - "lastActiveDate": "1 Feb 2024", - "blockscoutLabel": "Minter", - "registeredInController": true, - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "bsVerified": true, - "isContract": true, - "balance": "174257564361724737063", - "deployedAtISO": "2022-02-17T15:50:01.000Z", - "tokenTransferCount": 248229, - "validationsCount": 0, - "lastActiveDateISO": "2024-01-31T21:28:22.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "21 Jan 2026", - "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, "repoIsPrivate": false, - "transactionsRecent": 0 + "controllerRegistered": null }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "TicketBroker", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": "TicketBroker", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } }, { + "id": "arbitrumOne.roundsManager.implementation", "name": "RoundsManager", - "address": "0xdd6f56DcC28D3F5f27084381fE8Df634985cc39f", - "type": "proxy", + "canonicalName": "RoundsManager", + "address": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "type": "target", + "deploymentKind": "target", "category": "core", - "isHistorical": false, + "lifecycle": "historical", "chain": "arbitrumOne", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/rounds/RoundsManager.sol", - "blockchainHref": "https://arbiscan.io/address/0xdd6f56DcC28D3F5f27084381fE8Df634985cc39f", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, "meta": { - "statusLabel": "Active", - "deployedBy": null, - "notes": null, - "holderCount": null, - "transactionCount": 2320, - "deployedAt": "12 Feb 2022", - "lastActiveDate": "30 Mar 2026", - "blockscoutLabel": "ManagerProxy", - "registeredInController": true, - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "bsVerified": true, - "isContract": true, - "balance": "0", - "deployedAtISO": "2022-02-11T13:25:54.000Z", - "tokenTransferCount": 2, - "validationsCount": 0, - "lastActiveDateISO": "2026-03-30T12:39:54.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "16 Dec 2024", - "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", - "repoIsPrivate": false, - "transactionsRecent": 0 + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "RoundsManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": "RoundsManager", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.serviceRegistry.implementation", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "ServiceRegistry", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": "ServiceRegistry", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingVotes.implementation", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V2", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V2", + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyTarget": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingVotes", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "implementationName": "BondingVotes", + "implementationVersion": "V2", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor.implementation", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": null, + "governorKey": "livepeerGovernorTarget", + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyTarget": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "livepeerGovernorTarget" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "LivepeerGovernor", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "implementationName": "LivepeerGovernor", + "implementationVersion": null, + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2Migrator.implementation", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "L2Migrator", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": "L2Migrator", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.1", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.2", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V3", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.3", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V3", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V4", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.4", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V4", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V5", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.5", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V5", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V6", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.6", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V6", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V7", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.7", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V7", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V8", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.8", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V8", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V9", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.9", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V9", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V10", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.10", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V10", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V11", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.11", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V11", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V12", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.12", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V12", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.Minter.historicalSeries.1", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "Minter", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:Minter" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.1", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.2", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "governance.BondingVotes.historicalSeries.1", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingVotes", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "governance:BondingVotes" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "migration.L2Migrator.historicalSeries.1", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "L2Migrator", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "migration:L2Migrator" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "current": [ + { + "id": "arbitrumOne.l2LPTDataCache", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "address": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "blockchainHref": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2LPTDataCache", + "controllerResolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "governorKey": "L2LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2LPTDataCache", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTGateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l2LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.aiServiceRegistry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", + "blockscoutLabel": "ServiceRegistry", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": "livepeer/go-livepeer", + "runtimeConsumerPath": "cmd/livepeer/starter/starter.go", + "runtimeConsumerResolvedCommit": "9e68815", + "runtimeConsumerExactAddressMatch": true, + "runtimeConsumerRequired": true, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Minter", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "170387616144807792234", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.bondingVotes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "governorKey": "BondingVotes", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "proxyTargetContractName": "BondingVotesTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.governor", + "name": "Governor", + "canonicalName": "Governor", + "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/Governor.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Governor", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "governorKey": "LivepeerGovernor", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "proxyTargetContractName": "LivepeerGovernorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "address": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Treasury", + "controllerResolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "governorKey": "Treasury", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "Treasury", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "active": [ + { + "id": "arbitrumOne.l2LPTDataCache", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "address": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "blockchainHref": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x8ecfba413a4e4715a264d70a55d3a35bf60b2954c56759310202f39281623200", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2LPTDataCache", + "controllerResolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "governorKey": "L2LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2LPTDataCache", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xd78b6bd09cd28a83cfb21afa0da95c685a6bb0b1", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2LPTGateway", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "address": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "blockchainHref": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x07148fd8bd26d2f980f876cc40cea159d0cca6e6456a379f06f34fb338d35be5", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l2LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L2LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l2LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6D2457a4ad276000A615295f7A80F79E48CcD318" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6D2457a4ad276000A615295f7A80F79E48CcD318", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/arbitrumMainnet/L2LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.aiServiceRegistry", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "address": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": "Detached from Controller. Must resolve from watched repo/runtime evidence before publication.", + "keccakHash": "0x708d071449926f2d3af17f15cb9f54ed8b3886a1ef57c3059438aa0ca4d710d0", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xF5282864EC36871c36BF682aFE1C3f180D4f7902", + "blockscoutLabel": "ServiceRegistry", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": "livepeer/go-livepeer", + "runtimeConsumerPath": "cmd/livepeer/starter/starter.go", + "runtimeConsumerResolvedCommit": "9e68815", + "runtimeConsumerExactAddressMatch": true, + "runtimeConsumerRequired": true, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/AIServiceRegistry.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x04C0b249740175999E5BF5c9ac1dA92431EF34C5" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0x04C0b249740175999E5BF5c9ac1dA92431EF34C5", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/AIServiceRegistry.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": true, + "required": true, + "repo": "livepeer/go-livepeer", + "path": "cmd/livepeer/starter/starter.go", + "resolvedCommit": "9e68815", + "exactAddressMatch": true + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x35bcf3c30594191d53231e4ff333e8a770453e40" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0xda6fe3f332ae11539b3cf777284ae70fd3bf2d74", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "blockchainHref": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD8E8328501E9645d16Cf49539efC04f734606ee4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "blockchainHref": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Minter", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "170387616144807792234", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc20de37170b45774e6cd3d2304017fc962f27252" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc20de37170b45774e6cd3d2304017fc962f27252", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdd6f56dcc28d3f5f27084381fe8df634985cc39f" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc92d3a360b8f9e083ba64de15d95cf8180897431" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xa8bb618b1520e284046f3dfc448851a1ff26e41b" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.bondingVotes", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "governorKey": "BondingVotes", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "proxyTargetContractName": "BondingVotesTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingVotes" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0b9c254837e72ebe9fe04960c43b69782e68169a" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "BondingVotes", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0x7de5a5b8ecd5bb031f348e5f6eaba02944a498be282a3242da27f5a559dbd5dc", + "targetContractName": "BondingVotesTarget", + "implementationAddress": "0x68af80376bc1ca0c25a83b28e5570e8c7bdd3119", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.governor", + "name": "Governor", + "canonicalName": "Governor", + "address": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "detached", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "blockchainHref": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/arbitrumMainnet/Governor.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Governor", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/protocol", + "path": "deployments/arbitrumMainnet/Governor.json", + "refMode": "resolved-commit", + "resolvedCommit": "6e6b452", + "key": "deployments/arbitrumMainnet/Governor.json" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/governance/Governor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/governance/Governor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": "0xD9dEd6f9959176F0A04dcf88a0d2306178A736a6", + "deploymentArtifactRepo": "livepeer/protocol", + "deploymentArtifactPath": "deployments/arbitrumMainnet/Governor.json", + "deploymentArtifactResolvedCommit": "6e6b452", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "type": "proxy", + "deploymentKind": "proxy", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "governorKey": "LivepeerGovernor", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "proxyTargetContractName": "LivepeerGovernorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerGovernor" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerGovernor", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xd4c5f51c55641d608f9aa8c83a618a0b4bafdf778911c37f61b63c6be7a6992e", + "targetContractName": "LivepeerGovernorTarget", + "implementationAddress": "0xd2ce37bcb287cadc40647f567c2d3c4220901634", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.treasury", + "name": "Treasury", + "canonicalName": "Treasury", + "address": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "type": "standalone", + "deploymentKind": "standalone", + "category": "governance", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "blockchainHref": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x6efca2866b731ee4984990bacad4cde10f1ef764fb54a5206bdfd291695b1a9b", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Treasury", + "controllerResolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "governorKey": "Treasury", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", + "blockscoutLabel": "Treasury", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Treasury" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/Treasury.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/Treasury.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf82c1ff415f1fcf582554fdba790e27019c8e8c4" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "Treasury", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0xf82c1ff415f1fcf582554fdba790e27019c8e8c4", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "blockchainHref": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "paused": [], + "migration_residual": [ + { + "id": "arbitrumOne.l2Migrator", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "type": "proxy", + "deploymentKind": "proxy", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "governorKey": "L2Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "6714546397396733235", + "proxyControllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "proxyTargetContractName": "L2MigratorTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "L2Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "L2Migrator", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": "0xd8e8328501e9645d16cf49539efc04f734606ee4", + "controllerMatchesExpected": true, + "targetContractId": "0xf2067c9567f013942aa0abbd1c844dbf9301abbb14dba85f598a220968c88dd9", + "targetContractName": "L2MigratorTarget", + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "arbitrumOne.merkleSnapshot", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "address": "0x10736fface687658f88a46d042631d182c7757f7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "arbitrumOne", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "blockchainHref": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:06.910Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": "Migration proof registry retained for Confluence claim verification.", + "keccakHash": "0xb6138afe6f306a47bdf645c5aebcb9781efe787d221a1880e62d1f76dae58b84", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "MerkleSnapshot", + "controllerResolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "governorKey": "MerkleSnapshot", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleSnapshot", + "sourceResolvedCommit": "6e6b452", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "MerkleSnapshot" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/snapshots/MerkleSnapshot.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/snapshots/MerkleSnapshot.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:06.910Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x10736fface687658f88a46d042631d182c7757f7" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xD8E8328501E9645d16Cf49539efC04f734606ee4", + "controllerSlot": "MerkleSnapshot", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x10736fface687658f88a46d042631d182c7757f7", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "legacy_operational": [], + "historical": [ + { + "id": "core.BondingManager.historicalSeries.4", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V4", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V5", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.7", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V7", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V8", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.3", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V3", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V4", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.5", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V5", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V6", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.12", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V12", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.8", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V8", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V9", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.9", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V9", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V10", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.6", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V6", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V7", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.2", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V3", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.10", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V10", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V11", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.1", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.BondingManager.historicalSeries.11", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V11", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V12", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingManager", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:BondingManager" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.Minter.historicalSeries.1", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "Minter", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:Minter" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.1", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Replaced by V2", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "core.TicketBroker.historicalSeries.2", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V2", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "TicketBroker", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "core:TicketBroker" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "governance.BondingVotes.historicalSeries.1", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "BondingVotes", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "governance:BondingVotes" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "migration.L2Migrator.historicalSeries.1", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "proofChain": "historical-series", + "version": "V1", + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "L2Migrator", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "migration:L2Migrator" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "historicalSeries": { + "core": [ + { + "category": "core", + "name": "AIServiceRegistry", + "canonicalName": "AIServiceRegistry", + "entries": [] + }, + { + "category": "core", + "name": "BondingManager", + "canonicalName": "BondingManager", + "entries": [ + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "isCurrent": false, + "status": "Replaced by V2", + "replacedBy": "V2" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "isCurrent": false, + "status": "Replaced by V3", + "replacedBy": "V3" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "version": "V3", + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "isCurrent": false, + "status": "Replaced by V4", + "replacedBy": "V4" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "version": "V4", + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "isCurrent": false, + "status": "Replaced by V5", + "replacedBy": "V5" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "version": "V5", + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "isCurrent": false, + "status": "Replaced by V6", + "replacedBy": "V6" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "version": "V6", + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "isCurrent": false, + "status": "Replaced by V7", + "replacedBy": "V7" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "version": "V7", + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "isCurrent": false, + "status": "Replaced by V8", + "replacedBy": "V8" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "version": "V8", + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "isCurrent": false, + "status": "Replaced by V9", + "replacedBy": "V9" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "version": "V9", + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "isCurrent": false, + "status": "Replaced by V10", + "replacedBy": "V10" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "version": "V10", + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "isCurrent": false, + "status": "Replaced by V11", + "replacedBy": "V11" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "version": "V11", + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "isCurrent": false, + "status": "Replaced by V12", + "replacedBy": "V12" + }, + { + "name": "BondingManager", + "canonicalName": "BondingManager", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "version": "V12", + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "core", + "name": "Controller", + "canonicalName": "Controller", + "entries": [] + }, + { + "category": "core", + "name": "Minter", + "canonicalName": "Minter", + "entries": [ + { + "name": "Minter", + "canonicalName": "Minter", + "category": "core", + "chain": "arbitrumOne", + "type": "standalone", + "deploymentKind": "standalone", + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "core", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "entries": [] + }, + { + "category": "core", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "entries": [] + }, + { + "category": "core", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "entries": [ + { + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "isCurrent": false, + "status": "Replaced by V2", + "replacedBy": "V2" + }, + { + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "category": "core", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + } + ], + "governance": [ + { + "category": "governance", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "entries": [ + { + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "category": "governance", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "governance", + "name": "Governor", + "canonicalName": "Governor", + "entries": [] + }, + { + "category": "governance", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "entries": [] + }, + { + "category": "governance", + "name": "Treasury", + "canonicalName": "Treasury", + "entries": [] + } + ], + "migration": [ + { + "category": "migration", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "entries": [ + { + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "category": "migration", + "chain": "arbitrumOne", + "type": "target", + "deploymentKind": "target", + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + }, + { + "category": "migration", + "name": "MerkleSnapshot", + "canonicalName": "MerkleSnapshot", + "entries": [] + } + ], + "bridge": [ + { + "category": "bridge", + "name": "L2LPTDataCache", + "canonicalName": "L2LPTDataCache", + "entries": [] + }, + { + "category": "bridge", + "name": "L2LPTGateway", + "canonicalName": "L2LPTGateway", + "entries": [] + } + ], + "token": [ + { + "category": "token", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "entries": [] + } + ] + }, + "currentImplementations": [ + { + "id": "arbitrumOne.bondingManager.implementation", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V13", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V13", + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "proxyTarget": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x35bcf3c30594191d53231e4ff333e8a770453e40", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "implementationName": "BondingManager", + "implementationVersion": "V13", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.roundsManager.implementation", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "proxyTarget": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x92d804ed49d92438aea6fe552bd9163aacb7e841" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "RoundsManager", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xdd6f56dcc28d3f5f27084381fe8df634985cc39f", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "implementationName": "RoundsManager", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x92d804ed49d92438aea6fe552bd9163aacb7e841", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.serviceRegistry.implementation", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "blockchainHref": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x38093cdca43aecd7bb474983519a246e93a3b0a7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "ServiceRegistry", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xc92d3a360b8f9e083ba64de15d95cf8180897431", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "implementationName": "ServiceRegistry", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.ticketBroker.implementation", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "type": "target", + "deploymentKind": "target", + "category": "core", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "proxyTarget": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xea1b0f6c8d158328a6e3d3f924b86a759f41465c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "TicketBroker", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xa8bb618b1520e284046f3dfc448851a1ff26e41b", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "implementationName": "TicketBroker", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0xea1b0f6c8d158328a6e3d3f924b86a759f41465c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.bondingVotes.implementation", + "name": "BondingVotes", + "canonicalName": "BondingVotes", + "address": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": "V2", + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "blockchainHref": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x2a1b465fbcae519904f0fb11f93e73dfbeb47ec54530ec444279610af8cf06b2", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "BondingVotes", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": "V2", + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "proxyTarget": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/bonding/BondingVotes.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/bonding/BondingVotes.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "BondingVotes", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x0b9c254837e72ebe9fe04960c43b69782e68169a", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "implementationName": "BondingVotes", + "implementationVersion": "V2", + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.livepeerGovernor.implementation", + "name": "LivepeerGovernor", + "canonicalName": "LivepeerGovernor", + "address": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "type": "target", + "deploymentKind": "target", + "category": "governance", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@6e6b452", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "blockchainHref": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0xaea11c65571dd8b6188d3a5cf5e5d3d4695845e6f217cad0b453b4e276c6cdcd", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "LivepeerGovernor", + "controllerResolvedAddress": null, + "governorKey": "livepeerGovernorTarget", + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "proxyTarget": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "proxyImplementationSource": "governor-manifest", + "expectedProxyImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedProxyImplementationSource": "governor-manifest", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "livepeerGovernorTarget" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "delta", + "path": "contracts/treasury/LivepeerGovernor.sol", + "href": "https://github.com/livepeer/protocol/blob/6e6b452/contracts/treasury/LivepeerGovernor.sol", + "isPrivate": false, + "resolvedCommit": "6e6b452", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0xd2Ce37BCB287CaDc40647f567C2D3C4220901634" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "LivepeerGovernor", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0xcfe4e2879b786c3aa075813f0e364bb5accb6aa0", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "implementationName": "LivepeerGovernor", + "implementationVersion": null, + "implementationSource": "governor-manifest", + "expectedImplementationAddress": "0xd2Ce37BCB287CaDc40647f567C2D3C4220901634", + "expectedImplementationSource": "governor-manifest", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "arbitrumOne.l2Migrator.implementation", + "name": "L2Migrator", + "canonicalName": "L2Migrator", + "address": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "type": "target", + "deploymentKind": "target", + "category": "migration", + "lifecycle": "historical", + "chain": "arbitrumOne", + "version": null, + "addressAuthority": "proxy-runtime-controller", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "blockchainHref": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c", + "hasBytecode": true, + "sourceVerified": null, + "verified": null, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:02:18.653Z", + "isHistorical": true, + "meta": { + "statusLabel": "Implementation target", + "notes": "Implementation behind the published proxy address.", + "keccakHash": "0x74b6d21e0d4650f622c903126d418c1a52bcc99ea7acb0db0809fc0eeae6c7c3", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": "L2Migrator", + "controllerResolvedAddress": null, + "governorKey": null, + "currentImplementation": true, + "currentImplementationVersion": null, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "proxyTarget": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "proxyImplementationSource": "proxy-runtime-controller", + "expectedProxyImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedProxyImplementationSource": "proxy-runtime-controller", + "proxyImplementationMatchesExpected": true, + "repoIsPrivate": false, + "controllerRegistered": null + }, + "addressSource": { + "kind": "proxy-runtime-controller", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": null + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L2/gateway/L2Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L2/gateway/L2Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:02:18.653Z", + "explorer": { + "family": "etherscan", + "host": "arbiscan.io", + "addressBaseUrl": "https://arbiscan.io/address/", + "addressUrl": "https://arbiscan.io/address/0x93bb030735747708b4d33093a98d4c804cd6b58c" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": "L2Migrator", + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x148d5b6b4df9530c7c76a810bd1cdf69ec4c2085", + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "implementationName": "L2Migrator", + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": "0x93bb030735747708b4d33093a98d4c804cd6b58c", + "expectedImplementationSource": "proxy-runtime-controller", + "implementationMatchesExpected": true, + "controllerCurrentProxyMatches": null + } + } + } + ] + }, + "ethereumMainnet": { + "inventory": [ + { + "id": "ethereumMainnet.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "blockchainHref": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x58b6a8a3302369daec383334672404ee733ab239", + "type": "standalone", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.bridgeMinter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "address": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x2d6c985061f27c6c02785799a715099670620c5dfed3f3ecfc6ab406e3e5a343", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "bridgeMinter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTGateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/mainnet/L1Escrow.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Escrow", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1LPTDataCache", + "name": "L1LPTDataCache", + "canonicalName": "L1LPTDataCache", + "address": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "blockchainHref": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x49b03ce75a9e4ad81079c9677a5caac20548a2407ee6cae472e3c47548b37445", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.genesisManager", + "name": "GenesisManager", + "canonicalName": "GenesisManager", + "address": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xae790d27d0e1d3e6bbd97ff692b457d4c526ea8c8fafd0cbd395567a2ebbf182", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "GenesisManager", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/GenesisManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.merkleMine", + "name": "MerkleMine", + "canonicalName": "MerkleMine", + "address": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "blockchainHref": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x17b6becfe8dae798aba9441d55041b5cc410570c1d4330fd6ad71b5c21ce4f94", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleMine", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/MerkleMine.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.multiMerkleMine", + "name": "MultiMerkleMine", + "canonicalName": "MultiMerkleMine", + "address": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": "Legacy utility contract preserved through direct explorer verification of the published seed address.", + "keccakHash": "0xeab338ace3157e6cc2478b0ca6c2bf1dd8991ff5e15bac587ae2bc250362dae9", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MultiMerkleMine", + "sourceResolvedCommit": null, + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.refunder", + "name": "Refunder", + "canonicalName": "Refunder", + "address": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "blockchainHref": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x792b8bc44b1b160cb25ea702539f6fdf7df4775be134bad718a7290c9340e510", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Refunder", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "848888801326164832", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/refund/Refunder.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.sortedDoublyLL", + "name": "SortedDoublyLL", + "canonicalName": "SortedDoublyLL", + "address": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "blockchainHref": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xf32422ac790bd816e1e02dc866df27d6d55047c1dc08def99809859734b7ab2c", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "SortedDoublyLL", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/libraries/SortedDoublyLL.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + }, + { + "id": "ethereumMainnet.l1Migrator", + "name": "L1Migrator", + "canonicalName": "L1Migrator", + "address": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "blockchainHref": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z" + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x90edd673ce561432d8b3317a5e6cd5e3a9bcf30c121147d0ff66db9271de9877", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, + "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Migrator", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, + "bsVerified": true, + "isContract": true, + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } }, { - "name": "RoundsManager", - "address": "0x92d804Ed49D92438aEA6fe552BD9163aacb7E841", - "type": "target", + "id": "ethereumMainnet.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "type": "proxy", + "deploymentKind": "proxy", "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "RoundsManager", + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "12 Feb 2022", - "deployedAtISO": "2022-02-11T13:25:10.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "12 Feb 2022", - "lastActiveDateISO": "2022-02-11T13:25:10.000Z", - "compilerVersion": "v0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Dec 2025", - "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", - "transactionsRecent": 0 + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } } }, { - "name": "ServiceRegistry", - "address": "0xC92d3A360b8f9e083bA64DE15d95Cf8180897431", + "id": "ethereumMainnet.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", "type": "proxy", + "deploymentKind": "proxy", "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "ManagerProxy", + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "12 Feb 2022", - "deployedAtISO": "2022-02-11T14:50:03.000Z", - "transactionCount": 616, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "27 Mar 2026", - "lastActiveDateISO": "2026-03-27T04:23:33.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "15 May 2025", - "proxyTarget": "0x38093cdca43aecd7bb474983519a246e93a3b0a7", - "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", - "registeredInController": true, - "transactionsRecent": 0 + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } } }, { - "name": "ServiceRegistry", - "address": "0x38093CDca43aeCd7bb474983519A246e93A3b0a7", - "type": "target", + "id": "ethereumMainnet.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "type": "proxy", + "deploymentKind": "proxy", "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "ServiceRegistry", + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "12 Feb 2022", - "deployedAtISO": "2022-02-11T13:25:54.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "12 Feb 2022", - "lastActiveDateISO": "2022-02-11T13:25:54.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Dec 2025", - "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", - "transactionsRecent": 0 + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } } }, { - "name": "TicketBroker", - "address": "0xa8bB618B1520E284046F3dFc448851A1Ff26e41B", + "id": "ethereumMainnet.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x406a112f3218b988c66778fd72fc8467f2601366", "type": "proxy", + "deploymentKind": "proxy", "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "blockchainHref": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:56:53.009Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "ManagerProxy", + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "12 Feb 2022", - "deployedAtISO": "2022-02-11T13:24:06.000Z", - "transactionCount": 286976, - "tokenTransferCount": 12, - "validationsCount": 0, - "lastActiveDate": "31 Mar 2026", - "lastActiveDateISO": "2026-03-30T15:04:00.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "16 Dec 2024", - "proxyTarget": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", - "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", - "registeredInController": true, - "transactionsRecent": 95 + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + }, + { + "id": "genesis.MerkleProof.historicalSeries.1", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "genesis", + "lifecycle": "historical", + "chain": "ethereumMainnet", + "proofChain": "historical-series", + "version": null, + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "MerkleProof", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "genesis:MerkleProof" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } } ], - "historical": { - "BondingManager (Target)": { - "entries": [ - { - "version": "V1", - "address": "0xe479B9fbA2Cd65f822f451fC8C145c663B995CE6", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0xe479B9fbA2Cd65f822f451fC8C145c663B995CE6", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "12 Feb 2022", - "replacedBy": "V2" - }, - { - "version": "V2", - "address": "0xC40df4db2f99e7e235780A93B192F1a934f0c45b", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0xC40df4db2f99e7e235780A93B192F1a934f0c45b", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "24 Feb 2022", - "replacedBy": "V3" - }, - { - "version": "V3", - "address": "0x3757DB506ECd9CBE643660C0F5b70db5b321202C", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0x3757DB506ECd9CBE643660C0F5b70db5b321202C", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "26 Feb 2022", - "replacedBy": "V4" - }, - { - "version": "V4", - "address": "0x0f9C425E7374602C20370d3fd263155B4c3bDc91", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0x0f9C425E7374602C20370d3fd263155B4c3bDc91", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "17 Mar 2022", - "replacedBy": "V5" - }, - { - "version": "V5", - "address": "0x3a941e1094B9E33efABB26a9047a8ABb4b257907", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0x3a941e1094B9E33efABB26a9047a8ABb4b257907", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "25 Aug 2022", - "replacedBy": "V6" - }, - { - "version": "V6", - "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", - "creatorAddress": "0xd94387c220385bFE4bf599d95E199f3823Da593F", - "deployedAt": "7 Jul 2023", - "replacedBy": "V7" - }, - { - "version": "V7", - "address": "0x363cdB9BaE210Ef182c60b5a496139E980330127", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0x363cdB9BaE210Ef182c60b5a496139E980330127", - "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", - "deployedAt": "12 Oct 2023", - "replacedBy": "V8" - }, - { - "version": "V8", - "address": "0x557093B1Ab53412166beAd939f34244170b6525B", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0x557093B1Ab53412166beAd939f34244170b6525B", - "creatorAddress": "0xd94387c220385bFE4bf599d95E199f3823Da593F", - "deployedAt": "2 Nov 2023", - "replacedBy": "V9" - }, - { - "version": "V9", - "address": "0x6b397f20DC227B4E23fEc20BBDBe166d0DFFC452", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://arbiscan.io/address/0x6b397f20DC227B4E23fEc20BBDBe166d0DFFC452", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0xBB1D39b4997210208b41E88436e881Cce7160562", - "deployedAt": "26 Mar 2024", - "replacedBy": "V10" - }, - { - "version": "V10", - "address": "0xd1C1F5d44D8F83ca2A05Baf40461e550cFDDecA2", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0xd1C1F5d44D8F83ca2A05Baf40461e550cFDDecA2", - "creatorAddress": "0xeF5f4D2A90E9a6FDdeF903ce7C54A1D294431381", - "deployedAt": "26 Oct 2024", - "replacedBy": "V11" - }, - { - "version": "V11", - "address": "0xF62C30242fccd3a46721f155d4d367De3fD5B3b3", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0xF62C30242fccd3a46721f155d4d367De3fD5B3b3", - "creatorAddress": "0x9B4330188AeD73cE40c860469cBb7770995854A1", - "deployedAt": "23 Aug 2025", - "replacedBy": "V12" - }, - { - "version": "V12", - "address": "0x4bA7E7531Ab56bC8d78dB4FDc88D21F621f34BB4", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://arbiscan.io/address/0x4bA7E7531Ab56bC8d78dB4FDc88D21F621f34BB4", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0x9dF71aad3d07334793C0E46DC107F2F69F2d8856", - "deployedAt": "17 Feb 2026", - "replacedBy": "V13" - }, - { - "version": "V13", - "address": "0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0xdA6fe3f332Ae11539b3cF777284Ae70fd3bF2D74", - "creatorAddress": "0xE499a4122bd93283431591A758cf59A921919D90", - "deployedAt": "18 Mar 2026", - "replacedBy": "current" - } - ] - }, - "TicketBroker (Target)": { - "entries": [ - { - "version": "V1", - "address": "0x7Beb84c52ce96DFd90431FAA97378994a8baa6df", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0x7Beb84c52ce96DFd90431FAA97378994a8baa6df", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "12 Feb 2022", - "replacedBy": "V2" - }, - { - "version": "V2", - "address": "0xD906D192e2503Aafd1BC5F5fc4163E842D5B1d6e", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://arbiscan.io/address/0xD906D192e2503Aafd1BC5F5fc4163E842D5B1d6e", - "blockscoutLabel": "TicketBroker", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "4 Mar 2022", - "replacedBy": "V3" - }, - { - "version": "V3", - "address": "0xea1b0F6c8D158328a6e3D3F924B86A759F41465c", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://arbiscan.io/address/0xea1b0F6c8D158328a6e3D3F924B86A759F41465c", - "blockscoutLabel": "TicketBroker", - "creatorAddress": "0xd94387c220385bFE4bf599d95E199f3823Da593F", - "deployedAt": "7 Sept 2023", - "replacedBy": "current" - } - ] - }, - "BondingVotes (Target)": { - "entries": [ - { - "version": "V1", - "address": "0x1561fC5F7Efc049476224005DFf38256dccfc509", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://arbiscan.io/address/0x1561fC5F7Efc049476224005DFf38256dccfc509", - "blockscoutLabel": "BondingVotes", - "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", - "deployedAt": "12 Oct 2023", - "replacedBy": "V2" - }, - { - "version": "V2", - "address": "0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://arbiscan.io/address/0x68AF80376Bc1CA0C25a83b28e5570E8c7bdD3119", - "blockscoutLabel": "BondingVotes", - "creatorAddress": "0x74B5BA17b2Fee90FDae8f252D3E7998022069Ba0", - "deployedAt": "14 Oct 2023", - "replacedBy": "current" - } - ] - }, - "Minter": { - "entries": [ - { - "version": "V1", - "address": "0x4969dcCF5186e1c49411638fc8A2a020Fdab752E", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://arbiscan.io/address/0x4969dcCF5186e1c49411638fc8A2a020Fdab752E", - "blockscoutLabel": "Minter", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "12 Feb 2022", - "replacedBy": "current" - } - ] - }, - "L2Migrator (Target)": { - "entries": [ - { - "version": "V1", - "address": "0x4F59b39e2ea628fe8371BDfd51B063319339c7EE", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://arbiscan.io/address/0x4F59b39e2ea628fe8371BDfd51B063319339c7EE", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "12 Feb 2022", - "replacedBy": "current" - } - ] - } - } - }, - "ethereumMainnet": { "current": [ { + "id": "ethereumMainnet.bridgeMinter", "name": "BridgeMinter", + "canonicalName": "BridgeMinter", "address": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", "type": "standalone", - "category": "token", - "isHistorical": false, + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", "chain": "ethereumMainnet", - "repoSrc": "livepeer/protocol@streamflow", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/streamflow/contracts/token/BridgeMinter.sol", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, "notes": null, - "holderCount": null, - "transactionCount": 0, - "deployedAt": "12 Feb 2022", - "lastActiveDate": "12 Feb 2022", - "blockscoutLabel": "BridgeMinter", - "registeredInController": false, - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "bsVerified": true, - "isContract": true, - "balance": "0", - "deployedAtISO": "2022-02-11T16:35:46.000Z", - "tokenTransferCount": 3, - "validationsCount": 0, - "lastActiveDateISO": "2022-02-11T16:35:46.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "21 Jan 2026", "keccakHash": "0x2d6c985061f27c6c02785799a715099670620c5dfed3f3ecfc6ab406e3e5a343", - "repoIsPrivate": false, - "transactionsRecent": 0 - }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z" - }, - { - "name": "LivepeerToken", - "address": "0x58b6a8a3302369daec383334672404ee733ab239", - "type": "standalone", - "category": "token", - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", - "meta": { - "blockscoutLabel": "Livepeer", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "bsVerified": true, - "isContract": true, - "balance": "0", - "deployedAt": "1 May 2018", - "deployedAtISO": "2018-04-30T20:03:51.000Z", - "transactionCount": 1010457, - "tokenTransferCount": 713148, - "validationsCount": 0, - "holderCount": "1,887,473", - "totalSupply": "24918514377941353891894504", - "decimals": "18", - "symbol": "LPT", - "lastActiveDate": "31 Mar 2026", - "lastActiveDateISO": "2026-03-30T15:01:23.000Z", - "compilerVersion": "v0.4.18+commit.9cf6e910", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "19 Apr 2019", - "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "not_applicable", "registeredInController": false, - "transactionsRecent": 37 - } - }, - { - "name": "Governor", - "address": "0xFC3CBed6A3476F7616CC70f078397700136eEBFd", - "type": "standalone", - "category": "governance", - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", - "meta": { - "blockscoutLabel": "Governor", + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "bridgeMinter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "4 Dec 2020", - "deployedAtISO": "2020-12-03T20:14:47.000Z", - "transactionCount": 15, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "15 Feb 2022", - "lastActiveDateISO": "2022-02-15T00:08:04.000Z", - "compilerVersion": "0.5.11+commit.c082d0b4", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Mar 2026", - "keccakHash": "0xd0990c50b6714f222e6fd1faaf5345bf1aa2867d2861fc2cc43b364e7d948647", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "MerkleSnapshot", - "address": "0x24ebEd82c681f435E944BEEbFAEEAaE443D08438", + "id": "ethereumMainnet.l1Escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", "type": "standalone", - "category": "governance", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "MerkleSnapshot", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "bsVerified": true, - "isContract": true, - "balance": "0", - "deployedAt": "2 Oct 2020", - "deployedAtISO": "2020-10-01T21:30:12.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "2 Oct 2020", - "lastActiveDateISO": "2020-10-01T21:30:12.000Z", - "compilerVersion": "0.5.11+commit.c082d0b4", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Mar 2026", - "keccakHash": "0xb6138afe6f306a47bdf645c5aebcb9781efe787d221a1880e62d1f76dae58b84", + "statusLabel": "Active", + "notes": null, + "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", + "registrationState": "not_applicable", "registeredInController": false, - "transactionsRecent": 0 - } - }, - { - "name": "PollCreator", - "address": "0xBf824EDb6b94D9B52d972d5B25bCc19b4e6E3F3C", - "type": "standalone", - "category": "governance", - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", - "meta": { - "blockscoutLabel": "PollCreator", + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/mainnet/L1Escrow.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Escrow", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "11 May 2020", - "deployedAtISO": "2020-05-10T17:47:10.000Z", - "transactionCount": 6, - "tokenTransferCount": 5, - "validationsCount": 0, - "lastActiveDate": "2 Feb 2022", - "lastActiveDateISO": "2022-02-01T20:59:46.000Z", - "compilerVersion": "0.5.11+commit.c082d0b4", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "8 Aug 2024", - "keccakHash": "0x0343f01276c9038f8c7154dcdf7873ad6edd872ce0e719ebd989c051b4b1039b", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "L1Escrow", - "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "id": "ethereumMainnet.l1LPTGateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", "type": "standalone", + "deploymentKind": "standalone", "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "L1Escrow", + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "14 Feb 2022", - "deployedAtISO": "2022-02-13T18:31:30.000Z", - "transactionCount": 3, - "tokenTransferCount": 8067, - "validationsCount": 0, - "lastActiveDate": "14 Feb 2022", - "lastActiveDateISO": "2022-02-13T18:59:52.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "8 Aug 2024", - "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "L1LPTDataCache", - "address": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "id": "ethereumMainnet.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x58b6a8a3302369daec383334672404ee733ab239", "type": "standalone", - "category": "bridge", - "isHistorical": false, + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", "chain": "ethereumMainnet", - "repoSrc": "livepeer/arbitrum-lpt-bridge@main", - "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L1/L1LPTDataCache.sol", - "blockchainHref": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, "notes": null, - "holderCount": null, - "transactionCount": 3, - "deployedAt": "14 Feb 2022", - "lastActiveDate": "1 Dec 2022", - "blockscoutLabel": "L1LPTDataCache", - "registeredInController": false, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2022-02-13T18:38:09.000Z", - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDateISO": "2022-12-01T09:00:47.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "21 Jan 2026", - "keccakHash": "0x49b03ce75a9e4ad81079c9677a5caac20548a2407ee6cae472e3c47548b37445", - "repoIsPrivate": false, - "transactionsRecent": 0 + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z" - }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "active": [ { - "name": "L1LPTGateway", - "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "id": "ethereumMainnet.bridgeMinter", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "address": "0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", "type": "standalone", + "deploymentKind": "standalone", "category": "bridge", - "isHistorical": false, + "lifecycle": "active", "chain": "ethereumMainnet", - "repoSrc": "livepeer/arbitrum-lpt-bridge@main", - "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L1/gateway/L1LPTGateway.sol", - "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { "statusLabel": "Active", - "deployedBy": null, "notes": null, - "holderCount": null, - "transactionCount": 12, - "deployedAt": "14 Feb 2022", - "lastActiveDate": "6 Jul 2024", - "blockscoutLabel": "L1LPTGateway", + "keccakHash": "0x2d6c985061f27c6c02785799a715099670620c5dfed3f3ecfc6ab406e3e5a343", + "registrationState": "not_applicable", "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "bridgeMinter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2022-02-13T18:41:42.000Z", - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDateISO": "2024-07-06T12:57:23.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "20 Nov 2023", - "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", - "repoIsPrivate": false, - "transactionsRecent": 0 + "controllerRegistered": null }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z" + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "bridgeMinter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/token/BridgeMinter.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/token/BridgeMinter.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dDDB96CF36AC8860f1DE5C7c4698fd499FAB405" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } }, { - "name": "L1Migrator", - "address": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "id": "ethereumMainnet.l1Escrow", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "address": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", "type": "standalone", + "deploymentKind": "standalone", "category": "bridge", - "isHistorical": false, + "lifecycle": "active", "chain": "ethereumMainnet", - "repoSrc": "livepeer/protocol@delta", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/delta/contracts/L1/L1Migrator.sol", - "blockchainHref": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "proofChain": "bridge", + "version": null, + "addressAuthority": "deployment-artifact", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "blockchainHref": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "statusLabel": "Migration complete", - "deployedBy": null, + "statusLabel": "Active", "notes": null, - "holderCount": null, - "transactionCount": 146, - "deployedAt": "14 Feb 2022", - "lastActiveDate": "17 Dec 2025", - "blockscoutLabel": "L1Migrator", + "keccakHash": "0xfa1544fc7670a7dc4f4cc1a370c200b4fbc8979ad91d6d6f5da57b2e1385dbe7", + "registrationState": "not_applicable", "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "deployments/mainnet/L1Escrow.json", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Escrow", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2022-02-13T18:46:13.000Z", - "tokenTransferCount": 3, - "validationsCount": 0, - "lastActiveDateISO": "2025-12-17T00:35:59.000Z", - "compilerVersion": "0.8.9+commit.e5eed63a", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "8 Aug 2024", - "keccakHash": "0x90edd673ce561432d8b3317a5e6cd5e3a9bcf30c121147d0ff66db9271de9877", - "repoIsPrivate": false, - "transactionsRecent": 0 + "controllerRegistered": null }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z" + "addressSource": { + "kind": "deployment-artifact", + "repo": "livepeer/arbitrum-lpt-bridge", + "path": "deployments/mainnet/L1Escrow.json", + "refMode": "resolved-commit", + "resolvedCommit": "603314d", + "key": "deployments/mainnet/L1Escrow.json" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/escrow/L1Escrow.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/escrow/L1Escrow.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6A23F4940BD5BA117Da261f98aae51A8BFfa210A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Escrow.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } }, { - "name": "GenesisManager", - "address": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "id": "ethereumMainnet.l1LPTGateway", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "address": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", "type": "standalone", - "category": "utility", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "blockchainHref": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "GenesisManager", + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x38e6db29492987f8570616a7316b6510b0ede86826613c8f4165b4586e4dad92", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTGateway", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTGateway", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "1 May 2018", - "deployedAtISO": "2018-04-30T20:52:05.000Z", - "transactionCount": 50, - "tokenTransferCount": 50, - "validationsCount": 0, - "lastActiveDate": "1 May 2018", - "lastActiveDateISO": "2018-04-30T21:43:57.000Z", - "compilerVersion": "0.4.18+commit.9cf6e910", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "27 Sept 2025", - "keccakHash": "0xae790d27d0e1d3e6bbd97ff692b457d4c526ea8c8fafd0cbd395567a2ebbf182", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTGateway" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTGateway.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTGateway.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x6142f1C8bBF02E6A6bd074E8d564c9A5420a0676", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTGateway.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "MerkleMine", - "address": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "id": "ethereumMainnet.livepeerToken", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "address": "0x58b6a8a3302369daec383334672404ee733ab239", "type": "standalone", - "category": "utility", + "deploymentKind": "standalone", + "category": "token", + "lifecycle": "active", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "blockchainHref": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "MerkleMine", + "statusLabel": "Active", + "notes": null, + "keccakHash": "0x3443e257065fe41dd0e4d1f5a1b73a22a62e300962b57f30cddf41d0f8273ba7", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "LivepeerToken", + "controllerResolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "governorKey": "LivepeerToken", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Livepeer", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "1 May 2018", - "deployedAtISO": "2018-04-30T20:47:32.000Z", - "transactionCount": 43215, - "tokenTransferCount": 5195651, - "validationsCount": 0, - "lastActiveDate": "23 Jul 2023", - "lastActiveDateISO": "2023-07-23T02:37:59.000Z", - "compilerVersion": "0.4.18+commit.9cf6e910", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "16 May 2024", - "keccakHash": "0x17b6becfe8dae798aba9441d55041b5cc410570c1d4330fd6ad71b5c21ce4f94", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "LivepeerToken" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/LivepeerToken.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/LivepeerToken.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "LivepeerToken", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x58b6a8a3302369daec383334672404ee733ab239", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } - }, + } + ], + "paused": [ { - "name": "MultiMerkleMine", - "address": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", - "type": "standalone", - "category": "utility", + "id": "ethereumMainnet.bondingManager", + "name": "BondingManager", + "canonicalName": "BondingManager", + "address": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "type": "proxy", + "deploymentKind": "proxy", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "blockchainHref": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "MultiMerkleMine", + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "BondingManager", + "controllerResolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "governorKey": "BondingManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "27 Jul 2018", - "deployedAtISO": "2018-07-26T15:00:03.000Z", - "transactionCount": 184120, - "tokenTransferCount": 2022683, - "validationsCount": 0, - "lastActiveDate": "17 Mar 2019", - "lastActiveDateISO": "2019-03-17T00:51:34.000Z", - "compilerVersion": "0.4.24+commit.e67f0147", - "optimizationEnabled": false, - "language": "solidity", - "sourceVerifiedAt": "17 Aug 2024", - "keccakHash": "0xeab338ace3157e6cc2478b0ca6c2bf1dd8991ff5e15bac587ae2bc250362dae9", - "registeredInController": false, - "transactionsRecent": 0 + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "proxyTargetContractName": "BondingManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "BondingManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/bonding/BondingManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/bonding/BondingManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x511bc4556d823ae99630ae8de28b9b80df90ea2e" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "BondingManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xfc6f6f33d2bb065ac61cbdd4dbe4b7adf6f3e7e6c6a3d1fe297cbf9a187092e4", + "targetContractName": "BondingManagerTarget", + "implementationAddress": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } } }, { - "name": "Refunder", - "address": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "id": "ethereumMainnet.controller", + "name": "Controller", + "canonicalName": "Controller", + "address": "0xf96d54e490317c557a967abfa5d6e33006be69b3", "type": "standalone", - "category": "utility", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "blockchainHref": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "Refunder", + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "Controller", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Controller", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, - "balance": "848888801326164832", - "deployedAt": "14 Jan 2020", - "deployedAtISO": "2020-01-13T18:58:50.000Z", - "transactionCount": 1, - "tokenTransferCount": 5, - "validationsCount": 0, - "lastActiveDate": "14 Jan 2020", - "lastActiveDateISO": "2020-01-13T20:32:36.000Z", - "compilerVersion": "0.5.11+commit.c082d0b4", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Mar 2026", - "keccakHash": "0x792b8bc44b1b160cb25ea702539f6fdf7df4775be134bad718a7290c9340e510", - "registeredInController": false, - "transactionsRecent": 0 + "balance": "0", + "controllerRegistered": null + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-root", + "resolvedCommit": null, + "key": "Controller" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/Controller.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/Controller.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "SortedDoublyLL", - "address": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "id": "ethereumMainnet.minter", + "name": "Minter", + "canonicalName": "Minter", + "address": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", "type": "standalone", - "category": "utility", + "deploymentKind": "standalone", + "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "blockchainHref": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "SortedDoublyLL", + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "Minter", + "controllerResolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "governorKey": "Minter", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "BridgeMinter", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "1 May 2018", - "deployedAtISO": "2018-04-30T16:10:21.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "1 May 2018", - "lastActiveDateISO": "2018-04-30T16:10:21.000Z", - "compilerVersion": "0.4.18+commit.9cf6e910", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "5 Apr 2025", - "keccakHash": "0xf32422ac790bd816e1e02dc866df27d6d55047c1dc08def99809859734b7ab2c", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "Minter" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/Minter.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/Minter.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8dddb96cf36ac8860f1de5c7c4698fd499fab405" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "Minter", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x8dddb96cf36ac8860f1de5c7c4698fd499fab405", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "BondingManager", - "address": "0x511bc4556d823ae99630ae8de28b9b80df90ea2e", + "id": "ethereumMainnet.roundsManager", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "address": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", "type": "proxy", + "deploymentKind": "proxy", "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "ManagerProxy", + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "RoundsManager", + "controllerResolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "governorKey": "RoundsManager", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "1 May 2018", - "deployedAtISO": "2018-04-30T20:14:49.000Z", - "transactionCount": 90783, - "tokenTransferCount": 25, - "validationsCount": 0, - "lastActiveDate": "6 Feb 2025", - "lastActiveDateISO": "2025-02-05T23:22:11.000Z", - "compilerVersion": "v0.4.18+commit.9cf6e910", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "20 Aug 2019", - "proxyTarget": "0x5fe3565db7f1dd8d6a9e968d45bd2aee3836a1d4", - "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", - "registeredInController": false, - "transactionsRecent": 0 + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "proxyTargetContractName": "RoundsManagerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "RoundsManager" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/rounds/RoundsManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/rounds/RoundsManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3984fc4ceeef1739135476f625d36d6c35c40dc3" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "RoundsManager", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0x56f65aba3e3e5b6d5adbc6cdc14c51957893b21d4a6a56260af4e03af7e1a51d", + "targetContractName": "RoundsManagerTarget", + "implementationAddress": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } } }, { - "name": "BondingManager", - "address": "0x5FE3565dB7F1Dd8d6A9E968D45BD2Aee3836a1D4", - "type": "target", + "id": "ethereumMainnet.serviceRegistry", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "address": "0x406a112f3218b988c66778fd72fc8467f2601366", + "type": "proxy", + "deploymentKind": "proxy", "category": "core", + "lifecycle": "paused", + "chain": "ethereumMainnet", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "blockchainHref": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "BondingManager", + "statusLabel": "paused", + "notes": null, + "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "ServiceRegistry", + "controllerResolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "governorKey": "ServiceRegistry", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "1 Apr 2021", - "deployedAtISO": "2021-04-01T07:41:45.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "1 Apr 2021", - "lastActiveDateISO": "2021-04-01T07:41:45.000Z", - "compilerVersion": "0.5.11+commit.22be8592", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "17 Jan 2026", - "keccakHash": "0x2517d59a36a86548e38734e8ab416f42afff4bca78706a66ad65750dae7f9e37", - "registeredInController": false, - "transactionsRecent": 0 + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "proxyTargetContractName": "ServiceRegistryTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true + }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "ServiceRegistry" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/ServiceRegistry.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/ServiceRegistry.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x406a112f3218b988c66778fd72fc8467f2601366" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "ServiceRegistry", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x406a112f3218b988c66778fd72fc8467f2601366", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xa65c3dc1a85422ba3e6003be871c3339b882a9c28fc454085d394e4b6436d564", + "targetContractName": "ServiceRegistryTarget", + "implementationAddress": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } } }, { - "name": "Controller", - "address": "0xf96d54e490317c557a967abfa5d6e33006be69b3", - "type": "standalone", + "id": "ethereumMainnet.ticketBroker", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "address": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "type": "proxy", + "deploymentKind": "proxy", "category": "core", - "isHistorical": false, + "lifecycle": "paused", "chain": "ethereumMainnet", - "repoSrc": "livepeer/protocol@master", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/master/contracts/Controller.sol", - "blockchainHref": "https://etherscan.io/address/0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proofChain": "controller", + "version": null, + "addressAuthority": "controller-runtime", + "runtimeAuthority": "controller", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "blockchainHref": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "statusLabel": "Paused", - "deployedBy": "Livepeer Deployer", - "notes": "Paused since Confluence migration (2022)", - "holderCount": null, - "transactionCount": 19, - "deployedAt": "1 May 2018", - "lastActiveDate": "31 Jan 2021", - "blockscoutLabel": "Controller", - "registeredInController": false, + "statusLabel": "paused", + "notes": null, + "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", + "registrationState": "registered", + "registeredInController": true, + "controllerSlot": "TicketBroker", + "controllerResolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "governorKey": "TicketBroker", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "ManagerProxy", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2018-04-30T20:00:49.000Z", - "tokenTransferCount": 3, - "validationsCount": 0, - "lastActiveDateISO": "2021-01-31T02:23:14.000Z", - "compilerVersion": "v0.4.18+commit.9cf6e910", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "25 Apr 2019", - "keccakHash": "0x7c20e2bbcd91c5aaa7898ba022ab8867ac32d84e959c236484db066900aa363a", - "repoIsPrivate": false, - "transactionsRecent": 0 + "proxyControllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "proxyControllerMatchesExpected": true, + "proxyTargetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "proxyTargetContractName": "TicketBrokerTarget", + "proxyImplementationSource": "proxy-runtime-controller", + "controllerRegistered": true }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z" - }, + "addressSource": { + "kind": "controller-runtime", + "repo": null, + "path": null, + "refMode": "onchain-controller", + "resolvedCommit": null, + "key": "TicketBroker" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/pm/TicketBroker.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/pm/TicketBroker.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": true, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2" + }, + "controller": { + "applicable": true, + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerSlot": "TicketBroker", + "registrationState": "registered", + "controllerRegistered": true, + "resolvedAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "currentAddressMatches": true + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": true, + "proxyAddress": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", + "controllerAddress": "0xf96d54e490317c557a967abfa5d6e33006be69b3", + "controllerMatchesExpected": true, + "targetContractId": "0xf16f832ef171c8058cbd4a32de7d27c32a1a1ad90bb091b4b7f376f1d95ee254", + "targetContractName": "TicketBrokerTarget", + "implementationAddress": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", + "implementationName": null, + "implementationVersion": null, + "implementationSource": "proxy-runtime-controller", + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": true + } + } + } + ], + "migration_residual": [ { - "name": "Minter", - "address": "0x505F8c2ee81f1C6fa0D88e918eF0491222E05818", - "type": "standalone", - "category": "core", - "isHistorical": false, + "id": "ethereumMainnet.l1Migrator", + "name": "L1Migrator", + "canonicalName": "L1Migrator", + "address": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "type": "standalone", + "deploymentKind": "standalone", + "category": "migration", + "lifecycle": "migration_residual", "chain": "ethereumMainnet", - "repoSrc": "livepeer/protocol@master", - "contractCodeHref": "https://github.com/livepeer/protocol/blob/master/contracts/token/Minter.sol", - "blockchainHref": "https://etherscan.io/address/0x505F8c2ee81f1C6fa0D88e918eF0491222E05818", - "meta": { - "statusLabel": "Paused", - "deployedBy": null, - "notes": "Paused since Confluence migration (2022)", - "holderCount": null, - "transactionCount": 0, - "deployedAt": "19 Aug 2020", - "lastActiveDate": "19 Aug 2020", - "blockscoutLabel": "Minter", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "blockchainHref": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "hasBytecode": true, + "sourceVerified": true, + "verified": true, + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, + "meta": { + "statusLabel": "migration residual", + "notes": null, + "keccakHash": "0x90edd673ce561432d8b3317a5e6cd5e3a9bcf30c121147d0ff66db9271de9877", + "registrationState": "not_applicable", "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1Migrator", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1Migrator", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAtISO": "2020-08-18T20:22:22.000Z", - "tokenTransferCount": 21661, - "validationsCount": 0, - "lastActiveDateISO": "2020-08-18T20:22:22.000Z", - "compilerVersion": "0.5.11+commit.c082d0b4", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Mar 2026", - "keccakHash": "0x6e58ad548d72b425ea94c15f453bf26caddb061d82b2551db7fdd3cefe0e9940", - "repoIsPrivate": false, - "transactionsRecent": 0 + "controllerRegistered": null }, - "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z" - }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1Migrator" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1Migrator.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1Migrator.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1Migrator.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } + } + ], + "legacy_operational": [ { - "name": "RoundsManager", - "address": "0x3984fc4ceeef1739135476f625d36d6c35c40dc3", - "type": "proxy", - "category": "core", + "id": "ethereumMainnet.l1LPTDataCache", + "name": "L1LPTDataCache", + "canonicalName": "L1LPTDataCache", + "address": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "type": "standalone", + "deploymentKind": "standalone", + "category": "bridge", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "bridge", + "version": null, + "addressAuthority": "governor-manifest", + "runtimeAuthority": "bridge", + "repoSrc": "livepeer/arbitrum-lpt-bridge@603314d", + "contractCodeHref": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "blockchainHref": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "ManagerProxy", + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x49b03ce75a9e4ad81079c9677a5caac20548a2407ee6cae472e3c47548b37445", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "l1LPTDataCache", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "L1LPTDataCache", + "sourceResolvedCommit": "603314d", + "sourceResolutionError": null, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "1 May 2018", - "deployedAtISO": "2018-04-30T20:22:37.000Z", - "transactionCount": 2232, - "tokenTransferCount": 2, - "validationsCount": 0, - "lastActiveDate": "14 Feb 2022", - "lastActiveDateISO": "2022-02-14T12:00:10.000Z", - "compilerVersion": "v0.4.18+commit.9cf6e910", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "20 Aug 2019", - "proxyTarget": "0xc89fe48382f8fda6992dc590786a84275bcd1c57", - "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "governor-manifest", + "repo": "livepeer/governor-scripts", + "path": "updates/addresses.js", + "refMode": "default_branch", + "resolvedCommit": "2cb192a", + "key": "l1LPTDataCache" + }, + "codeSource": { + "repo": "livepeer/arbitrum-lpt-bridge", + "branch": "main", + "path": "contracts/L1/gateway/L1LPTDataCache.sol", + "href": "https://github.com/livepeer/arbitrum-lpt-bridge/blob/603314d/contracts/L1/gateway/L1LPTDataCache.sol", + "isPrivate": false, + "resolvedCommit": "603314d", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "strong", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1d24838b35A9c138Ac157A852e19e948aD6323D7" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": true, + "deploymentArtifactAddress": "0x1d24838b35A9c138Ac157A852e19e948aD6323D7", + "deploymentArtifactRepo": "livepeer/arbitrum-lpt-bridge", + "deploymentArtifactPath": "deployments/mainnet/L1LPTDataCache.json", + "deploymentArtifactResolvedCommit": "603314d", + "deploymentArtifactMatchesAddress": true + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "RoundsManager", - "address": "0xC89fE48382F8fda6992dC590786A84275bCD1C57", - "type": "target", - "category": "core", + "id": "ethereumMainnet.genesisManager", + "name": "GenesisManager", + "canonicalName": "GenesisManager", + "address": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "blockchainHref": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "RoundsManager", + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xae790d27d0e1d3e6bbd97ff692b457d4c526ea8c8fafd0cbd395567a2ebbf182", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "GenesisManager", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "2 Oct 2020", - "deployedAtISO": "2020-10-01T20:47:18.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "2 Oct 2020", - "lastActiveDateISO": "2020-10-01T20:47:18.000Z", - "compilerVersion": "0.5.11+commit.c082d0b4", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Mar 2026", - "keccakHash": "0xe8438ea868df48e3fc21f2f087b993c9b1837dc0f6135064161ce7d7a1701fe8", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/GenesisManager.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/GenesisManager.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x3a9543d4767b2c914ea22fd0b07e17b0901aaebf" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "ServiceRegistry", - "address": "0x406a112f3218b988c66778fd72fc8467f2601366", - "type": "proxy", - "category": "core", + "id": "ethereumMainnet.merkleMine", + "name": "MerkleMine", + "canonicalName": "MerkleMine", + "address": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "blockchainHref": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "ManagerProxy", + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x17b6becfe8dae798aba9441d55041b5cc410570c1d4330fd6ad71b5c21ce4f94", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MerkleMine", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "23 Aug 2018", - "deployedAtISO": "2018-08-22T19:14:22.000Z", - "transactionCount": 700, - "tokenTransferCount": 1, - "validationsCount": 0, - "lastActiveDate": "20 Oct 2022", - "lastActiveDateISO": "2022-10-20T04:05:23.000Z", - "compilerVersion": "v0.4.18+commit.9cf6e910", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "22 Apr 2019", - "proxyTarget": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", - "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/token/MerkleMine.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/token/MerkleMine.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x8e306b005773bee6ba6a6e8972bc79d766cc15c8" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "ServiceRegistry", - "address": "0x72d9dfa25f75a5f2c27b7336e643a559ae6aeb8e", - "type": "target", - "category": "core", + "id": "ethereumMainnet.multiMerkleMine", + "name": "MultiMerkleMine", + "canonicalName": "MultiMerkleMine", + "address": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "ServiceRegistry", + "statusLabel": "legacy operational", + "notes": "Legacy utility contract preserved through direct explorer verification of the published seed address.", + "keccakHash": "0xeab338ace3157e6cc2478b0ca6c2bf1dd8991ff5e15bac587ae2bc250362dae9", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "MultiMerkleMine", + "sourceResolvedCommit": null, + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "23 Aug 2018", - "deployedAtISO": "2018-08-22T19:13:55.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "23 Aug 2018", - "lastActiveDateISO": "2018-08-22T19:13:55.000Z", - "compilerVersion": "0.4.18+commit.9cf6e910", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "18 Sept 2025", - "keccakHash": "0x79c5d2a4a07754f4bacb0ffba18ac516030ee589ebc89db8627680c4d4cdb230", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x182ebf4c80b28efc45ad992ecbb9f730e31e8c7f" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "TicketBroker", - "address": "0x5b1ce829384eebfa30286f12d1e7a695ca45f5d2", - "type": "proxy", - "category": "core", + "id": "ethereumMainnet.refunder", + "name": "Refunder", + "canonicalName": "Refunder", + "address": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@01d4ddb", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "blockchainHref": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "ManagerProxy", + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0x792b8bc44b1b160cb25ea702539f6fdf7df4775be134bad718a7290c9340e510", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "Refunder", + "sourceResolvedCommit": "01d4ddb", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, - "balance": "0", - "deployedAt": "14 Jan 2020", - "deployedAtISO": "2020-01-13T18:58:49.000Z", - "transactionCount": 2212, - "tokenTransferCount": 1, - "validationsCount": 0, - "lastActiveDate": "15 Feb 2022", - "lastActiveDateISO": "2022-02-14T13:27:40.000Z", - "compilerVersion": "0.5.11+commit.c082d0b4", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "8 Aug 2024", - "proxyTarget": "0x6f582e2bb19ac31d4b1e6edd0c2efeabd700f808", - "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", - "registeredInController": false, - "transactionsRecent": 0 + "balance": "848888801326164832", + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "streamflow", + "path": "contracts/refund/Refunder.sol", + "href": "https://github.com/livepeer/protocol/blob/01d4ddb/contracts/refund/Refunder.sol", + "isPrivate": false, + "resolvedCommit": "01d4ddb", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x780c98cbb0cc21d6617c05332bd5cf6f847c71c2" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } }, { - "name": "TicketBroker", - "address": "0x6F582E2bB19ac31D4B1e6eDD0c2eFEabD700f808", - "type": "target", - "category": "core", + "id": "ethereumMainnet.sortedDoublyLL", + "name": "SortedDoublyLL", + "canonicalName": "SortedDoublyLL", + "address": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "type": "standalone", + "deploymentKind": "standalone", + "category": "utility", + "lifecycle": "legacy_operational", + "chain": "ethereumMainnet", + "proofChain": "detached", + "version": null, + "addressAuthority": "verified-seed-address", + "runtimeAuthority": "explorer", + "repoSrc": "livepeer/protocol@cbcdf50", + "contractCodeHref": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "blockchainHref": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "hasBytecode": true, + "sourceVerified": true, "verified": true, - "verifiedAt": "31 Mar 2026", - "verifiedAtISO": "2026-03-30T14:57:18.897Z", + "verifiedAt": "3 Apr 2026", + "verifiedAtISO": "2026-04-03T10:01:16.389Z", + "isHistorical": false, "meta": { - "blockscoutLabel": "TicketBroker", + "statusLabel": "legacy operational", + "notes": null, + "keccakHash": "0xf32422ac790bd816e1e02dc866df27d6d55047c1dc08def99809859734b7ab2c", + "registrationState": "not_applicable", + "registeredInController": false, + "controllerSlot": null, + "controllerResolvedAddress": null, + "governorKey": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "currentImplementation": false, + "currentImplementationVersion": null, + "proxyTarget": null, + "repoIsPrivate": false, "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", + "blockscoutLabel": "SortedDoublyLL", + "sourceResolvedCommit": "cbcdf50", + "sourceResolutionError": null, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null, + "runtimeConsumerRepo": null, + "runtimeConsumerPath": null, + "runtimeConsumerResolvedCommit": null, + "runtimeConsumerExactAddressMatch": null, + "runtimeConsumerRequired": false, "bsVerified": true, "isContract": true, "balance": "0", - "deployedAt": "14 Jan 2020", - "deployedAtISO": "2020-01-13T18:58:36.000Z", - "transactionCount": 0, - "tokenTransferCount": 0, - "validationsCount": 0, - "lastActiveDate": "14 Jan 2020", - "lastActiveDateISO": "2020-01-13T18:58:36.000Z", - "compilerVersion": "0.5.11+commit.c082d0b4", - "optimizationEnabled": true, - "language": "solidity", - "sourceVerifiedAt": "29 Mar 2026", - "keccakHash": "0xbd1aa3e8d2464256d7fd3dcf645c16418d5d8c51d971f1ad7d57e7b1b5eee239", - "registeredInController": false, - "transactionsRecent": 0 + "controllerRegistered": null + }, + "addressSource": { + "kind": "verified-seed-address", + "repo": null, + "path": "/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a", + "refMode": "seed-address", + "resolvedCommit": null, + "key": "0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "codeSource": { + "repo": "livepeer/protocol", + "branch": "master", + "path": "contracts/libraries/SortedDoublyLL.sol", + "href": "https://github.com/livepeer/protocol/blob/cbcdf50/contracts/libraries/SortedDoublyLL.sol", + "isPrivate": false, + "resolvedCommit": "cbcdf50", + "exists": true, + "resolutionError": null + }, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": "2026-04-03T10:01:16.389Z", + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x1a0b2ca69ca2c7f96e2529faa6d63f881655d81a" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": "not_applicable", + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } } } ], - "historical": { - "LivepeerVerifier": { - "entries": [ - { - "version": "V1", - "address": "0xf623811b08b45792d0223d77d9c922dae29712ec", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0xf623811b08b45792d0223d77d9c922dae29712ec", - "blockscoutLabel": "LivepeerVerifier", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "1 May 2018", - "replacedBy": "V2" - }, - { - "version": "V2", - "address": "0xe4be2a35dec0063f9dfccb9b740b1acb7eefefec", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://etherscan.io/address/0xe4be2a35dec0063f9dfccb9b740b1acb7eefefec", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "23 Aug 2018", - "replacedBy": "current" - } - ] - }, - "Minter": { - "entries": [ - { - "version": "V1", - "address": "0x8573f2f5a3bd960eee3d998473e50c75cdbe6828", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0x8573f2f5a3bd960eee3d998473e50c75cdbe6828", - "blockscoutLabel": "Minter", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "1 May 2018", - "replacedBy": "current" - } - ] - }, - "BondingManager (Target)": { - "entries": [ - { - "version": "V1", - "address": "0x81eb0b10ff8703905904e4d91cf6aa575d59736f", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0x81eb0b10ff8703905904e4d91cf6aa575d59736f", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "1 May 2018", - "replacedBy": "V2" - }, - { - "version": "V2", - "address": "0x5A9512826EAAF1FE4190f89443314E95A515fE24", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0x5A9512826EAAF1FE4190f89443314E95A515fE24", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0xb21A62cd0219F72cdee8E9ae7A53708B4DAf02b5", - "deployedAt": "28 May 2018", - "replacedBy": "V3" - }, - { - "version": "V3", - "address": "0x633101b3f15f93c5f415830d48e56b9b1f7ba584", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0x633101b3f15f93c5f415830d48e56b9b1f7ba584", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "23 Aug 2018", - "replacedBy": "V4" - }, - { - "version": "V4", - "address": "0x05C03EA0039f2e828A725A82939fc1e90de38B44", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0x05C03EA0039f2e828A725A82939fc1e90de38B44", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "1 Sept 2018", - "replacedBy": "V5" - }, - { - "version": "V5", - "address": "0xCBAa6eA4886b535FC7ABACe3F3985Ed03b3b80a0", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0xCBAa6eA4886b535FC7ABACe3F3985Ed03b3b80a0", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "3 Oct 2018", - "replacedBy": "V6" - }, - { - "version": "V6", - "address": "0xDC6eE74A18994caD3876a078B6fa4920FD9C507d", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0xDC6eE74A18994caD3876a078B6fa4920FD9C507d", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "14 Jan 2020", - "replacedBy": "V7" - }, - { - "version": "V7", - "address": "0x1a6007d1D0583452Bd6f45a4e1a9190B15Fbd7E3", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://etherscan.io/address/0x1a6007d1D0583452Bd6f45a4e1a9190B15Fbd7E3", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "25 Sept 2020", - "replacedBy": "V8" - }, - { - "version": "V8", - "address": "0xef5E170b679ddaF5e22ADC10fD23DDdB79E3C0c5", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0xef5E170b679ddaF5e22ADC10fD23DDdB79E3C0c5", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "2 Oct 2020", - "replacedBy": "V9" - }, - { - "version": "V9", - "address": "0xc8a695155648F18B0cfd6989498B6f8b2c4cc56A", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0xc8a695155648F18B0cfd6989498B6f8b2c4cc56A", - "blockscoutLabel": "BondingManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "13 Oct 2020", - "replacedBy": "V10" - }, - { - "version": "V10", - "address": "0x35F99F326681FE4F38719491be48Ab4950795013", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://etherscan.io/address/0x35F99F326681FE4F38719491be48Ab4950795013", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "13 Jan 2021", - "replacedBy": "V11" - }, - { - "version": "V11", - "address": "0xAC0153a8C5227e43506901a4f3f83FD000c8178f", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://etherscan.io/address/0xAC0153a8C5227e43506901a4f3f83FD000c8178f", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "29 Jan 2021", - "replacedBy": "V12" - }, - { - "version": "V12", - "address": "0x246edEBae14b186a67e3d466A485321169a8bcD5", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://etherscan.io/address/0x246edEBae14b186a67e3d466A485321169a8bcD5", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "10 Feb 2021", - "replacedBy": "V13" - }, - { - "version": "V13", - "address": "0x223398d0BF9cc24960b3886CC481dBf5276EdeD2", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://etherscan.io/address/0x223398d0BF9cc24960b3886CC481dBf5276EdeD2", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "28 Mar 2021", - "replacedBy": "V14" - }, - { - "version": "V14", - "address": "0x0da7c263eCF5cD3ddba275b9A2D63320E28fD287", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://etherscan.io/address/0x0da7c263eCF5cD3ddba275b9A2D63320E28fD287", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "28 Mar 2021", - "replacedBy": "current" - } - ] - }, - "JobsManager (Proxy)": { - "entries": [ - { - "version": "V1", - "address": "0xbf07ff45f14c9ff0571b9fbdc7e2b62d29931224", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0xbf07ff45f14c9ff0571b9fbdc7e2b62d29931224", - "blockscoutLabel": "ManagerProxy", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "1 May 2018", - "replacedBy": "current" - } - ] - }, - "JobsManager (Target)": { - "entries": [ - { - "version": "V1", - "address": "0x68b463bca7d561118636e9f028ff0f2e8398dd6a", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0x68b463bca7d561118636e9f028ff0f2e8398dd6a", - "blockscoutLabel": "JobsManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "1 May 2018", - "replacedBy": "V2" - }, - { - "version": "V2", - "address": "0xB620c762dd4bC350602936d7401BB8393Ee6687c", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0xB620c762dd4bC350602936d7401BB8393Ee6687c", - "blockscoutLabel": "JobsManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "30 Jul 2019", - "replacedBy": "V3" - }, - { - "version": "V3", - "address": "0x8eade5eec609572bf53deadb88d36f862ddec517", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://etherscan.io/address/0x8eade5eec609572bf53deadb88d36f862ddec517", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "14 Jan 2020", - "replacedBy": "current" - } - ] - }, - "RoundsManager (Target)": { - "entries": [ - { - "version": "V1", - "address": "0xa3aa52ce79e85a21d9ccda705c57e426b160112c", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0xa3aa52ce79e85a21d9ccda705c57e426b160112c", - "blockscoutLabel": "RoundsManager", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "1 May 2018", - "replacedBy": "V2" - }, - { - "version": "V2", - "address": "0x857d4bf18a80f03d3d11f438825cd3d0aa0d9d68", - "type": "target", - "statusLabel": "Deprecated", - "verified": false, - "blockchainHref": "https://etherscan.io/address/0x857d4bf18a80f03d3d11f438825cd3d0aa0d9d68", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "14 Jan 2020", - "replacedBy": "current" - } - ] - }, - "MerkleProof": { - "entries": [ - { - "version": "V1", - "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", - "type": "target", - "statusLabel": "Deprecated", - "verified": true, - "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", - "blockscoutLabel": "MerkleProof", - "creatorAddress": "0xB5Af4138f0f33be0D6414Eb25271B9C2Dc245fb5", - "deployedAt": "1 May 2018", - "replacedBy": "current" - } - ] + "historical": [ + { + "id": "genesis.MerkleProof.historicalSeries.1", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "type": "standalone", + "deploymentKind": "standalone", + "category": "genesis", + "lifecycle": "historical", + "chain": "ethereumMainnet", + "proofChain": "historical-series", + "version": null, + "addressAuthority": "historical-series", + "runtimeAuthority": "archive", + "repoSrc": null, + "contractCodeHref": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "hasBytecode": null, + "sourceVerified": null, + "verified": null, + "verifiedAt": null, + "verifiedAtISO": null, + "isHistorical": true, + "meta": { + "statusLabel": "Deprecated", + "notes": "Historical version emitted from the contracts pipeline historical series model.", + "controllerSlot": null, + "controllerResolvedAddress": null, + "historicalSlotId": null, + "historicalSlotName": "MerkleProof", + "historicalProxyAddress": null, + "controllerRegistered": null + }, + "addressSource": { + "kind": "historical-series", + "repo": null, + "path": null, + "refMode": "generated-state", + "resolvedCommit": null, + "key": "genesis:MerkleProof" + }, + "codeSource": null, + "controllerRegistered": null, + "verification": { + "status": "partial", + "lastVerifiedAt": null, + "explorer": { + "family": "etherscan", + "host": "etherscan.io", + "addressBaseUrl": "https://etherscan.io/address/", + "addressUrl": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839" + }, + "controller": { + "applicable": false, + "controllerAddress": null, + "controllerSlot": null, + "registrationState": null, + "controllerRegistered": null, + "resolvedAddress": null, + "currentAddressMatches": null + }, + "bridge": { + "applicable": false, + "deploymentArtifactAddress": null, + "deploymentArtifactRepo": null, + "deploymentArtifactPath": null, + "deploymentArtifactResolvedCommit": null, + "deploymentArtifactMatchesAddress": null + }, + "runtimeConsumer": { + "applicable": false, + "required": false, + "repo": null, + "path": null, + "resolvedCommit": null, + "exactAddressMatch": null + }, + "proxy": { + "applicable": false, + "proxyAddress": null, + "controllerAddress": null, + "controllerMatchesExpected": null, + "targetContractId": null, + "targetContractName": null, + "implementationAddress": null, + "implementationName": null, + "implementationVersion": null, + "implementationSource": null, + "expectedImplementationAddress": null, + "expectedImplementationSource": null, + "implementationMatchesExpected": null, + "controllerCurrentProxyMatches": null + } + } } + ], + "historicalSeries": { + "core": [ + { + "category": "core", + "name": "BondingManager", + "canonicalName": "BondingManager", + "entries": [] + }, + { + "category": "core", + "name": "Controller", + "canonicalName": "Controller", + "entries": [] + }, + { + "category": "core", + "name": "Minter", + "canonicalName": "Minter", + "entries": [] + }, + { + "category": "core", + "name": "RoundsManager", + "canonicalName": "RoundsManager", + "entries": [] + }, + { + "category": "core", + "name": "ServiceRegistry", + "canonicalName": "ServiceRegistry", + "entries": [] + }, + { + "category": "core", + "name": "TicketBroker", + "canonicalName": "TicketBroker", + "entries": [] + } + ], + "token": [ + { + "category": "token", + "name": "LivepeerToken", + "canonicalName": "LivepeerToken", + "entries": [] + } + ], + "bridge": [ + { + "category": "bridge", + "name": "BridgeMinter", + "canonicalName": "BridgeMinter", + "entries": [] + }, + { + "category": "bridge", + "name": "L1Escrow", + "canonicalName": "L1Escrow", + "entries": [] + }, + { + "category": "bridge", + "name": "L1LPTDataCache", + "canonicalName": "L1LPTDataCache", + "entries": [] + }, + { + "category": "bridge", + "name": "L1LPTGateway", + "canonicalName": "L1LPTGateway", + "entries": [] + } + ], + "migration": [ + { + "category": "migration", + "name": "L1Migrator", + "canonicalName": "L1Migrator", + "entries": [] + } + ], + "utility": [ + { + "category": "utility", + "name": "GenesisManager", + "canonicalName": "GenesisManager", + "entries": [] + }, + { + "category": "utility", + "name": "MerkleMine", + "canonicalName": "MerkleMine", + "entries": [] + }, + { + "category": "utility", + "name": "MultiMerkleMine", + "canonicalName": "MultiMerkleMine", + "entries": [] + }, + { + "category": "utility", + "name": "Refunder", + "canonicalName": "Refunder", + "entries": [] + }, + { + "category": "utility", + "name": "SortedDoublyLL", + "canonicalName": "SortedDoublyLL", + "entries": [] + } + ], + "genesis": [ + { + "category": "genesis", + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "entries": [ + { + "name": "MerkleProof", + "canonicalName": "MerkleProof", + "category": "genesis", + "chain": "ethereumMainnet", + "type": "standalone", + "deploymentKind": "standalone", + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "version": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "isCurrent": false, + "status": "Deprecated", + "replacedBy": null + } + ] + } + ] + }, + "currentImplementations": [] + }, + "historical": { + "arbitrumOne": { + "BondingManager": [ + { + "address": "0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0xe479b9fba2cd65f822f451fc8c145c663b995ce6", + "replacedBy": "V2", + "status": "Replaced by V2" + }, + { + "address": "0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "chain": "arbitrumOne", + "type": "target", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xc40df4db2f99e7e235780a93b192f1a934f0c45b", + "replacedBy": "V3", + "status": "Replaced by V3" + }, + { + "address": "0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "chain": "arbitrumOne", + "type": "target", + "version": "V3", + "blockchainHref": "https://arbiscan.io/address/0x3757db506ecd9cbe643660c0f5b70db5b321202c", + "replacedBy": "V4", + "status": "Replaced by V4" + }, + { + "address": "0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "chain": "arbitrumOne", + "type": "target", + "version": "V4", + "blockchainHref": "https://arbiscan.io/address/0x0f9c425e7374602c20370d3fd263155b4c3bdc91", + "replacedBy": "V5", + "status": "Replaced by V5" + }, + { + "address": "0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "chain": "arbitrumOne", + "type": "target", + "version": "V5", + "blockchainHref": "https://arbiscan.io/address/0x3a941e1094b9e33efabb26a9047a8abb4b257907", + "replacedBy": "V6", + "status": "Replaced by V6" + }, + { + "address": "0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "chain": "arbitrumOne", + "type": "target", + "version": "V6", + "blockchainHref": "https://arbiscan.io/address/0x9c9209c9ff6996513b3673d69ee7b36a6c58a8cf", + "replacedBy": "V7", + "status": "Replaced by V7" + }, + { + "address": "0x363cdb9bae210ef182c60b5a496139e980330127", + "chain": "arbitrumOne", + "type": "target", + "version": "V7", + "blockchainHref": "https://arbiscan.io/address/0x363cdb9bae210ef182c60b5a496139e980330127", + "replacedBy": "V8", + "status": "Replaced by V8" + }, + { + "address": "0x557093b1ab53412166bead939f34244170b6525b", + "chain": "arbitrumOne", + "type": "target", + "version": "V8", + "blockchainHref": "https://arbiscan.io/address/0x557093b1ab53412166bead939f34244170b6525b", + "replacedBy": "V9", + "status": "Replaced by V9" + }, + { + "address": "0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "chain": "arbitrumOne", + "type": "target", + "version": "V9", + "blockchainHref": "https://arbiscan.io/address/0x6b397f20dc227b4e23fec20bbdbe166d0dffc452", + "replacedBy": "V10", + "status": "Replaced by V10" + }, + { + "address": "0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "chain": "arbitrumOne", + "type": "target", + "version": "V10", + "blockchainHref": "https://arbiscan.io/address/0xd1c1f5d44d8f83ca2a05baf40461e550cfddeca2", + "replacedBy": "V11", + "status": "Replaced by V11" + }, + { + "address": "0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "chain": "arbitrumOne", + "type": "target", + "version": "V11", + "blockchainHref": "https://arbiscan.io/address/0xf62c30242fccd3a46721f155d4d367de3fd5b3b3", + "replacedBy": "V12", + "status": "Replaced by V12" + }, + { + "address": "0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "chain": "arbitrumOne", + "type": "target", + "version": "V12", + "blockchainHref": "https://arbiscan.io/address/0x4ba7e7531ab56bc8d78db4fdc88d21f621f34bb4", + "replacedBy": null, + "status": "Deprecated" + } + ], + "Minter": [ + { + "address": "0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "chain": "arbitrumOne", + "type": "standalone", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4969dccf5186e1c49411638fc8a2a020fdab752e", + "replacedBy": null, + "status": "Deprecated" + } + ], + "TicketBroker": [ + { + "address": "0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x7beb84c52ce96dfd90431faa97378994a8baa6df", + "replacedBy": "V2", + "status": "Replaced by V2" + }, + { + "address": "0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "chain": "arbitrumOne", + "type": "target", + "version": "V2", + "blockchainHref": "https://arbiscan.io/address/0xd906d192e2503aafd1bc5f5fc4163e842d5b1d6e", + "replacedBy": null, + "status": "Deprecated" + } + ], + "BondingVotes": [ + { + "address": "0x1561fc5f7efc049476224005dff38256dccfc509", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x1561fc5f7efc049476224005dff38256dccfc509", + "replacedBy": null, + "status": "Deprecated" + } + ], + "L2Migrator": [ + { + "address": "0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "chain": "arbitrumOne", + "type": "target", + "version": "V1", + "blockchainHref": "https://arbiscan.io/address/0x4f59b39e2ea628fe8371bdfd51b063319339c7ee", + "replacedBy": null, + "status": "Deprecated" + } + ] + }, + "ethereumMainnet": { + "MerkleProof": [ + { + "address": "0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "chain": "ethereumMainnet", + "type": "standalone", + "version": null, + "blockchainHref": "https://etherscan.io/address/0x289ba1701c2f088cf0faf8b3705246331cb8a839", + "replacedBy": null, + "status": "Deprecated" + } + ] } }, "meta": { - "lastUpdated": "2026-03-30T15:11:00.905Z", - "lastVerified": "31 Mar 2026", + "lastUpdated": "2026-04-03T10:02:24.221Z", + "lastVerified": "3 Apr 2026", "sourceRepo": "livepeer/governor-scripts", "sourceCommit": "2cb192a", - "verificationSummary": "25/25 Arbitrum, 24/24 Mainnet", + "verificationSummary": "16/16 Arbitrum source-verified, 17/17 Mainnet source-verified", + "bytecodeSummary": "16/16 Arbitrum with bytecode, 17/17 Mainnet with bytecode", "explorerUrls": { "arbiscan": "https://arbiscan.io", + "arbiscanAddress": "https://arbiscan.io/address/", "etherscan": "https://etherscan.io", + "etherscanAddress": "https://etherscan.io/address/", "blockscoutArbitrum": "https://arbitrum.blockscout.com", "blockscoutEthereum": "https://eth.blockscout.com" }, @@ -2407,10 +16442,55 @@ export const contractAddresses = { "https://eth.drpc.org" ] }, - "_apiVersions": { - "blockscout": "v2", - "etherscan": "v2" - }, - "_warnings": [] + "verificationModel": "contracts-proof-v2", + "watchedRepos": [ + { + "repo": "livepeer/protocol", + "preferredBranches": [ + "delta", + "streamflow", + "master" + ], + "role": "controller-and-provenance" + }, + { + "repo": "livepeer/arbitrum-lpt-bridge", + "preferredBranches": [ + "main" + ], + "role": "bridge-and-token" + }, + { + "repo": "livepeer/go-livepeer", + "preferredBranches": [ + "master", + "main" + ], + "role": "runtime-consumer" + }, + { + "repo": "livepeer/governor-scripts", + "preferredBranches": [ + "master", + "main" + ], + "role": "governance-discovery" + } + ], + "latestResolutionPolicy": [ + "Current controller-managed addresses are recovered from live controller reads on every run.", + "Bridge and detached families must resolve from watched upstream repositories or official manifests, then survive runtime and explorer validation.", + "Branch names are discovery inputs only. Published code provenance must resolve to repo, commit, and file path.", + "Docs-local files do not define publishable address truth, lifecycle truth, implementation truth, or code-source truth.", + "Silent degradation is not a permitted outcome. Unresolved truth, provenance, or branch anomalies produce a blocking incident artifact." + ], + "cadence": { + "defaultLabel": "daily", + "mainScheduleCron": "0 2 * * *", + "shadowScheduleCron": "30 2 * * *", + "configurable": true + } } }; + +export default contractAddresses; diff --git a/snippets/data/contract-addresses/index.jsx b/snippets/data/contract-addresses/index.jsx new file mode 100644 index 000000000..fa0b47e17 --- /dev/null +++ b/snippets/data/contract-addresses/index.jsx @@ -0,0 +1,9 @@ +import { contractAddresses } from './contractAddressesData.jsx' +import { blockchainContractsPageData } from './blockchainContractsPageData.jsx' + +export { + blockchainContractsPageData, + contractAddresses, +} + +export * from './view-model.jsx' diff --git a/snippets/data/contract-addresses/research.md b/snippets/data/contract-addresses/research.md new file mode 100644 index 000000000..f9d5b403b --- /dev/null +++ b/snippets/data/contract-addresses/research.md @@ -0,0 +1,5 @@ +# CONTRACT ADDRESSES: KEY REQUIREMENTS + +**AEO (Answer Engine Optimisation**) is now MORE important than traditional SEO for anti-scam. **AI search traffic grew 527% YoY, and 60% of AI-cited sources are not even in Google's top 10**. Your biggest lever is the custom llms.txt with contract addresses prominently placed — every major AI (ChatGPT, Claude, Perplexity, Gemini) reads this file. + +Your domain authority (docs.livepeer.org) is your strongest weapon. Scammers cannot match it. The strategy is to saturate both search engines and AI answer engines with 6-8 tightly interlinked pages that cover every keyword variation someone might search for. diff --git a/snippets/data/contract-addresses/view-model.js b/snippets/data/contract-addresses/view-model.js new file mode 100644 index 000000000..a6988ed74 --- /dev/null +++ b/snippets/data/contract-addresses/view-model.js @@ -0,0 +1,277 @@ +export const contractsRoutes = { + reference: '/v2/about/resources/livepeer-contract-addresses', + verifier: '/v2/about/resources/livepeer-contract-addresses#verifier-widget-verify-contract-address', +} + +export const chainLabel = { + arbitrumOne: 'Arbitrum One', + ethereumMainnet: 'Ethereum Mainnet', +} + +export const lifecycleLabel = { + active: 'Active', + paused: 'Paused', + migration_residual: 'Migration', + legacy_operational: 'Legacy operational', + historical: 'Historical', +} + +export const categoryOrder = ['bridge', 'core', 'governance', 'token', 'migration', 'genesis', 'utility', 'other'] + +export const nonActiveLifecycleOrder = ['paused', 'migration_residual', 'legacy_operational'] + +export const nonActiveLifecycleConfig = { + paused: { + key: 'paused', + title: 'Paused', + description: 'Controller-era contracts that remain published for verification but are no longer active.', + icon: 'pause', + }, + migration_residual: { + key: 'migration_residual', + title: 'Migration', + description: 'Contracts left in place for late claims or migration completion workflows.', + icon: 'clock-rotate-left', + }, + legacy_operational: { + key: 'legacy_operational', + title: 'Legacy Operational', + description: 'Legacy helper contracts that remain deployed for reference or support functions.', + icon: 'wrench', + }, +} + +export const historicalCategoryConfig = { + core: { + key: 'core', + title: 'Core', + description: 'Historical staking, payments, round progression, and service discovery contracts.', + icon: 'gear', + }, + governance: { + key: 'governance', + title: 'Governance', + description: 'Historical voting and proposal contracts.', + icon: 'landmark', + }, + migration: { + key: 'migration', + title: 'Migration', + description: 'Historical Confluence upgrade contracts.', + icon: 'bridge', + }, + genesis: { + key: 'genesis', + title: 'Genesis', + description: 'Historical libraries and helper contracts from the 2018 launch.', + icon: 'livepeer', + }, +} + +export const normalizeString = (value = '') => String(value || '').trim() + +export const normalizeCategoryKey = (value = 'other') => normalizeString(value).toLowerCase() || 'other' + +export const normalizeLifecycleKey = (value = 'active') => normalizeString(value).toLowerCase() || 'active' + +export const normalizeTypeKey = (value = 'standalone') => normalizeString(value).toLowerCase() || 'standalone' + +export const compareByLocale = (left, right) => + String(left || '').localeCompare(String(right || ''), 'en', { sensitivity: 'base' }) + +export const versionToNumber = (value) => Number(String(value || '').replace(/^V/i, '')) || 0 + +export const getExplorerBase = (sourceData = {}, chain) => { + const urls = sourceData?.meta?.explorerUrls || {} + if (chain === 'arbitrumOne') { + return urls.arbiscanAddress || `${urls.arbiscan || 'https://arbiscan.io'}/address/` + } + return urls.etherscanAddress || `${urls.etherscan || 'https://etherscan.io'}/address/` +} + +export const normalizeContractsForTable = (sourceData = {}, entries = [], chain, fallbackLifecycle = 'active') => + (entries || []).map((contract) => { + const type = normalizeTypeKey(contract.type || contract.deploymentKind || 'standalone') + const lifecycle = normalizeLifecycleKey(contract.lifecycle || fallbackLifecycle) + const category = normalizeCategoryKey(contract.category) + + return { + Name: contract.name, + Address: contract.address, + Status: contract.meta?.statusLabel || lifecycleLabel[lifecycle] || lifecycle, + Type: type, + Category: category, + Version: contract.version || contract.meta?.version || '—', + Chain: chainLabel[chain] || chain, + _addressHref: contract.blockchainHref || `${getExplorerBase(sourceData, chain)}${contract.address}`, + _chainKey: chain, + _typeKey: type, + _categoryKey: category, + _lifecycleKey: lifecycle, + _source: contract, + } + }) + +export const sortContractsForDisplay = (items = []) => + [...items].sort((left, right) => { + const leftCategory = categoryOrder.indexOf(normalizeCategoryKey(left._categoryKey || left.Category)) + const rightCategory = categoryOrder.indexOf(normalizeCategoryKey(right._categoryKey || right.Category)) + const categoryRankA = leftCategory === -1 ? categoryOrder.length : leftCategory + const categoryRankB = rightCategory === -1 ? categoryOrder.length : rightCategory + + return ( + categoryRankA - categoryRankB || + compareByLocale(left.Name, right.Name) || + compareByLocale(left.Chain, right.Chain) || + versionToNumber(left.Version) - versionToNumber(right.Version) + ) + }) + +export const collectLifecycleEntries = (sourceData = {}, lifecycle, fallbackLifecycle = lifecycle) => [ + ...normalizeContractsForTable(sourceData, sourceData?.arbitrumOne?.[lifecycle], 'arbitrumOne', fallbackLifecycle), + ...normalizeContractsForTable(sourceData, sourceData?.ethereumMainnet?.[lifecycle], 'ethereumMainnet', fallbackLifecycle), +] + +export const getActiveEntries = (sourceData = {}) => [ + ...normalizeContractsForTable(sourceData, sourceData?.arbitrumOne?.active || sourceData?.arbitrumOne?.current, 'arbitrumOne', 'active'), + ...normalizeContractsForTable(sourceData, sourceData?.ethereumMainnet?.active || sourceData?.ethereumMainnet?.current, 'ethereumMainnet', 'active'), +] + +export const getImplementationEntries = (sourceData = {}) => [ + ...normalizeContractsForTable(sourceData, sourceData?.arbitrumOne?.currentImplementations, 'arbitrumOne', 'historical'), + ...normalizeContractsForTable(sourceData, sourceData?.ethereumMainnet?.currentImplementations, 'ethereumMainnet', 'historical'), +] + +export const getActiveTableItems = (sourceData = {}) => [ + ...getActiveEntries(sourceData).filter((item) => item._typeKey === 'standalone'), + ...getImplementationEntries(sourceData), +] + +export const getProxyTableItems = (sourceData = {}) => { + const implementationLookup = getImplementationEntries(sourceData).reduce((lookup, item) => { + lookup.set(`${item.Name}:${item._chainKey}`, item) + return lookup + }, new Map()) + + return getActiveEntries(sourceData) + .filter((item) => item._typeKey === 'proxy') + .map((item) => { + const target = implementationLookup.get(`${item.Name}:${item._chainKey}`) + return { + Name: item.Name, + Proxy: 'proxy', + 'Proxy Address': item.Address, + '_Proxy AddressHref': item._addressHref, + Chain: item.Chain, + Category: item.Category, + Target: target?._typeKey || 'target', + 'Target Address': target?.Address || '—', + '_Target AddressHref': target?._addressHref || null, + _chainKey: item._chainKey, + _categoryKey: item._categoryKey, + _source: item._source, + } + }) +} + +export const getLifecycleTableItems = (sourceData = {}, lifecycle = 'paused') => + sortContractsForDisplay(collectLifecycleEntries(sourceData, lifecycle, lifecycle)).map((item) => ({ + Name: item.Name, + Address: item.Address, + Chain: item.Chain, + Type: item.Type, + Category: item.Category, + _addressHref: item._addressHref, + _chainKey: item._chainKey, + _typeKey: item._typeKey, + _categoryKey: item._categoryKey, + _source: item._source, + })) + +export const getNonActiveGroups = (sourceData = {}) => + nonActiveLifecycleOrder + .map((lifecycle) => ({ + ...nonActiveLifecycleConfig[lifecycle], + items: getLifecycleTableItems(sourceData, lifecycle), + })) + .filter((group) => group.items.length > 0) + +export const getHistoricalCategories = (sourceData = {}) => + Object.values(historicalCategoryConfig).filter(({ key }) => { + const arbitrumSeries = sourceData?.arbitrumOne?.historicalSeries?.[key] || [] + const ethereumSeries = sourceData?.ethereumMainnet?.historicalSeries?.[key] || [] + return arbitrumSeries.length > 0 || ethereumSeries.length > 0 + }) + +export const getHistoricalCategoryMeta = (category) => + historicalCategoryConfig[category] || { + key: category, + title: normalizeString(category) + .replace(/_/g, ' ') + .replace(/\b\w/g, (char) => char.toUpperCase()), + description: 'Historical contract versions grouped by generator-owned contract series.', + icon: 'clock-rotate-left', + } + +export const getBlockchainContracts = (pageData = {}) => pageData?.contracts || {} + +export const getBlockchainContract = (pageData = {}, slug) => getBlockchainContracts(pageData)[slug] || null + +export const getBlockchainLastVerifiedDate = (pageData = {}) => pageData?.meta?.lastVerified || 'Pending' + +export const getNamedBlockchainContract = (pageData = {}, chain, name) => { + const contracts = Object.values(getBlockchainContracts(pageData)) + return ( + contracts.find((contract) => contract?.chain === chain && contract?.name === name) || + null + ) +} + +export const getBlockchainContractAddress = (pageData = {}, chain, name, type = null) => { + const contract = getNamedBlockchainContract(pageData, chain, name) + if (!contract) return null + if (type === 'proxy') return contract.proxyAddress || contract.currentAddress || null + if (type === 'target') return contract.targetAddress || null + return contract.currentAddress || contract.proxyAddress || contract.targetAddress || null +} + +export const getBlockchainExplorerHref = (pageData = {}, chain, name, type = null) => { + const contract = getNamedBlockchainContract(pageData, chain, name) + if (!contract) return null + if (type === 'proxy') return contract.proxyBlockchainHref || contract.blockchainHref || null + if (type === 'target') return contract.targetBlockchainHref || null + return contract.blockchainHref || contract.proxyBlockchainHref || contract.targetBlockchainHref || null +} + +export const getBlockchainCodeHref = (pageData = {}, chain, name, type = null) => { + const contract = getNamedBlockchainContract(pageData, chain, name) + if (!contract) return null + if (type === 'proxy') return contract.proxyContractCodeHref || contract.contractCodeHref || null + if (type === 'target') return contract.targetContractCodeHref || contract.contractCodeHref || null + return contract.contractCodeHref || null +} + +export const getBlockchainRawCodeHref = (pageData = {}, slug) => + getBlockchainContract(pageData, slug)?.rawContractCodeHref || null + +export const getBlockchainContractBindings = (pageData = {}) => ({ + controller: getBlockchainContractAddress(pageData, 'arbitrumOne', 'Controller'), + bondingManagerProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'BondingManager', 'proxy'), + ticketBrokerProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'TicketBroker', 'proxy'), + roundsManagerProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'RoundsManager', 'proxy'), + minter: getBlockchainContractAddress(pageData, 'arbitrumOne', 'Minter'), + serviceRegistryProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'ServiceRegistry', 'proxy'), + aiServiceRegistry: getBlockchainContractAddress(pageData, 'arbitrumOne', 'AIServiceRegistry'), + lptArb: getBlockchainContractAddress(pageData, 'arbitrumOne', 'LivepeerToken'), + lptEth: getBlockchainContractAddress(pageData, 'ethereumMainnet', 'LivepeerToken'), + bridgeMinter: getBlockchainContractAddress(pageData, 'ethereumMainnet', 'BridgeMinter'), + l2Gateway: getBlockchainContractAddress(pageData, 'arbitrumOne', 'L2LPTGateway'), + l1Gateway: getBlockchainContractAddress(pageData, 'ethereumMainnet', 'L1LPTGateway'), + l1Escrow: getBlockchainContractAddress(pageData, 'ethereumMainnet', 'L1Escrow'), + bondingVotesProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'BondingVotes', 'proxy'), + governor: getBlockchainContractAddress(pageData, 'arbitrumOne', 'Governor'), + livepeerGovernorProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'LivepeerGovernor', 'proxy'), + treasury: getBlockchainContractAddress(pageData, 'arbitrumOne', 'Treasury'), + l2Migrator: getBlockchainContractAddress(pageData, 'arbitrumOne', 'L2Migrator', 'proxy'), + merkleSnapshot: getBlockchainContractAddress(pageData, 'arbitrumOne', 'MerkleSnapshot'), +}) diff --git a/snippets/data/contract-addresses/view-model.jsx b/snippets/data/contract-addresses/view-model.jsx new file mode 100644 index 000000000..a6988ed74 --- /dev/null +++ b/snippets/data/contract-addresses/view-model.jsx @@ -0,0 +1,277 @@ +export const contractsRoutes = { + reference: '/v2/about/resources/livepeer-contract-addresses', + verifier: '/v2/about/resources/livepeer-contract-addresses#verifier-widget-verify-contract-address', +} + +export const chainLabel = { + arbitrumOne: 'Arbitrum One', + ethereumMainnet: 'Ethereum Mainnet', +} + +export const lifecycleLabel = { + active: 'Active', + paused: 'Paused', + migration_residual: 'Migration', + legacy_operational: 'Legacy operational', + historical: 'Historical', +} + +export const categoryOrder = ['bridge', 'core', 'governance', 'token', 'migration', 'genesis', 'utility', 'other'] + +export const nonActiveLifecycleOrder = ['paused', 'migration_residual', 'legacy_operational'] + +export const nonActiveLifecycleConfig = { + paused: { + key: 'paused', + title: 'Paused', + description: 'Controller-era contracts that remain published for verification but are no longer active.', + icon: 'pause', + }, + migration_residual: { + key: 'migration_residual', + title: 'Migration', + description: 'Contracts left in place for late claims or migration completion workflows.', + icon: 'clock-rotate-left', + }, + legacy_operational: { + key: 'legacy_operational', + title: 'Legacy Operational', + description: 'Legacy helper contracts that remain deployed for reference or support functions.', + icon: 'wrench', + }, +} + +export const historicalCategoryConfig = { + core: { + key: 'core', + title: 'Core', + description: 'Historical staking, payments, round progression, and service discovery contracts.', + icon: 'gear', + }, + governance: { + key: 'governance', + title: 'Governance', + description: 'Historical voting and proposal contracts.', + icon: 'landmark', + }, + migration: { + key: 'migration', + title: 'Migration', + description: 'Historical Confluence upgrade contracts.', + icon: 'bridge', + }, + genesis: { + key: 'genesis', + title: 'Genesis', + description: 'Historical libraries and helper contracts from the 2018 launch.', + icon: 'livepeer', + }, +} + +export const normalizeString = (value = '') => String(value || '').trim() + +export const normalizeCategoryKey = (value = 'other') => normalizeString(value).toLowerCase() || 'other' + +export const normalizeLifecycleKey = (value = 'active') => normalizeString(value).toLowerCase() || 'active' + +export const normalizeTypeKey = (value = 'standalone') => normalizeString(value).toLowerCase() || 'standalone' + +export const compareByLocale = (left, right) => + String(left || '').localeCompare(String(right || ''), 'en', { sensitivity: 'base' }) + +export const versionToNumber = (value) => Number(String(value || '').replace(/^V/i, '')) || 0 + +export const getExplorerBase = (sourceData = {}, chain) => { + const urls = sourceData?.meta?.explorerUrls || {} + if (chain === 'arbitrumOne') { + return urls.arbiscanAddress || `${urls.arbiscan || 'https://arbiscan.io'}/address/` + } + return urls.etherscanAddress || `${urls.etherscan || 'https://etherscan.io'}/address/` +} + +export const normalizeContractsForTable = (sourceData = {}, entries = [], chain, fallbackLifecycle = 'active') => + (entries || []).map((contract) => { + const type = normalizeTypeKey(contract.type || contract.deploymentKind || 'standalone') + const lifecycle = normalizeLifecycleKey(contract.lifecycle || fallbackLifecycle) + const category = normalizeCategoryKey(contract.category) + + return { + Name: contract.name, + Address: contract.address, + Status: contract.meta?.statusLabel || lifecycleLabel[lifecycle] || lifecycle, + Type: type, + Category: category, + Version: contract.version || contract.meta?.version || '—', + Chain: chainLabel[chain] || chain, + _addressHref: contract.blockchainHref || `${getExplorerBase(sourceData, chain)}${contract.address}`, + _chainKey: chain, + _typeKey: type, + _categoryKey: category, + _lifecycleKey: lifecycle, + _source: contract, + } + }) + +export const sortContractsForDisplay = (items = []) => + [...items].sort((left, right) => { + const leftCategory = categoryOrder.indexOf(normalizeCategoryKey(left._categoryKey || left.Category)) + const rightCategory = categoryOrder.indexOf(normalizeCategoryKey(right._categoryKey || right.Category)) + const categoryRankA = leftCategory === -1 ? categoryOrder.length : leftCategory + const categoryRankB = rightCategory === -1 ? categoryOrder.length : rightCategory + + return ( + categoryRankA - categoryRankB || + compareByLocale(left.Name, right.Name) || + compareByLocale(left.Chain, right.Chain) || + versionToNumber(left.Version) - versionToNumber(right.Version) + ) + }) + +export const collectLifecycleEntries = (sourceData = {}, lifecycle, fallbackLifecycle = lifecycle) => [ + ...normalizeContractsForTable(sourceData, sourceData?.arbitrumOne?.[lifecycle], 'arbitrumOne', fallbackLifecycle), + ...normalizeContractsForTable(sourceData, sourceData?.ethereumMainnet?.[lifecycle], 'ethereumMainnet', fallbackLifecycle), +] + +export const getActiveEntries = (sourceData = {}) => [ + ...normalizeContractsForTable(sourceData, sourceData?.arbitrumOne?.active || sourceData?.arbitrumOne?.current, 'arbitrumOne', 'active'), + ...normalizeContractsForTable(sourceData, sourceData?.ethereumMainnet?.active || sourceData?.ethereumMainnet?.current, 'ethereumMainnet', 'active'), +] + +export const getImplementationEntries = (sourceData = {}) => [ + ...normalizeContractsForTable(sourceData, sourceData?.arbitrumOne?.currentImplementations, 'arbitrumOne', 'historical'), + ...normalizeContractsForTable(sourceData, sourceData?.ethereumMainnet?.currentImplementations, 'ethereumMainnet', 'historical'), +] + +export const getActiveTableItems = (sourceData = {}) => [ + ...getActiveEntries(sourceData).filter((item) => item._typeKey === 'standalone'), + ...getImplementationEntries(sourceData), +] + +export const getProxyTableItems = (sourceData = {}) => { + const implementationLookup = getImplementationEntries(sourceData).reduce((lookup, item) => { + lookup.set(`${item.Name}:${item._chainKey}`, item) + return lookup + }, new Map()) + + return getActiveEntries(sourceData) + .filter((item) => item._typeKey === 'proxy') + .map((item) => { + const target = implementationLookup.get(`${item.Name}:${item._chainKey}`) + return { + Name: item.Name, + Proxy: 'proxy', + 'Proxy Address': item.Address, + '_Proxy AddressHref': item._addressHref, + Chain: item.Chain, + Category: item.Category, + Target: target?._typeKey || 'target', + 'Target Address': target?.Address || '—', + '_Target AddressHref': target?._addressHref || null, + _chainKey: item._chainKey, + _categoryKey: item._categoryKey, + _source: item._source, + } + }) +} + +export const getLifecycleTableItems = (sourceData = {}, lifecycle = 'paused') => + sortContractsForDisplay(collectLifecycleEntries(sourceData, lifecycle, lifecycle)).map((item) => ({ + Name: item.Name, + Address: item.Address, + Chain: item.Chain, + Type: item.Type, + Category: item.Category, + _addressHref: item._addressHref, + _chainKey: item._chainKey, + _typeKey: item._typeKey, + _categoryKey: item._categoryKey, + _source: item._source, + })) + +export const getNonActiveGroups = (sourceData = {}) => + nonActiveLifecycleOrder + .map((lifecycle) => ({ + ...nonActiveLifecycleConfig[lifecycle], + items: getLifecycleTableItems(sourceData, lifecycle), + })) + .filter((group) => group.items.length > 0) + +export const getHistoricalCategories = (sourceData = {}) => + Object.values(historicalCategoryConfig).filter(({ key }) => { + const arbitrumSeries = sourceData?.arbitrumOne?.historicalSeries?.[key] || [] + const ethereumSeries = sourceData?.ethereumMainnet?.historicalSeries?.[key] || [] + return arbitrumSeries.length > 0 || ethereumSeries.length > 0 + }) + +export const getHistoricalCategoryMeta = (category) => + historicalCategoryConfig[category] || { + key: category, + title: normalizeString(category) + .replace(/_/g, ' ') + .replace(/\b\w/g, (char) => char.toUpperCase()), + description: 'Historical contract versions grouped by generator-owned contract series.', + icon: 'clock-rotate-left', + } + +export const getBlockchainContracts = (pageData = {}) => pageData?.contracts || {} + +export const getBlockchainContract = (pageData = {}, slug) => getBlockchainContracts(pageData)[slug] || null + +export const getBlockchainLastVerifiedDate = (pageData = {}) => pageData?.meta?.lastVerified || 'Pending' + +export const getNamedBlockchainContract = (pageData = {}, chain, name) => { + const contracts = Object.values(getBlockchainContracts(pageData)) + return ( + contracts.find((contract) => contract?.chain === chain && contract?.name === name) || + null + ) +} + +export const getBlockchainContractAddress = (pageData = {}, chain, name, type = null) => { + const contract = getNamedBlockchainContract(pageData, chain, name) + if (!contract) return null + if (type === 'proxy') return contract.proxyAddress || contract.currentAddress || null + if (type === 'target') return contract.targetAddress || null + return contract.currentAddress || contract.proxyAddress || contract.targetAddress || null +} + +export const getBlockchainExplorerHref = (pageData = {}, chain, name, type = null) => { + const contract = getNamedBlockchainContract(pageData, chain, name) + if (!contract) return null + if (type === 'proxy') return contract.proxyBlockchainHref || contract.blockchainHref || null + if (type === 'target') return contract.targetBlockchainHref || null + return contract.blockchainHref || contract.proxyBlockchainHref || contract.targetBlockchainHref || null +} + +export const getBlockchainCodeHref = (pageData = {}, chain, name, type = null) => { + const contract = getNamedBlockchainContract(pageData, chain, name) + if (!contract) return null + if (type === 'proxy') return contract.proxyContractCodeHref || contract.contractCodeHref || null + if (type === 'target') return contract.targetContractCodeHref || contract.contractCodeHref || null + return contract.contractCodeHref || null +} + +export const getBlockchainRawCodeHref = (pageData = {}, slug) => + getBlockchainContract(pageData, slug)?.rawContractCodeHref || null + +export const getBlockchainContractBindings = (pageData = {}) => ({ + controller: getBlockchainContractAddress(pageData, 'arbitrumOne', 'Controller'), + bondingManagerProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'BondingManager', 'proxy'), + ticketBrokerProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'TicketBroker', 'proxy'), + roundsManagerProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'RoundsManager', 'proxy'), + minter: getBlockchainContractAddress(pageData, 'arbitrumOne', 'Minter'), + serviceRegistryProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'ServiceRegistry', 'proxy'), + aiServiceRegistry: getBlockchainContractAddress(pageData, 'arbitrumOne', 'AIServiceRegistry'), + lptArb: getBlockchainContractAddress(pageData, 'arbitrumOne', 'LivepeerToken'), + lptEth: getBlockchainContractAddress(pageData, 'ethereumMainnet', 'LivepeerToken'), + bridgeMinter: getBlockchainContractAddress(pageData, 'ethereumMainnet', 'BridgeMinter'), + l2Gateway: getBlockchainContractAddress(pageData, 'arbitrumOne', 'L2LPTGateway'), + l1Gateway: getBlockchainContractAddress(pageData, 'ethereumMainnet', 'L1LPTGateway'), + l1Escrow: getBlockchainContractAddress(pageData, 'ethereumMainnet', 'L1Escrow'), + bondingVotesProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'BondingVotes', 'proxy'), + governor: getBlockchainContractAddress(pageData, 'arbitrumOne', 'Governor'), + livepeerGovernorProxy: getBlockchainContractAddress(pageData, 'arbitrumOne', 'LivepeerGovernor', 'proxy'), + treasury: getBlockchainContractAddress(pageData, 'arbitrumOne', 'Treasury'), + l2Migrator: getBlockchainContractAddress(pageData, 'arbitrumOne', 'L2Migrator', 'proxy'), + merkleSnapshot: getBlockchainContractAddress(pageData, 'arbitrumOne', 'MerkleSnapshot'), +}) diff --git a/tasks/reports/script-classifications.json b/tasks/reports/script-classifications.json index a126a66b6..36d506cb8 100644 --- a/tasks/reports/script-classifications.json +++ b/tasks/reports/script-classifications.json @@ -69,6 +69,26 @@ "purpose_statement": "Pre-commit sub-hook — verifies file-walker is available and runs structural checks on staged files", "pipeline": "manual — developer tool" }, + { + "path": ".github/scripts/fetch-contract-addresses.js", + "script": "fetch-contract-addresses", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": "generated-output", + "needs": "R-R10", + "purpose_statement": "Fetches and verifies Livepeer contract-address data, then generates the contracts datasets and canonical page inputs consumed by docs-v2.", + "pipeline": "P5, P6" + }, + { + "path": ".github/scripts/fetch-discord-announcements.js", + "script": "fetch-discord-announcements", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": "generated-output", + "needs": "R-R10", + "purpose_statement": "Fetches Discord announcement feeds and writes the generated snippets/automations datasets consumed by docs surfaces.", + "pipeline": "P5, P6" + }, { "path": ".github/scripts/fetch-forum-data.js", "script": "fetch-forum-data", @@ -84,9 +104,39 @@ "script": "fetch-ghost-blog-data", "category": "automation", "purpose": "infrastructure:data-feeds", - "scope": ".github/scripts", - "needs": "F-R1", - "purpose_statement": "Fetches blog posts from Ghost CMS API, writes to snippets/automations/blog/", + "scope": "generated-output", + "needs": "R-R10", + "purpose_statement": "Fetches the Livepeer Ghost RSS feed and writes the generated blog snippets consumed by docs surfaces.", + "pipeline": "P5, P6" + }, + { + "path": ".github/scripts/fetch-github-discussions.js", + "script": "fetch-github-discussions", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": "generated-output", + "needs": "R-R10", + "purpose_statement": "Fetches GitHub Discussions data and writes the generated snippets/automations datasets consumed by docs surfaces.", + "pipeline": "P5, P6" + }, + { + "path": ".github/scripts/fetch-github-releases.js", + "script": "fetch-github-releases", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": "generated-output", + "needs": "R-R10", + "purpose_statement": "Fetches GitHub release data and writes the generated snippets/automations datasets consumed by docs surfaces.", + "pipeline": "P5, P6" + }, + { + "path": ".github/scripts/fetch-rss-blog-data.js", + "script": "fetch-rss-blog-data", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": "generated-output", + "needs": "R-R10", + "purpose_statement": "Fetches RSS and blog feeds, then writes the generated snippets/automations datasets consumed by docs surfaces.", "pipeline": "P5, P6" }, { @@ -109,6 +159,16 @@ "purpose_statement": "Fetches project showcase data from external source, writes to snippets/automations/showcase/", "pipeline": "P5, P6" }, + { + "path": ".github/scripts/generate-changelog.js", + "script": "generate-changelog", + "category": "automation", + "purpose": "infrastructure:data-feeds", + "scope": "generated-output", + "needs": "R-R10", + "purpose_statement": "Generates managed changelog pages from upstream release and commit data for solutions, contracts, and resources surfaces.", + "pipeline": "P5, P6" + }, { "path": "lpd", "category": "orchestrator", @@ -252,6 +312,16 @@ "purpose_statement": "Validates the AI-tools registry contract, full tracked ai-tools coverage, and the Wave 1 inventory source-of-truth boundary.", "pipeline": "P1, P3" }, + { + "path": "tests/unit/authoring-tools.test.js", + "script": "authoring-tools.test", + "category": "validator", + "purpose": "tooling:dev-tools", + "scope": "tests/unit, tools/vscode/authoring-tools, tools/scripts/format-mdx.js", + "needs": "E-C6, F-C1", + "purpose_statement": "Unit tests for repo-owned authoring tools — verifies MDX formatting and real-path completion/validation helpers.", + "pipeline": "P1" + }, { "path": "tests/unit/audit-script-inventory-repair-rules.test.js", "script": "audit-script-inventory-repair-rules.test", @@ -1643,6 +1713,16 @@ "purpose_statement": "Mint custom loader — launches lpd dev with an alternate docs config as the active Mint navigation source.", "pipeline": "manual — developer tool" }, + { + "path": "tools/scripts/dev/rename-vscode-codex-chat.js", + "script": "rename-vscode-codex-chat", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "tools/scripts/dev/rename-vscode-codex-chat.js, .vscode/tasks.json, tools/package.json", + "needs": "E-C1, R-R14", + "purpose_statement": "VS Code Codex chat rename utility — finds recent VS Code chat session files, filters to Codex sessions, and updates the stored customTitle without manual JSON editing.", + "pipeline": "manual — interactive developer tool, not suited for automated pipelines" + }, { "path": "tools/scripts/dev/replace-og-image.py", "script": "replace-og-image", @@ -1804,6 +1884,16 @@ "purpose_statement": "Portable skills exporter — copies canonical template skills into cross-agent pack folders and validates drift.", "pipeline": "manual — not yet in pipeline" }, + { + "path": "tools/scripts/format-mdx.js", + "script": "format-mdx", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "tools/scripts, tools/vscode/authoring-tools, tests/unit", + "needs": "E-C6, F-C1", + "purpose_statement": "MDX formatter — applies the repo-owned conservative MDX formatter used by the Livepeer authoring extension.", + "pipeline": "manual" + }, { "path": "tools/scripts/generate-ai-sitemap.js", "script": "generate-ai-sitemap", @@ -1833,7 +1923,7 @@ "scope": "generated-output", "needs": "R-R10", "purpose_statement": "Generates published component library MDX pages from the registry.", - "pipeline": "manual" + "pipeline": "indirect, manual" }, { "path": "tools/scripts/generate-component-governance-remediation-reports.js", @@ -2181,6 +2271,16 @@ "purpose_statement": "Generated localisation validator — checks generated translated MDX files and route-map outputs for integrity", "pipeline": "P6" }, + { + "path": "tools/scripts/install-authoring-tools-extension.js", + "script": "install-authoring-tools-extension", + "category": "utility", + "purpose": "tooling:dev-tools", + "scope": "tools/scripts, tools/vscode/authoring-tools, .vscode/settings.json", + "needs": "E-C6, F-C1", + "purpose_statement": "VS Code/Cursor authoring tools installer — installs the repo-owned Livepeer authoring extension into local editor extension directories.", + "pipeline": "manual" + }, { "path": "tools/scripts/lib/docs-path-sync.js", "script": "docs-path-sync", diff --git a/tests/integration/v2-link-audit.js b/tests/integration/v2-link-audit.js index ca61269a0..d4aec8eb5 100644 --- a/tests/integration/v2-link-audit.js +++ b/tests/integration/v2-link-audit.js @@ -66,6 +66,15 @@ const MISSING_LINK_ALLOWLIST = new Set([ '/gateways/quickstart/gateway-setup', './protocol-economics' ]); +const TEMPLATE_PLACEHOLDER_LINK_PATTERNS = [ + /^"?glossary or wikipedia link"?$/i, + /^\/?path\/to\/page$/i, + /^\/v2\/\{path\}\/\{product_key\}\/changelog\/rss\.xml$/i, + /^\/v2\/solutions\/\{product_key\}\/changelog\/rss\.xml$/i, + /^\{source_url\}(?:\/.*)?$/i, + /^url$/i, + /^\/v2\/\[tab\](?:\/\[path\])?$/i +]; const EXTRA_V2_DIRS = (() => { if (!fs.existsSync(LEGACY_V2_PAGES_DIR)) return []; const dirs = []; @@ -97,6 +106,12 @@ function relNoExt(absPath) { return toPosix(rel.replace(/\.(mdx|md)$/i, '')); } +function isAuditableSnippetRel(relPath) { + const rel = toPosix(String(relPath || '')); + if (!rel.startsWith('snippets/')) return true; + return rel.startsWith('snippets/composables/'); +} + function isExcludedV2AbsPath(absPath) { const rel = relFromRoot(absPath); return isExcludedV2ExperimentalPath(rel); @@ -497,6 +512,17 @@ function normalizeExternalUrl(raw) { } } +function isTemplatePlaceholderRef(rawPath, currentFileAbs) { + const rel = relFromRoot(currentFileAbs); + if (!rel.startsWith('snippets/templates/') && !rel.startsWith('v2/templates/')) { + return false; + } + + const normalized = normalizeRawPath(rawPath); + if (!normalized) return false; + return TEMPLATE_PLACEHOLDER_LINK_PATTERNS.some((pattern) => pattern.test(normalized)); +} + function classifyPath(raw) { const p = String(raw || '').trim(); const lower = p.toLowerCase(); @@ -853,6 +879,17 @@ function shouldValidateExternalRef(ref, externalLinkTypes) { } function analyzeRef(ref, currentFileAbs, repoFiles, routeSet, args) { + if (isTemplatePlaceholderRef(ref.rawPath, currentFileAbs)) { + return { + ...ref, + linkType: 'template-placeholder', + resolvedPath: null, + exists: null, + status: 'skipped-template-placeholder', + movedCandidates: [] + }; + } + if (ref.sourceType === 'import-path') { const importPath = String(ref.rawPath || '').trim(); const isPackageImport = importPath && !importPath.startsWith('/') && !importPath.startsWith('./') && !importPath.startsWith('../'); @@ -1045,6 +1082,7 @@ function discoverMdxImports(startTargets) { if (!resolved || !resolved.endsWith('.mdx')) continue; const resolvedRel = relFromRoot(resolved); + if (!isAuditableSnippetRel(resolvedRel)) continue; if (resolvedRel.startsWith('v2/') && isExcludedV2ExperimentalPath(resolvedRel)) continue; mdxImports.push(resolved); @@ -1084,6 +1122,7 @@ function analyzeFiles({ allFiles, rootTargets, importGraph, importedByRoot, stru for (const f of allFiles) { if (path.basename(f).toLowerCase() === 'index.mdx') continue; const rel = relFromRoot(f); + if (!isAuditableSnippetRel(rel)) continue; if (rel.startsWith('v2/') && isExcludedV2ExperimentalPath(rel)) continue; const isRootPage = isActiveV2DocRel(rel); @@ -1990,6 +2029,8 @@ module.exports = { deriveJsonReportPath, parseArgs, normalizeExternalUrl, + isAuditableSnippetRel, + isTemplatePlaceholderRef, shouldValidateExternalRef, classifyExternalStatus, resolveInternalPath, diff --git a/tests/unit/authoring-tools.test.js b/tests/unit/authoring-tools.test.js index 06c21b5b8..a8d074a60 100644 --- a/tests/unit/authoring-tools.test.js +++ b/tests/unit/authoring-tools.test.js @@ -4,10 +4,10 @@ * @category validator * @purpose tooling:dev-tools * @scope tests/unit, tools/vscode/authoring-tools, tools/scripts/format-mdx.js - * @owner docs + * @domain docs * @needs E-C6, F-C1 * @purpose-statement Unit tests for repo-owned authoring tools — verifies MDX formatting and real-path completion/validation helpers. - * @pipeline P1, P3 + * @pipeline P1 * @usage node tests/unit/authoring-tools.test.js */ diff --git a/tests/unit/v2-link-audit.test.js b/tests/unit/v2-link-audit.test.js index ec855def0..21d01fb7b 100644 --- a/tests/unit/v2-link-audit.test.js +++ b/tests/unit/v2-link-audit.test.js @@ -120,6 +120,20 @@ async function runTests() { assert.strictEqual(out, 'https://example.com/docs?tab=one'); }); + await runCase('Skips placeholder links inside template surfaces', async () => { + const root = getRepoRoot(); + const templateFile = path.join(root, 'snippets', 'templates', 'pages', 'resources', 'changelog-template.mdx'); + assert.strictEqual(audit.isTemplatePlaceholderRef('/path/to/page', templateFile), true); + assert.strictEqual(audit.isTemplatePlaceholderRef('{SOURCE_URL}/releases/tag/vX.Y.Z', templateFile), true); + assert.strictEqual(audit.isTemplatePlaceholderRef('/v2/resources/livepeer-contract-addresses', templateFile), false); + }); + + await runCase('Does not skip real links outside template surfaces', async () => { + const root = getRepoRoot(); + const normalFile = path.join(root, 'v2', 'about', 'resources', 'livepeer-contract-addresses.mdx'); + assert.strictEqual(audit.isTemplatePlaceholderRef('/path/to/page', normalFile), false); + }); + await runCase('External eligibility filter handles navigational/media/all', async () => { const markdownLink = { sourceType: 'markdown-link' }; const markdownImage = { sourceType: 'markdown-image' }; @@ -193,8 +207,8 @@ async function runTests() { ] }); - assert.strictEqual(result.fileCount, 2); const analyzedFiles = (result.jsonReport?.files || []).map((file) => file.file || file.filePath || ''); + assert.strictEqual(result.fileCount, analyzedFiles.length); assert(analyzedFiles.some((file) => file.endsWith('v2/orchestrators/quickstart/guide.mdx'))); assert(analyzedFiles.some((file) => file.endsWith('v2/orchestrators/quickstart/video-transcoding.mdx'))); assert(analyzedFiles.every((file) => !file.includes('v2/orchestrators/guides/'))); @@ -211,11 +225,20 @@ async function runTests() { ); }); + await runCase('Ignores non-composable snippet imports during audit traversal', async () => { + const root = getRepoRoot(); + const snippetTemplate = path.join(root, 'snippets', 'templates', 'pages', 'resources', 'changelog-template.mdx'); + const composable = path.join(root, 'snippets', 'composables', 'pages', 'canonical', 'livepeer-contract-addresses.mdx'); + + assert.strictEqual(audit.isAuditableSnippetRel(path.relative(root, snippetTemplate).split(path.sep).join('/')), false); + assert.strictEqual(audit.isAuditableSnippetRel(path.relative(root, composable).split(path.sep).join('/')), true); + }); + return { errors, warnings, passed: errors.length === 0, - total: 10 + total: 13 }; } diff --git a/tools/scripts/format-mdx.js b/tools/scripts/format-mdx.js index 1241de13e..1bb2bab40 100644 --- a/tools/scripts/format-mdx.js +++ b/tools/scripts/format-mdx.js @@ -4,7 +4,7 @@ * @category utility * @purpose tooling:dev-tools * @scope tools/scripts, tools/vscode/authoring-tools, tests/unit - * @owner docs + * @domain docs * @needs E-C6, F-C1 * @purpose-statement MDX formatter — applies the repo-owned conservative MDX formatter used by the Livepeer authoring extension. * @pipeline manual diff --git a/tools/scripts/generate-component-docs.js b/tools/scripts/generate-component-docs.js index 68f0a3ae3..d6dd05823 100644 --- a/tools/scripts/generate-component-docs.js +++ b/tools/scripts/generate-component-docs.js @@ -4,7 +4,7 @@ * @category generator * @purpose governance:index-management * @scope generated-output - * @owner docs + * @domain docs * @needs R-R10 * @purpose-statement Generates published component library MDX pages from the registry. Replaces update-component-library.sh. * @pipeline indirect, manual @@ -413,7 +413,7 @@ async function renderCategoryPage(category, components, args, cache, warnings) { return normalizeFileContent( [ formatGeneratedPreamble(meta), - '<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow>', + '<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow>', ' Return to the generated component library landing page.', '</Card>', '', @@ -677,7 +677,7 @@ function renderLocaleScaffold(locale, slug, registry) { formatGeneratedPreamble(meta), `<Note>Localized prose refresh for \`${locale}\` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note>`, '', - '<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow>', + '<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow>', ' Return to the localized component-library landing page.', '</Card>', '', diff --git a/tools/scripts/install-authoring-tools-extension.js b/tools/scripts/install-authoring-tools-extension.js index 1a1982455..5313998a6 100644 --- a/tools/scripts/install-authoring-tools-extension.js +++ b/tools/scripts/install-authoring-tools-extension.js @@ -4,7 +4,7 @@ * @category utility * @purpose tooling:dev-tools * @scope tools/scripts, tools/vscode/authoring-tools, .vscode/settings.json - * @owner docs + * @domain docs * @needs E-C6, F-C1 * @purpose-statement VS Code/Cursor authoring tools installer — installs the repo-owned Livepeer authoring extension into local editor extension directories. * @pipeline manual diff --git a/v2/about/livepeer-protocol/blockchain-contracts.mdx b/v2/about/livepeer-protocol/blockchain-contracts.mdx index 09d3ca196..16a4261ee 100644 --- a/v2/about/livepeer-protocol/blockchain-contracts.mdx +++ b/v2/about/livepeer-protocol/blockchain-contracts.mdx @@ -1,7 +1,7 @@ --- title: Blockchain Contracts sidebarTitle: Blockchain Contracts -description: >- +description: Architecture overview of all Livepeer protocol smart contracts on Arbitrum One and Ethereum Mainnet. What each contract does, how contracts interact, and how upgrades work through governance. @@ -38,7 +38,7 @@ keywords: audience: general pageType: concept purpose: concept -lastVerified: 2026-03-28 +lastVerified: 2026-04-03 --- {/* @@ -48,7 +48,7 @@ Sources: Blockscout MCP (Arbitrum One chain 42161), GitHub livepeer/protocol del Errors corrected from previous version: 1. Governor functions: Transaction[] → Update memory (correct Solidity type from Governor.sol source) 2. Governor: added cancel(Update memory _update) — exists in source, was missing -3. Governor: removed stale "Last active Aug 2025" — Governor executed on 19 March 2026 (BondingManager V11 upgrade) +3. Governor: status line now sourced from generated pipeline facts 4. BondingManager: added public checkpointBondingState(address _account) — external function in source 5. BondingManager: added transferBond() — public function used in practice, was missing 6. BondingManager: claimEarnings — added note that _endRound is unused; earnings always claimed to current round @@ -64,66 +64,53 @@ Enhancements added: - Slashing note in BondingManager (disabled via governance) - Both TicketBroker events documented - BondingManager _endRound clarification +- Mermaid requires literal colour values and does not support CSS custom properties. */} import { CustomDivider } from '/snippets/components/elements/spacing/Divider.jsx' import { LinkArrow, DoubleIconLink, LinkIcon } from '/snippets/components/elements/links/Links.jsx' import { Subtitle, CopyText } from '/snippets/components/elements/text/Text.jsx' import { CenteredContainer, BorderedBox } from '/snippets/components/wrappers/containers/Containers.jsx' +import { FlexContainer } from '/snippets/components/wrappers/containers/Layout.jsx' import { ScrollableDiagram } from '/snippets/components/displays/diagrams/ZoomableDiagram.jsx' -import { contractAddresses } from '/snippets/data/contract-addresses/contractAddressesData.jsx' import { CustomCardTitle } from '/snippets/components/elements/text/CustomCardTitle.jsx' import { AddressLinks } from '/snippets/components/elements/links/Links.jsx' import { LazyLoad } from '/snippets/components/wrappers/containers/LazyLoad.jsx' import { ArbitrumIcon, ArbitrumSVG, LivepeerIcon, LivepeerSVG } from '/snippets/components/elements/icons/Icons.jsx' import { SolidityEmbed } from '/snippets/components/integrators/embeds/DataEmbed.jsx' -import { FunctionField } from '/snippets/components/displays/response-fields/ResponseField.jsx' +import { FunctionField as FField } from '/snippets/components/displays/response-fields/ResponseField.jsx' import { DataWrap } from '/snippets/components/wrappers/data/workflows.jsx' - -{/* ADDRESS EXTRACTIONS — sourced from contractAddressesData; no addresses hardcoded below */} -export const arb = contractAddresses.meta.explorerUrls.arbiscan -export const eth = contractAddresses.meta.explorerUrls.etherscan - -export const controller = contractAddresses.arbitrumOne.current.find(c => c.name === 'Controller')?.address -export const bondingManagerProxy = contractAddresses.arbitrumOne.current.find(c => c.name === 'BondingManager' && c.type === 'proxy')?.address -export const bondingManagerTarget = contractAddresses.arbitrumOne.current.find(c => c.name === 'BondingManager' && c.type === 'target')?.address -export const ticketBrokerProxy = contractAddresses.arbitrumOne.current.find(c => c.name === 'TicketBroker' && c.type === 'proxy')?.address -export const ticketBrokerTarget = contractAddresses.arbitrumOne.current.find(c => c.name === 'TicketBroker' && c.type === 'target')?.address -export const roundsManagerProxy = contractAddresses.arbitrumOne.current.find(c => c.name === 'RoundsManager' && c.type === 'proxy')?.address -export const roundsManagerTarget = contractAddresses.arbitrumOne.current.find(c => c.name === 'RoundsManager' && c.type === 'target')?.address -export const minter = contractAddresses.arbitrumOne.current.find(c => c.name === 'Minter')?.address -export const serviceRegistryProxy = contractAddresses.arbitrumOne.current.find(c => c.name === 'ServiceRegistry' && c.type === 'proxy')?.address -export const serviceRegistryTarget = contractAddresses.arbitrumOne.current.find(c => c.name === 'ServiceRegistry' && c.type === 'target')?.address -export const aiServiceRegistry = contractAddresses.arbitrumOne.current.find(c => c.name === 'AIServiceRegistry')?.address -export const lptArb = contractAddresses.arbitrumOne.current.find(c => c.name === 'LivepeerToken')?.address -export const lptEth = contractAddresses.ethereumMainnet.current.find(c => c.name === 'LivepeerToken')?.address - -{/* NOTE Bridgeminter is at https://github.com/livepeer/protocol/blob/streamflow/contracts/token/BridgeMinter.sol*/} -export const bridgeMinter = contractAddresses.ethereumMainnet.current.find(c => c.name === 'BridgeMinter')?.address -export const l2Gateway = contractAddresses.arbitrumOne.current.find(c => c.name === 'L2LPTGateway')?.address -export const l1Gateway = contractAddresses.ethereumMainnet.current.find(c => c.name === 'L1LPTGateway')?.address -export const l1Escrow = contractAddresses.ethereumMainnet.current.find(c => c.name === 'L1Escrow')?.address -export const bondingVotesProxy = contractAddresses.arbitrumOne.current.find(c => c.name === 'BondingVotes' && c.type === 'proxy')?.address -export const bondingVotesTarget = contractAddresses.arbitrumOne.current.find(c => c.name === 'BondingVotes' && c.type === 'target')?.address -export const governor = contractAddresses.arbitrumOne.current.find(c => c.name === 'Governor')?.address -export const livepeerGovernorProxy = contractAddresses.arbitrumOne.current.find(c => c.name === 'LivepeerGovernor' && c.type === 'proxy')?.address -export const livepeerGovernorTarget = contractAddresses.arbitrumOne.current.find(c => c.name === 'LivepeerGovernor' && c.type === 'target')?.address -export const treasury = contractAddresses.arbitrumOne.current.find(c => c.name === 'Treasury')?.address -export const l2Migrator = contractAddresses.arbitrumOne.current.find(c => c.name === 'L2Migrator' && c.type === 'proxy')?.address -export const merkleSnapshot = contractAddresses.arbitrumOne.current.find(c => c.name === 'MerkleSnapshot')?.address -export const lastVerifiedDate = contractAddresses.meta.lastVerified || "Pending" +import { blockchainContractsPageData } from '/snippets/data/contract-addresses/blockchainContractsPageData.jsx' +import { + getBlockchainContract, + getBlockchainCodeHref, + getBlockchainContractAddress, + getBlockchainContracts, + getBlockchainExplorerHref, + getBlockchainLastVerifiedDate, + getNamedBlockchainContract, + getBlockchainRawCodeHref, +} from '/snippets/data/contract-addresses/view-model.jsx' + +<Note> + Use <a href="/v2/about/resources/livepeer-contract-addresses">Contract Addresses</a> for the + current official registry and <a href="/v2/about/resources/livepeer-contract-addresses#verifier-widget-verify-contract-address">Verify Contract Addresses</a> for browser-based or manual self-verification workflows. +</Note> <Tip> - Addresses on this page are automatically updated via a Github Action workflow. <br/> - <span style={{display: "flex", alignItems: "center", marginTop: "0.2rem"}}> Data is sourced from the <DoubleIconLink label="Livepeer Github" href="https://github.com/livepeer/" iconRightColor="var(--hero-text)"/> and verified on-chain. </span> <br/> - <span style={{color: "var(--text)", marginTop: "0.5rem"}}> Last Verified: <DataWrap value={contractAddresses.meta.lastVerified} /> </span> + Addresses on this page are automatically updated via a GitHub Action workflow. <br/> + <FlexContainer align="center" gap="0.25rem" marginTop="0.2rem"> + <span>Data is recovered from live chain state, upstream source provenance, and explorer verification before it is published on the canonical contracts page.</span> + </FlexContainer> + <br/> + *Last Verified:* <DataWrap value={getBlockchainLastVerifiedDate(blockchainContractsPageData)} /> </Tip> <Columns cols={2}> <Card - href="https://github.com/livepeer/governor-scripts/blob/master/updates/addresses.js" + href="https://github.com/livepeer/protocol" icon="github" - title={<>Livepeer Contract Addresses <br/> <Badge color="green"> Canonical Code </Badge></>} + title={<>Livepeer Protocol Source <br/> <Badge color="green"> Commit Pinned </Badge></>} horizontal /> <Card @@ -160,7 +147,7 @@ There are three categories of contracts in the Livepeer Protocol as well as migr <ScrollableDiagram title="Contract Interaction Architecture" maxHeight="1000px" maxWidth="100%" showControls={true}> ```mermaid -%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#1a1a1a', 'primaryTextColor': '#fff', 'primaryBorderColor': '#2d9a67', 'lineColor': '#2d9a67', 'secondaryColor': '#0d0d0d', 'tertiaryColor': '#1a1a1a', 'background': '#0d0d0d', 'fontFamily': 'system-ui', 'clusterBkg': 'transparent', 'clusterBorder': '#2d9a67'}}}%% +%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#18794e', 'primaryTextColor': '#fff', 'primaryBorderColor': '#3cb540', 'lineColor': '#3cb540', 'mainBkg': '#18794e', 'nodeBorder': '#3cb540', 'clusterBkg': 'transparent', 'clusterBorder': '#3cb540', 'titleColor': '#3cb540', 'edgeLabelBackground': 'transparent', 'textColor': '#3cb540', 'nodeTextColor': '#fff'}}}%% graph TB subgraph "Registry" Controller["Controller\nContract Registry"] @@ -240,7 +227,7 @@ graph TB The core protocol contracts manage staking, delegation, reward distribution, round progression, payment processing, and service discovery. The Controller serves as the central registry – upgrading a contract means registering a new target implementation address via the Controller, while the proxy address remains stable. ```mermaid -%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#1a1a1a', 'primaryTextColor': '#fff', 'primaryBorderColor': '#2d9a67', 'lineColor': '#2d9a67', 'secondaryColor': '#0d0d0d', 'tertiaryColor': '#1a1a1a', 'background': '#0d0d0d', 'fontFamily': 'system-ui', 'clusterBkg': 'transparent', 'clusterBorder': '#2d9a67'}}}%% +%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#18794e', 'primaryTextColor': '#fff', 'primaryBorderColor': '#3cb540', 'lineColor': '#3cb540', 'mainBkg': '#18794e', 'nodeBorder': '#3cb540', 'clusterBkg': 'transparent', 'clusterBorder': '#3cb540', 'titleColor': '#3cb540', 'edgeLabelBackground': 'transparent', 'textColor': '#3cb540', 'nodeTextColor': '#fff'}}}%% graph LR D[Delegator] -->|"bond / unbond"| BM[BondingManager] O[Orchestrator] -->|"register / reward"| BM @@ -264,12 +251,12 @@ The Controller is the central registry for all protocol contracts. Every other c <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="Controller"/>} > <AddressLinks - address={controller} - blockchainHref={`${arb}${controller}`} - githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/Controller.sol" + address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'Controller')} + blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'Controller')} + githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'Controller')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active · Deployed by Livepeer Deployer_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registry · Active_ **Purpose**: @@ -280,29 +267,29 @@ The Controller is the central registry for all protocol contracts. Every other c **Key functions** (from `Controller.sol`): -<FunctionField name="getContract" returns="address" params={["bytes32 _id"]}> +<FField name="getContract" returns="address" params={["bytes32 _id"]}> Look up a registered contract by keccak256 name hash -</FunctionField> -<FunctionField name="getContractInfo" returns="(address, bytes20)" params={["bytes32 _id"]}> +</FField> +<FField name="getContractInfo" returns="(address, bytes20)" params={["bytes32 _id"]}> Returns address and git commit hash -</FunctionField> -<FunctionField name="setContractInfo" params={["bytes32 _id", "address _contractAddress", "bytes20 _gitCommitHash"]}> +</FField> +<FField name="setContractInfo" params={["bytes32 _id", "address _contractAddress", "bytes20 _gitCommitHash"]}> Register or update a contract; callable by owner (Governor) only -</FunctionField> -<FunctionField name="pause"> +</FField> +<FField name="pause"> Halt all contracts that check `controller.paused()` -</FunctionField> -<FunctionField name="unpause"> +</FField> +<FField name="unpause"> Resume all contracts that check `controller.paused()` -</FunctionField> -<FunctionField name="updateController" params={["bytes32 _id", "address _controller"]}> +</FField> +<FField name="updateController" params={["bytes32 _id", "address _controller"]}> Update the Controller reference in a registered contract -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/Controller.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'controller')} title={<DoubleIconLink label="Controller.sol"/>} filename="Controller.sol" /> @@ -321,13 +308,9 @@ Source: `BondingManager.sol` includes this as struct comment: "// % of fees paid <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="BondingManager" />}> **Address (Arbitrum One)**: - <AddressLinks address={bondingManagerProxy} blockchainHref={`${arb}${bondingManagerProxy}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/bonding/BondingManager.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'BondingManager', 'proxy')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'BondingManager', 'proxy')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'BondingManager', 'proxy')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active_ - - {/* Current target (V11, deployed 16 Feb 2026): 0x4bA7E7531Ab56bC8d78dB4FDc88D21F621f34BB4 - Confirmed via Controller.getContract(keccak256("BondingManagerTarget")) on-chain 18 Mar 2026. - Source code not yet verified on Blockscout — SolidityEmbed below shows delta branch source which should match. */} +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active · Proxy target resolved · Target V13_ **Purpose**: @@ -345,56 +328,56 @@ Source: `BondingManager.sol` includes this as struct comment: "// % of fees paid **Key functions** (from `BondingManager.sol`, `delta` branch): -<FunctionField name="bond" params={["uint256 _amount", "address _to"]}> +<FField name="bond" params={["uint256 _amount", "address _to"]}> Delegate LPT stake to an orchestrator -</FunctionField> -<FunctionField name="unbond" params={["uint256 _amount"]}> +</FField> +<FField name="unbond" params={["uint256 _amount"]}> Begin withdrawal; creates an unbonding lock, starts the unbonding period -</FunctionField> -<FunctionField name="rebond" params={["uint256 _unbondingLockId"]}> +</FField> +<FField name="rebond" params={["uint256 _unbondingLockId"]}> Cancel unbonding and re-bond stake to current delegate -</FunctionField> -<FunctionField name="rebondFromUnbonded" params={["address _to", "uint256 _unbondingLockId"]}> +</FField> +<FField name="rebondFromUnbonded" params={["address _to", "uint256 _unbondingLockId"]}> Re-bond to a new orchestrator from unbonded state -</FunctionField> -<FunctionField name="withdrawStake" params={["uint256 _unbondingLockId"]}> +</FField> +<FField name="withdrawStake" params={["uint256 _unbondingLockId"]}> Complete withdrawal after unbonding period expires -</FunctionField> -<FunctionField name="withdrawFees" params={["address payable _recipient", "uint256 _amount"]}> +</FField> +<FField name="withdrawFees" params={["address payable _recipient", "uint256 _amount"]}> Withdraw accumulated ETH fees to a recipient address -</FunctionField> -<FunctionField name="transcoder" params={["uint256 _rewardCut", "uint256 _feeShare"]}> +</FField> +<FField name="transcoder" params={["uint256 _rewardCut", "uint256 _feeShare"]}> Register as an orchestrator or update parameters; `_rewardCut` is % of reward kept by orchestrator; `_feeShare` is % of fees passed to delegators -</FunctionField> -<FunctionField name="reward"> +</FField> +<FField name="reward"> Called by active orchestrators each round to mint inflationary LPT and distribute to earnings pool -</FunctionField> -<FunctionField name="claimEarnings" params={["uint256 _endRound"]}> +</FField> +<FField name="claimEarnings" params={["uint256 _endRound"]}> Claim accumulated rewards and fees. Note: `_endRound` is unused; earnings are always claimed through the current round regardless of the value passed. -</FunctionField> -<FunctionField name="checkpointBondingState" params={["address _account"]}> +</FField> +<FField name="checkpointBondingState" params={["address _account"]}> Publicly callable function to fix a stale voting power checkpoint for any account. Useful for operators after an inconsistent state. -</FunctionField> -<FunctionField name="transferBond" params={["address _delegator", "uint256 _amount", "address _oldDelegateNewPosPrev", "address _oldDelegateNewPosNext", "address _newDelegateNewPosPrev", "address _newDelegateNewPosNext"]}> +</FField> +<FField name="transferBond" params={["address _delegator", "uint256 _amount", "address _oldDelegateNewPosPrev", "address _oldDelegateNewPosNext", "address _newDelegateNewPosPrev", "address _newDelegateNewPosNext"]}> Transfer ownership of a bond (or portion) to a new delegator. Used for stake migrations between wallets. -</FunctionField> -<FunctionField name="pendingStake" returns="uint256" params={["address _addr", "uint256 _endRound"]}> +</FField> +<FField name="pendingStake" returns="uint256" params={["address _addr", "uint256 _endRound"]}> Returns unclaimed pending stake for a delegator through the current round -</FunctionField> -<FunctionField name="pendingFees" returns="uint256" params={["address _addr", "uint256 _endRound"]}> +</FField> +<FField name="pendingFees" returns="uint256" params={["address _addr", "uint256 _endRound"]}> Returns unclaimed pending ETH fees for a delegator through the current round -</FunctionField> -<FunctionField name="getTranscoder" params={["address _transcoder"]}> +</FField> +<FField name="getTranscoder" params={["address _transcoder"]}> Returns orchestrator state: lastRewardRound, rewardCut, feeShare, activationRound, deactivationRound, cumulativeRewards, cumulativeFees, lastFeeRound -</FunctionField> -<FunctionField name="getDelegator" params={["address _delegator"]}> +</FField> +<FField name="getDelegator" params={["address _delegator"]}> Returns delegator state: bondedAmount, fees, delegateAddress, delegatedAmount, startRound, lastClaimRound, nextUnbondingLockId -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/bonding/BondingManager.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'bonding-manager')} title={<DoubleIconLink label="BondingManager.sol"/>} filename="BondingManager.sol" /> @@ -409,9 +392,9 @@ The TicketBroker implements Livepeer's off-chain probabilistic micropayment (PM) <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="TicketBroker" />}> **Address (Arbitrum One)**: - <AddressLinks address={ticketBrokerProxy} blockchainHref={`${arb}${ticketBrokerProxy}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/pm/TicketBroker.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'TicketBroker', 'proxy')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'TicketBroker', 'proxy')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'TicketBroker', 'proxy')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active · Proxy target resolved_ **Purpose**: @@ -423,41 +406,41 @@ The TicketBroker implements Livepeer's off-chain probabilistic micropayment (PM) **Key functions** (from `MixinTicketBrokerCore.sol`): -<FunctionField name="fundDeposit"> +<FField name="fundDeposit"> Gateway adds ETH to deposit (payable) -</FunctionField> -<FunctionField name="fundReserve"> +</FField> +<FField name="fundReserve"> Gateway adds ETH to reserve (payable) -</FunctionField> -<FunctionField name="fundDepositAndReserve" params={["uint256 _depositAmount", "uint256 _reserveAmount"]}> +</FField> +<FField name="fundDepositAndReserve" params={["uint256 _depositAmount", "uint256 _reserveAmount"]}> Fund both deposit and reserve in one call (payable); msg.value must equal the sum of both amounts -</FunctionField> -<FunctionField name="fundDepositAndReserveFor" params={["address _addr", "uint256 _depositAmount", "uint256 _reserveAmount"]}> +</FField> +<FField name="fundDepositAndReserveFor" params={["address _addr", "uint256 _depositAmount", "uint256 _reserveAmount"]}> Fund deposit and reserve on behalf of another address (payable) -</FunctionField> -<FunctionField name="redeemWinningTicket" params={["Ticket memory _ticket", "bytes memory _sig", "uint256 _recipientRand"]}> +</FField> +<FField name="redeemWinningTicket" params={["Ticket memory _ticket", "bytes memory _sig", "uint256 _recipientRand"]}> Orchestrator redeems a winning ticket; transfers ETH to fee pool via BondingManager. Emits both `WinningTicketTransfer` and `WinningTicketRedeemed`. -</FunctionField> -<FunctionField name="unlock"> +</FField> +<FField name="unlock"> Gateway initiates the withdrawal unlock period; emits `Unlock` -</FunctionField> -<FunctionField name="cancelUnlock"> +</FField> +<FField name="cancelUnlock"> Gateway cancels an in-progress unlock; emits `UnlockCancelled` -</FunctionField> -<FunctionField name="withdraw"> +</FField> +<FField name="withdraw"> Gateway withdraws all deposit and reserve after unlock period; emits `Withdrawal` -</FunctionField> -<FunctionField name="getSenderInfo" returns="(Sender memory sender, ReserveInfo memory reserve)" params={["address _sender"]}> +</FField> +<FField name="getSenderInfo" returns="(Sender memory sender, ReserveInfo memory reserve)" params={["address _sender"]}> Returns full sender state: deposit amount, withdrawRound, and reserve info -</FunctionField> -<FunctionField name="isUnlockInProgress" returns="bool" params={["address _sender"]}> +</FField> +<FField name="isUnlockInProgress" returns="bool" params={["address _sender"]}> Returns whether a sender has an unlock in progress -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/pm/TicketBroker.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'ticket-broker')} title={<DoubleIconLink label="TicketBroker.sol"/>} filename="TicketBroker.sol" /> @@ -472,9 +455,9 @@ The RoundsManager defines the protocol's time unit. A round is a fixed number of <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="RoundsManager" />}> **Address (Arbitrum One)**: - <AddressLinks address={roundsManagerProxy} blockchainHref={`${arb}${roundsManagerProxy}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/rounds/RoundsManager.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'RoundsManager', 'proxy')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'RoundsManager', 'proxy')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'RoundsManager', 'proxy')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active · Proxy target resolved_ **Purpose**: @@ -485,32 +468,32 @@ The RoundsManager defines the protocol's time unit. A round is a fixed number of **Key functions** (from `RoundsManager.sol`): -<FunctionField name="initializeRound"> +<FField name="initializeRound"> Initialise a new round; callable by any address; updates block hash store and lip upgrade rounds -</FunctionField> -<FunctionField name="currentRound" returns="uint256"> +</FField> +<FField name="currentRound" returns="uint256"> Returns current round number -</FunctionField> -<FunctionField name="currentRoundInitialized" returns="bool"> +</FField> +<FField name="currentRoundInitialized" returns="bool"> Returns whether the current round has been initialised -</FunctionField> -<FunctionField name="currentRoundLocked" returns="bool"> +</FField> +<FField name="currentRoundLocked" returns="bool"> Returns whether the current round is in its lock period -</FunctionField> -<FunctionField name="blockHashForRound" returns="bytes32" params={["uint256 _round"]}> +</FField> +<FField name="blockHashForRound" returns="bytes32" params={["uint256 _round"]}> Returns the stored block hash for a given round -</FunctionField> -<FunctionField name="roundLength" returns="uint256"> +</FField> +<FField name="roundLength" returns="uint256"> Returns round length in blocks -</FunctionField> -<FunctionField name="roundLockAmount" returns="uint256"> +</FField> +<FField name="roundLockAmount" returns="uint256"> Returns lock period as a percentage of round length (MathUtils percPoint) -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/rounds/RoundsManager.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'rounds-manager')} title={<DoubleIconLink label="RoundsManager.sol"/>} filename="RoundsManager.sol" /> @@ -521,13 +504,13 @@ The RoundsManager defines the protocol's time unit. A round is a fixed number of <Badge color="blue"> Arbitrum One </Badge> -The Minter controls LPT token inflation. Each round it calculates the mintable token supply based on the configured inflation rate. Since the Delta upgrade (LIP-91), a configurable fraction of each round's reward is minted to the Treasury rather than solely to orchestrators and delegators. +The Minter controls LPT token inflation. Each round it calculates the mintable token supply based on the configured inflation rate. Since the Delta upgrade (LIP-91), a configurable fraction of each round's reward is minted to the Treasury, with the remainder minted to orchestrators and delegators. <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="Minter" />}> **Address (Arbitrum One)**: - <AddressLinks address={minter} blockchainHref={`${arb}${minter}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/token/Minter.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'Minter')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'Minter')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'Minter')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active_ **Purpose**: @@ -539,41 +522,41 @@ The Minter controls LPT token inflation. Each round it calculates the mintable t **Key functions** (from `Minter.sol`): -<FunctionField name="createReward" returns="uint256" params={["uint256 _fracNum", "uint256 _fracDenom"]}> +<FField name="createReward" returns="uint256" params={["uint256 _fracNum", "uint256 _fracDenom"]}> Called only by BondingManager; mints a fraction of mintable tokens for the round as a reward -</FunctionField> -<FunctionField name="trustedTransferTokens" params={["address _to", "uint256 _amount"]}> +</FField> +<FField name="trustedTransferTokens" params={["address _to", "uint256 _amount"]}> Transfer LPT to an address; callable by BondingManager only -</FunctionField> -<FunctionField name="trustedBurnTokens" params={["uint256 _amount"]}> +</FField> +<FField name="trustedBurnTokens" params={["uint256 _amount"]}> Burn LPT; callable by BondingManager only -</FunctionField> -<FunctionField name="trustedWithdrawETH" params={["address payable _to", "uint256 _amount"]}> +</FField> +<FField name="trustedWithdrawETH" params={["address payable _to", "uint256 _amount"]}> Withdraw ETH to an address; callable by BondingManager only -</FunctionField> -<FunctionField name="depositETH"> +</FField> +<FField name="depositETH"> Receive ETH from TicketBroker on ticket redemption (payable) -</FunctionField> -<FunctionField name="currentMintableTokens" returns="uint256"> +</FField> +<FField name="currentMintableTokens" returns="uint256"> Returns LPT mintable in the current round -</FunctionField> -<FunctionField name="currentMintedTokens" returns="uint256"> +</FField> +<FField name="currentMintedTokens" returns="uint256"> Returns LPT already minted in the current round -</FunctionField> -<FunctionField name="inflation" returns="uint256"> +</FField> +<FField name="inflation" returns="uint256"> Returns current inflation rate as a MathUtils percPoint value -</FunctionField> -<FunctionField name="inflationChange" returns="uint256"> +</FField> +<FField name="inflationChange" returns="uint256"> Returns per-round inflation adjustment amount -</FunctionField> -<FunctionField name="targetBondingRate" returns="uint256"> +</FField> +<FField name="targetBondingRate" returns="uint256"> Returns the target bonding rate that inflation adjusts towards -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/token/Minter.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'minter')} title={<DoubleIconLink label="Minter.sol"/>} filename="Minter.sol" /> @@ -588,9 +571,9 @@ The ServiceRegistry stores each orchestrator's publicly advertised HTTPS service <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="ServiceRegistry" />}> **Address (Arbitrum One)**: - <AddressLinks address={serviceRegistryProxy} blockchainHref={`${arb}${serviceRegistryProxy}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/ServiceRegistry.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'ServiceRegistry', 'proxy')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'ServiceRegistry', 'proxy')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'ServiceRegistry', 'proxy')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · ~600 transactions · Last active Jan 2026_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active · Proxy target resolved_ **Purpose**: @@ -600,17 +583,17 @@ The ServiceRegistry stores each orchestrator's publicly advertised HTTPS service **Key functions** (from `ServiceRegistry.sol`): -<FunctionField name="setServiceURI" params={["string calldata _serviceURI"]}> +<FField name="setServiceURI" params={["string calldata _serviceURI"]}> Orchestrator registers or updates their HTTPS endpoint; emits `ServiceURIUpdate(address indexed _addr, string _serviceURI)` -</FunctionField> -<FunctionField name="getServiceURI" returns="string" params={["address _addr"]}> +</FField> +<FField name="getServiceURI" returns="string" params={["address _addr"]}> Returns the registered URI for a given orchestrator address -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/ServiceRegistry.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'service-registry')} title={<DoubleIconLink label="ServiceRegistry.sol"/>} filename="ServiceRegistry.sol" /> @@ -621,13 +604,13 @@ The ServiceRegistry stores each orchestrator's publicly advertised HTTPS service <Badge color="blue"> Arbitrum One </Badge> -A standalone ServiceRegistry for AI subnet orchestrators. Detached from the Controller – its address is hardcoded in go-livepeer (`starter.go`) rather than resolved dynamically. Deployed by a different deployer than the main protocol contracts. +A standalone ServiceRegistry for AI subnet orchestrators. Detached from the Controller, its address is hardcoded in go-livepeer (`starter.go`) instead of being resolved dynamically. Deployed by a separate deployer from the main protocol contracts. <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="AIServiceRegistry" />}> **Address (Arbitrum One)**: - <AddressLinks address={aiServiceRegistry} blockchainHref={`${arb}${aiServiceRegistry}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/ServiceRegistry.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'AIServiceRegistry')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'AIServiceRegistry')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'AIServiceRegistry')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Deployed Apr 2024 · Active · Deployed by AI subnet deployer (different from main Livepeer Deployer)_ +<Icon icon="check" color="var(--text)"/> _Verified · Deployment artifact confirmed · Runtime consumer confirmed · Active_ **Purpose**: @@ -650,7 +633,7 @@ On Ethereum Mainnet, only the `LivepeerToken` and `BridgeMinter` contracts remai </Info> ```mermaid -%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#1a1a1a', 'primaryTextColor': '#fff', 'primaryBorderColor': '#2d9a67', 'lineColor': '#2d9a67', 'secondaryColor': '#0d0d0d', 'tertiaryColor': '#1a1a1a', 'background': '#0d0d0d', 'fontFamily': 'system-ui', 'clusterBkg': 'transparent', 'clusterBorder': '#2d9a67'}}}%% +%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#18794e', 'primaryTextColor': '#fff', 'primaryBorderColor': '#3cb540', 'lineColor': '#3cb540', 'mainBkg': '#18794e', 'nodeBorder': '#3cb540', 'clusterBkg': 'transparent', 'clusterBorder': '#3cb540', 'titleColor': '#3cb540', 'edgeLabelBackground': 'transparent', 'textColor': '#3cb540', 'nodeTextColor': '#fff'}}}%% graph TB subgraph "Ethereum Mainnet" L1LPT["LivepeerToken (origin)"] @@ -681,15 +664,15 @@ The LivepeerToken is the native protocol token. It is an ERC-20 with AccessContr <Accordion title={<CustomCardTitle variant="accordion" icon={<LivepeerIcon color="var(--accent)" size={13} />} title="LivepeerToken" />}> **Address (Arbitrum One)**: - <AddressLinks address={lptArb} blockchainHref={`${arb}${lptArb}`} githubHref="https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L2/token/LivepeerToken.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'LivepeerToken')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'LivepeerToken')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'LivepeerToken')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · 261,217 holders · Active_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active_ **Address (Ethereum Mainnet)**: - <AddressLinks address={lptEth} blockchainHref={`${eth}${lptEth}`} githubHref="https://github.com/livepeer/protocol/blob/master/contracts/token/LivepeerToken.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'ethereumMainnet', 'LivepeerToken')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'ethereumMainnet', 'LivepeerToken')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'ethereumMainnet', 'LivepeerToken')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · 1.88M holders · Origin token_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active_ **Purpose**: @@ -699,23 +682,23 @@ The LivepeerToken is the native protocol token. It is an ERC-20 with AccessContr **Key functions** (from `LivepeerToken.sol`, inherits [OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/api/token/erc20) ERC20 + ERC20Permit + ERC20Burnable + AccessControl): -<FunctionField name="transfer / transferFrom / approve / balanceOf / totalSupply / allowance"> +<FField name="transfer / transferFrom / approve / balanceOf / totalSupply / allowance"> Standard ERC-20 interface -</FunctionField> -<FunctionField name="permit" params={["..."]}> +</FField> +<FField name="permit" params={["..."]}> EIP-2612 gasless approval -</FunctionField> -<FunctionField name="mint" params={["address _to", "uint256 _amount"]}> +</FField> +<FField name="mint" params={["address _to", "uint256 _amount"]}> Callable only by MINTER_ROLE (Minter contract on Arbitrum, BridgeMinter on L1) -</FunctionField> -<FunctionField name="burn" params={["uint256 _amount"]}> +</FField> +<FField name="burn" params={["uint256 _amount"]}> Callable only by BURNER_ROLE -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/main/contracts/L2/token/LivepeerToken.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'livepeer-token-arbitrum')} title={<DoubleIconLink label="LivepeerToken.sol (L2)"/>} filename="LivepeerToken.sol" /> @@ -730,13 +713,17 @@ Holds MINTER_ROLE on the L1 LivepeerToken. Called by the bridge when LPT is tran <Info> `BridgeMinter.sol` is an Ethereum Mainnet contract predating the Delta upgrade. - <span style={{display: "flex", alignItems: "center", marginTop: "0.5rem"}}> See <DoubleIconLink label="BridgeMinter.sol" href="https://github.com/livepeer/protocol/blob/streamflow/contracts/token/BridgeMinter.sol"/> on the `streamflow` branch of `livepeer/protocol`</span> + <FlexContainer align="center" gap="0.25rem" marginTop="0.5rem"> + <span>See</span> + <DoubleIconLink label="BridgeMinter.sol" href={getBlockchainCodeHref(blockchainContractsPageData, 'ethereumMainnet', 'BridgeMinter')}/> + <span>on the `streamflow` branch of `livepeer/protocol`</span> + </FlexContainer> </Info> <Accordion title={<CustomCardTitle variant="accordion" icon={<Icon icon="ethereum" color="var(--hero-text)"/>} title="BridgeMinter" />}> **Address (Ethereum Mainnet)**: - <AddressLinks address={bridgeMinter} blockchainHref={`${eth}${bridgeMinter}`} githubHref="https://github.com/livepeer/protocol/blob/streamflow/contracts/token/BridgeMinter.sol" /> - <Icon icon="check" color="var(--text)"/> _Verified · Active · "Livepeer: Bridge Minter" on Blockscout_ + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'ethereumMainnet', 'BridgeMinter')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'ethereumMainnet', 'BridgeMinter')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'ethereumMainnet', 'BridgeMinter')} /> + <Icon icon="check" color="var(--text)"/> _Verified · Bridge-derived · Active_ **Purpose**: @@ -747,26 +734,26 @@ Holds MINTER_ROLE on the L1 LivepeerToken. Called by the bridge when LPT is tran **Key functions** (from `BridgeMinter.sol`, `streamflow` branch): -<FunctionField name="bridgeMint" params={["address _to", "uint256 _amount"]}> +<FField name="bridgeMint" params={["address _to", "uint256 _amount"]}> Mint LPT to an address; callable by L1LPTGateway only -</FunctionField> -<FunctionField name="withdrawETHToL1Migrator" returns="uint256"> +</FField> +<FField name="withdrawETHToL1Migrator" returns="uint256"> Send contract ETH balance to L1Migrator; callable by L1Migrator only -</FunctionField> -<FunctionField name="withdrawLPTToL1Migrator" returns="uint256"> +</FField> +<FField name="withdrawLPTToL1Migrator" returns="uint256"> Send contract LPT balance to L1Migrator; callable by L1Migrator only -</FunctionField> -<FunctionField name="migrateToNewMinter" params={["address _newMinterAddr"]}> +</FField> +<FField name="migrateToNewMinter" params={["address _newMinterAddr"]}> Transfer token ownership and balances to a new Minter; callable by Controller owner only -</FunctionField> -<FunctionField name="depositETH" returns="bool"> +</FField> +<FField name="depositETH" returns="bool"> Accept ETH deposits; required for migration compatibility with older Minter implementations (payable) -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/streamflow/contracts/token/BridgeMinter.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'bridge-minter')} title={<DoubleIconLink label="BridgeMinter.sol"/>} filename="BridgeMinter.sol" /> @@ -784,75 +771,36 @@ Paired bridge gateway contracts on Ethereum Mainnet (L1) and Arbitrum One (L2). <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="Bridge Gateways" />}> **L2LPTGateway (Arbitrum One)**: - <AddressLinks address={l2Gateway} blockchainHref={`${arb}${l2Gateway}`} githubHref="https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L2/gateway/L2LPTGateway.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'L2LPTGateway')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'L2LPTGateway')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'L2LPTGateway')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active_ + <Icon icon="check" color="var(--text)"/> _Verified · Bridge-derived · Bridge artifact confirmed · Active_ **L1LPTGateway (Ethereum Mainnet)**: - <AddressLinks address={l1Gateway} blockchainHref={`${eth}${l1Gateway}`} githubHref="https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L1/gateway/L1LPTGateway.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'ethereumMainnet', 'L1LPTGateway')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'ethereumMainnet', 'L1LPTGateway')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'ethereumMainnet', 'L1LPTGateway')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active_ + <Icon icon="check" color="var(--text)"/> _Verified · Bridge-derived · Bridge artifact confirmed · Active_ **L1Escrow (Ethereum Mainnet)**: - <AddressLinks address={l1Escrow} blockchainHref={`${eth}${l1Escrow}`} githubHref="https://github.com/livepeer/arbitrum-lpt-bridge/blob/main/contracts/L1/escrow/L1Escrow.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'ethereumMainnet', 'L1Escrow')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'ethereumMainnet', 'L1Escrow')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'ethereumMainnet', 'L1Escrow')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active · Holds bridged LPT_ + <Icon icon="check" color="var(--text)"/> _Verified · Bridge-derived · Bridge artifact confirmed · Active_ **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/arbitrum-lpt-bridge/main/contracts/L2/gateway/L2LPTGateway.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'l2-lpt-gateway')} title={<DoubleIconLink label="L2LPTGateway.sol"/>} filename="L2LPTGateway.sol" /> </Accordion> -#### **LivepeerTokenFaucet** <Subtitle text="Test Token Distribution" /> -<Badge color="surface">Testnet Deployments</Badge> - -<Info> -The LivepeerTokenFaucet is a non-production deploy-time convenience contract. -<br/> There is currently no active public testnet on Arbitrum or Ethereum. -<br/> You can run your own testnet using the full deploy script at [deploy/deploy_contracts.ts](https://github.com/livepeer/protocol/blob/streamflow/deploy/deploy_contracts.ts) -</Info> - -A deploy-time convenience contract that distributes test LPT in local and testnet environments. -It deploys automatically via [`deploy_contracts.ts`](https://github.com/livepeer/protocol/blob/delta/deploy/deploy_contracts.ts) when targeting any non-production network, seeded with `genesis.crowdSupply` worth of test LPT. -<br/> It is never deployed on `mainnet` or `arbitrumMainnet`. - -<Accordion title={<CustomCardTitle variant="accordion" icon={<Icon icon="dev" color="var(--text)"/>} title="LivepeerTokenFaucet" />} > - -**Purpose**: - -- Distributes test LPT to developers running a local Livepeer stack -- Enforces a per-address rate limit via `requestWait` (in hours) between requests -- Whitelist addresses bypass the rate limit entirely -- Seeded at deploy time with `genesis.crowdSupply`; never exists on mainnet or Arbitrum One mainnet +#### **LivepeerTokenFaucet** <Subtitle text="Local development utility" /> +<Badge color="surface">Local development</Badge> -**Key functions** (from `LivepeerTokenFaucet.sol`): - -<FunctionField name="request"> - Request test LPT; transfers `requestAmount` to caller. Requires either whitelisted status or that `requestWait` hours have elapsed since last request. -</FunctionField> -<FunctionField name="addToWhitelist" params={["address _addr"]}> - Add an address to the rate-limit bypass whitelist; callable by owner only -</FunctionField> -<FunctionField name="removeFromWhitelist" params={["address _addr"]}> - Remove an address from the whitelist; callable by owner only -</FunctionField> - -**Contract** - -<SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/token/LivepeerTokenFaucet.sol" - title={<DoubleIconLink label="LivepeerTokenFaucet.sol"/>} - filename="LivepeerTokenFaucet.sol" -/> - -</Accordion> +<Note>Local development utility contract.</Note> <CustomDivider /> @@ -861,7 +809,7 @@ It deploys automatically via [`deploy_contracts.ts`](https://github.com/livepeer The Delta upgrade ([LIP-89](https://github.com/livepeer/LIPs/blob/master/LIPs/LIP-89.md), [LIP-91](https://github.com/livepeer/LIPs/blob/master/LIPs/LIP-91.md) - October 2023) introduced full on-chain governance alongside the [Livepeer Treasury](/v2/about/livepeer-protocol/treasury). The governance system consists of four contracts working together: BondingVotes checkpoints voting power, LivepeerGovernor manages proposal voting, Treasury holds protocol funds, and Governor executes approved upgrades. ```mermaid -%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#1a1a1a', 'primaryTextColor': '#fff', 'primaryBorderColor': '#2d9a67', 'lineColor': '#2d9a67', 'secondaryColor': '#0d0d0d', 'tertiaryColor': '#1a1a1a', 'background': '#0d0d0d', 'fontFamily': 'system-ui', 'clusterBkg': 'transparent', 'clusterBorder': '#2d9a67'}}}%% +%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#18794e', 'primaryTextColor': '#fff', 'primaryBorderColor': '#3cb540', 'lineColor': '#3cb540', 'mainBkg': '#18794e', 'nodeBorder': '#3cb540', 'clusterBkg': 'transparent', 'clusterBorder': '#3cb540', 'titleColor': '#3cb540', 'edgeLabelBackground': 'transparent', 'textColor': '#3cb540', 'nodeTextColor': '#fff'}}}%% graph LR BM[BondingManager] -->|"checkpoint"| BV[BondingVotes] D[Delegator] -->|"castVote()"| LG[LivepeerGovernor] @@ -882,9 +830,9 @@ BondingVotes implements the ERC-5805 votes interface, storing per-round stake ch <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="BondingVotes" />}> **Address (Arbitrum One)**: - <AddressLinks address={bondingVotesProxy} blockchainHref={`${arb}${bondingVotesProxy}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/bonding/BondingVotes.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'BondingVotes', 'proxy')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'BondingVotes', 'proxy')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'BondingVotes', 'proxy')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active · Proxy target resolved · Target V2_ **Purpose**: @@ -895,26 +843,26 @@ BondingVotes implements the ERC-5805 votes interface, storing per-round stake ch **Key functions** (from `BondingVotes.sol`, `delta` branch): -<FunctionField name="checkpointBondingState" params={["address _owner", "uint256 _startRound", "uint256 _bondedAmount", "address _delegateAddress", "uint256 _delegatedAmount", "uint256 _lastClaimRound", "uint256 _lastRewardRound"]}> +<FField name="checkpointBondingState" params={["address _owner", "uint256 _startRound", "uint256 _bondedAmount", "address _delegateAddress", "uint256 _delegatedAmount", "uint256 _lastClaimRound", "uint256 _lastRewardRound"]}> Called by BondingManager to checkpoint stake state; not callable directly by users -</FunctionField> -<FunctionField name="checkpointTotalActiveStake" params={["uint256 _totalStake", "uint256 _round"]}> +</FField> +<FField name="checkpointTotalActiveStake" params={["uint256 _totalStake", "uint256 _round"]}> Checkpoint total active stake; called by BondingManager -</FunctionField> -<FunctionField name="getPastVotes" returns="uint256" params={["address _account", "uint256 _round"]}> +</FField> +<FField name="getPastVotes" returns="uint256" params={["address _account", "uint256 _round"]}> Returns voting power for an account at the start of a given round -</FunctionField> -<FunctionField name="getPastTotalSupply" returns="uint256" params={["uint256 _round"]}> +</FField> +<FField name="getPastTotalSupply" returns="uint256" params={["uint256 _round"]}> Returns total voting power (active stake) at a given round -</FunctionField> -<FunctionField name="hasCheckpoint" returns="bool" params={["address _account"]}> +</FField> +<FField name="hasCheckpoint" returns="bool" params={["address _account"]}> Returns whether an account has any checkpointed stake -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/bonding/BondingVotes.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'bonding-votes')} title={<DoubleIconLink label="BondingVotes.sol"/>} filename="BondingVotes.sol" /> @@ -929,9 +877,9 @@ The original upgrade execution contract. Holds the owner role on the Controller. <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="Governor" />}> **Address (Arbitrum One)**: - <AddressLinks address={governor} blockchainHref={`${arb}${governor}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/governance/Governor.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'Governor')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'Governor')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'Governor')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active · Deployed by Livepeer Deployer_ +<Icon icon="check" color="var(--text)"/> _Verified · Deployment artifact confirmed · Active_ **Purpose**: @@ -941,15 +889,15 @@ The original upgrade execution contract. Holds the owner role on the Controller. **Key functions** (from `Governor.sol`): -<FunctionField name="stage" params={["Update memory _update", "uint256 _delay"]}> +<FField name="stage" params={["Update memory _update", "uint256 _delay"]}> Queue a batch of upgrade transactions with a delay in blocks; callable by owner only; emits `UpdateStaged` -</FunctionField> -<FunctionField name="execute" params={["Update memory _update"]}> +</FField> +<FField name="execute" params={["Update memory _update"]}> Execute a queued update after its block delay has elapsed; emits `UpdateExecuted` -</FunctionField> -<FunctionField name="cancel" params={["Update memory _update"]}> +</FField> +<FField name="cancel" params={["Update memory _update"]}> Cancel a staged update; callable by owner only; emits `UpdateCancelled` -</FunctionField> +</FField> The `Update` struct contains: `address[] target`, `uint256[] value`, `bytes[] data`, `uint256 nonce`. @@ -958,7 +906,7 @@ The `Update` struct contains: `address[] target`, `uint256[] value`, `bytes[] da **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/governance/Governor.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'governor')} title={<DoubleIconLink label="Governor.sol"/>} filename="Governor.sol" /> @@ -973,9 +921,9 @@ Implements [OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/api/govern <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="LivepeerGovernor" />}> **Address (Arbitrum One)**: - <AddressLinks address={livepeerGovernorProxy} blockchainHref={`${arb}${livepeerGovernorProxy}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/treasury/LivepeerGovernor.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'LivepeerGovernor', 'proxy')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'LivepeerGovernor', 'proxy')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'LivepeerGovernor', 'proxy')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active · Proxy target resolved_ **Purpose**: @@ -986,35 +934,35 @@ Implements [OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/api/govern **Key functions** (from `LivepeerGovernor.sol`, `delta` branch): -<FunctionField name="initialize" params={["uint256 _initialVotingDelay", "uint256 _initialVotingPeriod", "uint256 _initialProposalThreshold", "uint256 _initialQuorumNumerator", "TimelockControllerUpgradeable _timelock", "address _controller"]}> +<FField name="initialize" params={["uint256 _initialVotingDelay", "uint256 _initialVotingPeriod", "uint256 _initialProposalThreshold", "uint256 _initialQuorumNumerator", "TimelockControllerUpgradeable _timelock", "address _controller"]}> One-time initialisation via proxy -</FunctionField> -<FunctionField name="propose" returns="uint256" params={["address[] memory targets", "uint256[] memory values", "bytes[] memory calldatas", "string memory description"]}> +</FField> +<FField name="propose" returns="uint256" params={["address[] memory targets", "uint256[] memory values", "bytes[] memory calldatas", "string memory description"]}> Submit a new governance proposal; returns proposalId -</FunctionField> -<FunctionField name="castVote" returns="uint256" params={["uint256 proposalId", "uint8 support"]}> +</FField> +<FField name="castVote" returns="uint256" params={["uint256 proposalId", "uint8 support"]}> Cast a vote (0=Against, 1=For, 2=Abstain) -</FunctionField> -<FunctionField name="castVoteWithReason" returns="uint256" params={["uint256 proposalId", "uint8 support", "string calldata reason"]}> +</FField> +<FField name="castVoteWithReason" returns="uint256" params={["uint256 proposalId", "uint8 support", "string calldata reason"]}> Vote with explanation -</FunctionField> -<FunctionField name="queue" returns="uint256" params={["address[] memory targets", "uint256[] memory values", "bytes[] memory calldatas", "bytes32 descriptionHash"]}> +</FField> +<FField name="queue" returns="uint256" params={["address[] memory targets", "uint256[] memory values", "bytes[] memory calldatas", "bytes32 descriptionHash"]}> Queue a passed proposal into the timelock -</FunctionField> -<FunctionField name="execute" returns="uint256" params={["address[] memory targets", "uint256[] memory values", "bytes[] memory calldatas", "bytes32 descriptionHash"]}> +</FField> +<FField name="execute" returns="uint256" params={["address[] memory targets", "uint256[] memory values", "bytes[] memory calldatas", "bytes32 descriptionHash"]}> Execute a queued proposal after timelock delay -</FunctionField> -<FunctionField name="quorumDenominator" returns="uint256"> +</FField> +<FField name="quorumDenominator" returns="uint256"> Returns `MathUtils.PERC_DIVISOR` (the quorum denominator) -</FunctionField> -<FunctionField name="bumpGovernorVotesTokenAddress"> +</FField> +<FField name="bumpGovernorVotesTokenAddress"> Update the internal BondingVotes reference if its address has changed -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/treasury/LivepeerGovernor.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'livepeer-governor')} title={<DoubleIconLink label="LivepeerGovernor.sol"/>} filename="LivepeerGovernor.sol" /> @@ -1029,9 +977,9 @@ An [OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/api/governance#Tim <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="Treasury" />}> **Address (Arbitrum One)**: - <AddressLinks address={treasury} blockchainHref={`${arb}${treasury}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/treasury/Treasury.sol" /> + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'Treasury')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'Treasury')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'Treasury')} /> {/* CHANGELOG PIPELINE UPDATE */} -<Icon icon="check" color="var(--text)"/> _Verified · Active_ +<Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Active_ **Purpose**: @@ -1043,29 +991,29 @@ An [OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/api/governance#Tim **Key functions** ([OpenZeppelin](https://docs.openzeppelin.com/contracts/5.x/api/governance#TimelockController)) TimelockControllerUpgradeable): -<FunctionField name="schedule" params={["address target", "uint256 value", "bytes calldata data", "bytes32 predecessor", "bytes32 salt", "uint256 delay"]}> +<FField name="schedule" params={["address target", "uint256 value", "bytes calldata data", "bytes32 predecessor", "bytes32 salt", "uint256 delay"]}> Schedule an operation; callable by proposer role (LivepeerGovernor) -</FunctionField> -<FunctionField name="execute" params={["address target", "uint256 value", "bytes calldata payload", "bytes32 predecessor", "bytes32 salt"]}> +</FField> +<FField name="execute" params={["address target", "uint256 value", "bytes calldata payload", "bytes32 predecessor", "bytes32 salt"]}> Execute a ready operation; callable by executor role -</FunctionField> -<FunctionField name="cancel" params={["bytes32 id"]}> +</FField> +<FField name="cancel" params={["bytes32 id"]}> Cancel a pending operation; callable by canceller role -</FunctionField> -<FunctionField name="isOperation" returns="bool" params={["bytes32 id"]}> +</FField> +<FField name="isOperation" returns="bool" params={["bytes32 id"]}> Check if an operation exists -</FunctionField> -<FunctionField name="isOperationReady" returns="bool" params={["bytes32 id"]}> +</FField> +<FField name="isOperationReady" returns="bool" params={["bytes32 id"]}> Check if an operation is past its delay and ready to execute -</FunctionField> -<FunctionField name="getMinDelay" returns="uint256"> +</FField> +<FField name="getMinDelay" returns="uint256"> Returns the minimum delay for all operations -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/treasury/Treasury.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'treasury')} title={<DoubleIconLink label="Treasury.sol"/>} filename="Treasury.sol" /> @@ -1089,9 +1037,11 @@ These contracts facilitated that migration. Facilitated the migration of bonded stake and delegations from Ethereum Mainnet to Arbitrum One during the Confluence upgrade. Participants who migrated on L1 claim their Arbitrum-side stake by calling `claimStake()` here. The contract still holds residual ETH and continues to receive `claimStake` calls from participants who have not yet claimed. <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="L2Migrator" />}> - **Address (Arbitrum One)**: - <AddressLinks address={l2Migrator} blockchainHref={`${arb}${l2Migrator}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/L2/L2Migrator.sol" /> - <Icon icon="check" color="var(--text)"/> _Verified · Registered in Controller · Last active Feb 2026_ + **Proxy Address (Arbitrum One)**: + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'L2Migrator', 'proxy')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'L2Migrator', 'proxy')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'L2Migrator', 'proxy')} /> + **Current Target (Arbitrum One)**: + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'L2Migrator', 'target')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'L2Migrator', 'target')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'L2Migrator', 'target')} /> + <Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Migration · Proxy target resolved_ **Purpose**: @@ -1102,12 +1052,12 @@ Facilitated the migration of bonded stake and delegations from Ethereum Mainnet **Key functions**: -<FunctionField name="claimStake" params={["address _delegate", "uint256 _stake", "uint256 _fees", "address[] calldata _delegators", "uint256[] calldata _delegatorStakes"]}> +<FField name="claimStake" params={["address _delegate", "uint256 _stake", "uint256 _fees", "address[] calldata _delegators", "uint256[] calldata _delegatorStakes"]}> Claim migrated stake on Arbitrum One; callable by participants who completed an L1 migration -</FunctionField> -<FunctionField name="finalizeMigrateDelegator" params={["address _l1Addr", "address _l2Addr", "address _delegate", "uint256 _stake", "uint256 _fees"]}> +</FField> +<FField name="finalizeMigrateDelegator" params={["address _l1Addr", "address _l2Addr", "address _delegate", "uint256 _stake", "uint256 _fees"]}> Finalise a delegator migration initiated on L1; called via the bridge -</FunctionField> +</FField> </Accordion> @@ -1116,12 +1066,12 @@ Facilitated the migration of bonded stake and delegations from Ethereum Mainnet Arbitrum One </Badge> -Stores Merkle roots used to verify stake snapshots taken at the time of the Confluence migration. Used internally by L2Migrator to validate migration claims. No activity since deployment — its role was fulfilled during the migration window. +Stores Merkle roots used to verify stake snapshots taken at the time of the Confluence migration. Used internally by L2Migrator to validate migration claims. <Accordion title={<CustomCardTitle variant="accordion" icon={<ArbitrumIcon color="var(--arbitrum)" />} title="MerkleSnapshot" />}> **Address (Arbitrum One)**: - <AddressLinks address={merkleSnapshot} blockchainHref={`${arb}${merkleSnapshot}`} githubHref="https://github.com/livepeer/protocol/blob/delta/contracts/snapshots/MerkleSnapshot.sol" /> - <Icon icon="check" color="var(--text)"/> _Verified · Registered in Controller · No activity since deployment_ + <AddressLinks address={getBlockchainContractAddress(blockchainContractsPageData, 'arbitrumOne', 'MerkleSnapshot')} blockchainHref={getBlockchainExplorerHref(blockchainContractsPageData, 'arbitrumOne', 'MerkleSnapshot')} githubHref={getBlockchainCodeHref(blockchainContractsPageData, 'arbitrumOne', 'MerkleSnapshot')} /> + <Icon icon="check" color="var(--text)"/> _Verified · Controller registered · Migration_ **Purpose**: @@ -1131,17 +1081,17 @@ Stores Merkle roots used to verify stake snapshots taken at the time of the Conf **Key functions** (from `MerkleSnapshot.sol`): -<FunctionField name="verify" returns="bool" params={["bytes32 _id", "bytes32[] calldata _proof", "bytes32 _leaf"]}> +<FField name="verify" returns="bool" params={["bytes32 _id", "bytes32[] calldata _proof", "bytes32 _leaf"]}> Verify a Merkle proof against a stored snapshot root -</FunctionField> -<FunctionField name="setSnapshot" params={["bytes32 _id", "bytes32 _root"]}> +</FField> +<FField name="setSnapshot" params={["bytes32 _id", "bytes32 _root"]}> Store a Merkle root for a given snapshot ID; callable by Controller owner only -</FunctionField> +</FField> **Contract** <SolidityEmbed - url="https://raw.githubusercontent.com/livepeer/protocol/delta/contracts/snapshots/MerkleSnapshot.sol" + url={getBlockchainRawCodeHref(blockchainContractsPageData, 'merkle-snapshot')} title={<DoubleIconLink label="MerkleSnapshot.sol"/>} filename="MerkleSnapshot.sol" /> @@ -1152,9 +1102,9 @@ Stores Merkle roots used to verify stake snapshots taken at the time of the Conf ## Full Address Reference -For the complete list of all current and historical contract addresses across Arbitrum One and Ethereum Mainnet, including all historical target and implementation versions, see the [Contract Addresses](/v2/about/resources/livepeer-contract-addresses) reference page. +For the complete list of all current, paused, migration-residual, legacy-operational, and historical contract addresses across Arbitrum One and Ethereum Mainnet, see the [Contract Addresses](/v2/about/resources/livepeer-contract-addresses) reference page. -<Icon icon="check" color="var(--text)"/> <span style={{fontStyle: "italic", color: "var(--text)"}}>Last Verified {<DataWrap value={contractAddresses.meta.lastVerified} />}</span> +<Icon icon="check" color="var(--text)"/> *Last Verified* <DataWrap value={blockchainContractsPageData.meta.lastVerified} /> <Card href="/v2/about/resources/livepeer-contract-addresses" @@ -1165,9 +1115,9 @@ For the complete list of all current and historical contract addresses across Ar /> <Columns cols={2}> <Card - href="https://github.com/livepeer/governor-scripts/blob/master/updates/addresses.js" + href="https://github.com/livepeer/protocol" icon="github" - title={<>Livepeer Contract Addresses <br/> <Badge color="green"> Canonical Code </Badge></>} + title={<>Livepeer Protocol Source <br/> <Badge color="green"> Commit Pinned </Badge></>} horizontal /> <Card diff --git a/v2/about/resources/blockchain-contracts.mdx b/v2/about/resources/blockchain-contracts.mdx index 9871eca33..582f3d084 100644 --- a/v2/about/resources/blockchain-contracts.mdx +++ b/v2/about/resources/blockchain-contracts.mdx @@ -1152,7 +1152,7 @@ Stores Merkle roots used to verify stake snapshots taken at the time of the Conf ## Full Address Reference -For the complete list of all current and historical contract addresses across Arbitrum One and Ethereum Mainnet, including all historical target and implementation versions, see the [Contract Addresses](/v2/about/resources/livepeer-contract-addresses) reference page. +For the complete list of all current, paused, migration-residual, legacy-operational, and historical contract addresses across Arbitrum One and Ethereum Mainnet, see the [Contract Addresses](/v2/about/resources/livepeer-contract-addresses) reference page. <Icon icon="check" color="var(--text)"/> <span style={{fontStyle: "italic", color: "var(--text)"}}>Last Verified {lastVerifiedDate}</span> diff --git a/v2/about/resources/livepeer-contract-addresses.mdx b/v2/about/resources/livepeer-contract-addresses.mdx index ef9532e06..1d4121635 100644 --- a/v2/about/resources/livepeer-contract-addresses.mdx +++ b/v2/about/resources/livepeer-contract-addresses.mdx @@ -3,8 +3,8 @@ sidebarTitle: Contract Addresses title: Canonical Contract Addresses description: >- Official Livepeer protocol contract addresses on Arbitrum One and Ethereum - Mainnet. Verified on-chain and automatically updated from the canonical - governor-scripts source. The only official reference outside the blockchain. + Mainnet. Verified from live chain state, upstream source provenance, and + explorer evidence on every refresh. The canonical public reference surface. keywords: - livepeer - livepeer contracts @@ -33,12 +33,13 @@ keywords: - livepeer verified contracts - livepeer arbiscan - official livepeer addresses - - 0x289ba1701C2F088cf0faf8B3705246331cB8A839 - - 0x58b6a8a3302369daec383334672404ee733ab239 + - "0x289ba1701C2F088cf0faf8B3705246331cB8A839" + - "0x58b6a8a3302369daec383334672404ee733ab239" 'og:title': "Official Livepeer Contract Addresses - Verified On-Chain" 'og:description': >- The only canonical source for Livepeer protocol contract addresses on - Arbitrum One and Ethereum Mainnet. Verified on-chain, updated automatically. + Arbitrum One and Ethereum Mainnet. Verified from chain state, source + provenance, and explorer evidence. 'og:image': /snippets/assets/site/og-image/en/page-livepeer-contract-addresses.png 'og:image:alt': Livepeer Docs social preview image for Livepeer Contract Addresses 'og:image:type': image/png @@ -48,13 +49,14 @@ keywords: 'twitter:title': "Official Livepeer Contract Addresses" 'twitter:description': >- Canonical reference for all Livepeer protocol smart contract addresses. - Verified on-chain. Automatically updated. + Verified from chain state and upstream source provenance. Automatically updated. pageType: reference purpose: reference -audience: general -lastVerified: 2026-03-26 +audience: community +status: current +lastVerified: 2026-04-03 --- -import ContractAddressesCanonical from "/snippets/composables/pages/reference/livepeer-contract-addresses.mdx" +import ContractAddressesCanonical from "/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx" <ContractAddressesCanonical /> diff --git a/v2/cn/index.mdx b/v2/cn/index.mdx index 23afbb0f6..c74c6d6ef 100644 --- a/v2/cn/index.mdx +++ b/v2/cn/index.mdx @@ -112,6 +112,7 @@ Run command: node tools/scripts/generate-pages-index.js --write ### Guides And Resources - [⚠️ 贡献指南](developers/guides-and-resources/contribution-guide.mdx) +- [⚠️ Developer Guides 2](developers/guides-and-resources/developer-guides%202.mdx) - [⚠️ Developer Guides](developers/guides-and-resources/developer-guides.mdx) - [⚠️ 开发者帮助](developers/guides-and-resources/developer-help.mdx) - [⚠️ Resources](developers/guides-and-resources/resources.mdx) diff --git a/v2/cn/resources/documentation-guide/component-library/content.mdx b/v2/cn/resources/documentation-guide/component-library/content.mdx index eefd13104..c0c986450 100644 --- a/v2/cn/resources/documentation-guide/component-library/content.mdx +++ b/v2/cn/resources/documentation-guide/component-library/content.mdx @@ -3,7 +3,7 @@ title: 'Content' sidebarTitle: 'Content' description: 'Renderers for reader-facing media, code, quotations, and structured content.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9jb250ZW50Lm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvY29udGVudCIsInNvdXJjZUhhc2giOiIzMzA4ZDk3NGQ3OTQ0Yjc1MzQ1Y2E4M2Q1MmExYWQzY2UzZjcxYjhmYzBhMmRlYTlmMTE3NTU4YTFiMDMwMDkwIiwibGFuZ3VhZ2UiOiJjbiIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wMy0xNlQxNzowOToyNi4wMTBaIn0= */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9jb250ZW50Lm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvY29udGVudCIsInNvdXJjZUhhc2giOiIxM2JmNmQwYmRkMzY2YTcyMGFlMDk1ZDFjNzQ2MTdhZDMzY2IwMzkzZjRhYmFlMWYzYzZlNzBlMDMyMzNkODM4IiwibGFuZ3VhZ2UiOiJjbiIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wNC0wM1QxMTowNzozNi41NTdaIn0= */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `cn` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/cn/resources/documentation-guide/component-library/data.mdx b/v2/cn/resources/documentation-guide/component-library/data.mdx index 7a75119cf..d7d676f38 100644 --- a/v2/cn/resources/documentation-guide/component-library/data.mdx +++ b/v2/cn/resources/documentation-guide/component-library/data.mdx @@ -3,7 +3,7 @@ title: 'Data' sidebarTitle: 'Data' description: 'Components that are coupled to feeds, release data, or other external sources.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9kYXRhLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvZGF0YSIsInNvdXJjZUhhc2giOiJkODdlMWRiMmM5YTg0OGYyYzc1Nzk1YTNkZWQ0M2ZlMzJkZTgxMWIxNmFlYTYxZDVjNTYwNTZmYjgyNGVkM2M3IiwibGFuZ3VhZ2UiOiJjbiIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wMy0xNlQxNzowOToyNi4wMTFaIn0= */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9kYXRhLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvZGF0YSIsInNvdXJjZUhhc2giOiIxNjQ3ZTQ1ZDdkMjFmNjk0ZGY2YjQyYTVmZGIwZTlkNDdiY2U0YTIyNGMyZjNkNDFjNTdiNzMxMWI0YTBjYWNmIiwibGFuZ3VhZ2UiOiJjbiIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wNC0wM1QxMTowNzozNi41NTdaIn0= */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `cn` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/cn/resources/documentation-guide/component-library/layout.mdx b/v2/cn/resources/documentation-guide/component-library/layout.mdx index 58d6dc182..5e6d9d1da 100644 --- a/v2/cn/resources/documentation-guide/component-library/layout.mdx +++ b/v2/cn/resources/documentation-guide/component-library/layout.mdx @@ -3,7 +3,7 @@ title: 'Layout' sidebarTitle: 'Layout' description: 'Containers and arrangements that define spacing, grouping, and page flow.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQubWR4Iiwic291cmNlUm91dGUiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQiLCJzb3VyY2VIYXNoIjoiYTEyMjE3ZmQyOGI3YzIyOTM4ZjM0YjE3OGQ2ZGM4ZWQ3ZmE4MjdiZTlmMDM0YTFiY2Q2NDllZjJmNzkzOTI1OCIsImxhbmd1YWdlIjoiY24iLCJwcm92aWRlciI6InNjYWZmb2xkIiwibW9kZWwiOiIiLCJnZW5lcmF0ZWRBdCI6IjIwMjYtMDMtMTZUMTc6MDk6MjYuMDEwWiJ9 */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQubWR4Iiwic291cmNlUm91dGUiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQiLCJzb3VyY2VIYXNoIjoiYzc2NWJjZmYwYzI0YjUzZjkwNDg1ZTZjYWM0NzRhMDViNTUwYmNiMWQ0ZmE5NDRlODhiN2IxMmM5OWMyNTE2MSIsImxhbmd1YWdlIjoiY24iLCJwcm92aWRlciI6InNjYWZmb2xkIiwibW9kZWwiOiIiLCJnZW5lcmF0ZWRBdCI6IjIwMjYtMDQtMDNUMTE6MDc6MzYuNTU3WiJ9 */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `cn` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/cn/resources/documentation-guide/component-library/page-structure.mdx b/v2/cn/resources/documentation-guide/component-library/page-structure.mdx index 78076988e..db0bd130e 100644 --- a/v2/cn/resources/documentation-guide/component-library/page-structure.mdx +++ b/v2/cn/resources/documentation-guide/component-library/page-structure.mdx @@ -3,7 +3,7 @@ title: 'Page Structure' sidebarTitle: 'Page Structure' description: 'Portal and frame-mode scaffolding components that shape whole sections.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wYWdlLXN0cnVjdHVyZS5tZHgiLCJzb3VyY2VSb3V0ZSI6InYyL3Jlc291cmNlcy9kb2N1bWVudGF0aW9uLWd1aWRlL2NvbXBvbmVudC1saWJyYXJ5L3BhZ2Utc3RydWN0dXJlIiwic291cmNlSGFzaCI6IjVhZjgzNGQyZmZmMzY1NzZiZDYwYzQ0YmUxMzhlMmZiYmRiYTIxOTZjNTljNjFhZTZlOTc0NGNjNzY0ZjEwNjgiLCJsYW5ndWFnZSI6ImNuIiwicHJvdmlkZXIiOiJzY2FmZm9sZCIsIm1vZGVsIjoiIiwiZ2VuZXJhdGVkQXQiOiIyMDI2LTAzLTE2VDE3OjA5OjI2LjAxMVoifQ== */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wYWdlLXN0cnVjdHVyZS5tZHgiLCJzb3VyY2VSb3V0ZSI6InYyL3Jlc291cmNlcy9kb2N1bWVudGF0aW9uLWd1aWRlL2NvbXBvbmVudC1saWJyYXJ5L3BhZ2Utc3RydWN0dXJlIiwic291cmNlSGFzaCI6IjVkM2E3M2QxZTQxN2EzZjU3ZjczZWNiNWUxODJiNjkxYjMzNTBmZTFhNmJjNWZhNjExZjQ1ZWExZTE3NjRjOGQiLCJsYW5ndWFnZSI6ImNuIiwicHJvdmlkZXIiOiJzY2FmZm9sZCIsIm1vZGVsIjoiIiwiZ2VuZXJhdGVkQXQiOiIyMDI2LTA0LTAzVDExOjA3OjM2LjU1N1oifQ== */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `cn` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/cn/resources/documentation-guide/component-library/primitives.mdx b/v2/cn/resources/documentation-guide/component-library/primitives.mdx index fa1e4877c..48a9d09e5 100644 --- a/v2/cn/resources/documentation-guide/component-library/primitives.mdx +++ b/v2/cn/resources/documentation-guide/component-library/primitives.mdx @@ -3,7 +3,7 @@ title: 'Primitives' sidebarTitle: 'Primitives' description: 'Standalone visual atoms used across authored documentation.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wcmltaXRpdmVzLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvcHJpbWl0aXZlcyIsInNvdXJjZUhhc2giOiI5Njk0YzE2ZThiM2UyODAzMzdmYzg4NzhhNDhmNDRkOTgxNzEyNzZjYTA3MDAxYzY5ZWJiZjg3NzcxYTlhZjNhIiwibGFuZ3VhZ2UiOiJjbiIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wMy0xNlQxNzowOToyNi4wMTBaIn0= */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wcmltaXRpdmVzLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvcHJpbWl0aXZlcyIsInNvdXJjZUhhc2giOiIwMWQwMDU4NTllYjY4NjQ2NjFmYjcwMzZiZDg3NjUzOGM0MmZlZmUzNWM3MmQ0N2I1MDdkMjQ5M2JhY2Y3MzM2IiwibGFuZ3VhZ2UiOiJjbiIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wNC0wM1QxMTowNzozNi41NTdaIn0= */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `cn` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/es/resources/documentation-guide/component-library/content.mdx b/v2/es/resources/documentation-guide/component-library/content.mdx index dc2b2d020..4c0f88224 100644 --- a/v2/es/resources/documentation-guide/component-library/content.mdx +++ b/v2/es/resources/documentation-guide/component-library/content.mdx @@ -3,7 +3,7 @@ title: 'Content' sidebarTitle: 'Content' description: 'Renderers for reader-facing media, code, quotations, and structured content.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9jb250ZW50Lm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvY29udGVudCIsInNvdXJjZUhhc2giOiIzMzA4ZDk3NGQ3OTQ0Yjc1MzQ1Y2E4M2Q1MmExYWQzY2UzZjcxYjhmYzBhMmRlYTlmMTE3NTU4YTFiMDMwMDkwIiwibGFuZ3VhZ2UiOiJlcyIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wMy0xNlQxNzowOToyNi4wMDhaIn0= */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9jb250ZW50Lm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvY29udGVudCIsInNvdXJjZUhhc2giOiIxM2JmNmQwYmRkMzY2YTcyMGFlMDk1ZDFjNzQ2MTdhZDMzY2IwMzkzZjRhYmFlMWYzYzZlNzBlMDMyMzNkODM4IiwibGFuZ3VhZ2UiOiJlcyIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wNC0wM1QxMTowNzozNi41NTNaIn0= */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `es` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/es/resources/documentation-guide/component-library/data.mdx b/v2/es/resources/documentation-guide/component-library/data.mdx index f5a6ab928..fb1e854b9 100644 --- a/v2/es/resources/documentation-guide/component-library/data.mdx +++ b/v2/es/resources/documentation-guide/component-library/data.mdx @@ -3,7 +3,7 @@ title: 'Data' sidebarTitle: 'Data' description: 'Components that are coupled to feeds, release data, or other external sources.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9kYXRhLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvZGF0YSIsInNvdXJjZUhhc2giOiJkODdlMWRiMmM5YTg0OGYyYzc1Nzk1YTNkZWQ0M2ZlMzJkZTgxMWIxNmFlYTYxZDVjNTYwNTZmYjgyNGVkM2M3IiwibGFuZ3VhZ2UiOiJlcyIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wMy0xNlQxNzowOToyNi4wMDlaIn0= */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9kYXRhLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvZGF0YSIsInNvdXJjZUhhc2giOiIxNjQ3ZTQ1ZDdkMjFmNjk0ZGY2YjQyYTVmZGIwZTlkNDdiY2U0YTIyNGMyZjNkNDFjNTdiNzMxMWI0YTBjYWNmIiwibGFuZ3VhZ2UiOiJlcyIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wNC0wM1QxMTowNzozNi41NTRaIn0= */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `es` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/es/resources/documentation-guide/component-library/layout.mdx b/v2/es/resources/documentation-guide/component-library/layout.mdx index f087f9dda..3c8cb6c78 100644 --- a/v2/es/resources/documentation-guide/component-library/layout.mdx +++ b/v2/es/resources/documentation-guide/component-library/layout.mdx @@ -3,7 +3,7 @@ title: 'Layout' sidebarTitle: 'Layout' description: 'Containers and arrangements that define spacing, grouping, and page flow.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQubWR4Iiwic291cmNlUm91dGUiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQiLCJzb3VyY2VIYXNoIjoiYTEyMjE3ZmQyOGI3YzIyOTM4ZjM0YjE3OGQ2ZGM4ZWQ3ZmE4MjdiZTlmMDM0YTFiY2Q2NDllZjJmNzkzOTI1OCIsImxhbmd1YWdlIjoiZXMiLCJwcm92aWRlciI6InNjYWZmb2xkIiwibW9kZWwiOiIiLCJnZW5lcmF0ZWRBdCI6IjIwMjYtMDMtMTZUMTc6MDk6MjYuMDA4WiJ9 */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQubWR4Iiwic291cmNlUm91dGUiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQiLCJzb3VyY2VIYXNoIjoiYzc2NWJjZmYwYzI0YjUzZjkwNDg1ZTZjYWM0NzRhMDViNTUwYmNiMWQ0ZmE5NDRlODhiN2IxMmM5OWMyNTE2MSIsImxhbmd1YWdlIjoiZXMiLCJwcm92aWRlciI6InNjYWZmb2xkIiwibW9kZWwiOiIiLCJnZW5lcmF0ZWRBdCI6IjIwMjYtMDQtMDNUMTE6MDc6MzYuNTUzWiJ9 */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `es` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/es/resources/documentation-guide/component-library/page-structure.mdx b/v2/es/resources/documentation-guide/component-library/page-structure.mdx index cf15910a6..88f997515 100644 --- a/v2/es/resources/documentation-guide/component-library/page-structure.mdx +++ b/v2/es/resources/documentation-guide/component-library/page-structure.mdx @@ -3,7 +3,7 @@ title: 'Page Structure' sidebarTitle: 'Page Structure' description: 'Portal and frame-mode scaffolding components that shape whole sections.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wYWdlLXN0cnVjdHVyZS5tZHgiLCJzb3VyY2VSb3V0ZSI6InYyL3Jlc291cmNlcy9kb2N1bWVudGF0aW9uLWd1aWRlL2NvbXBvbmVudC1saWJyYXJ5L3BhZ2Utc3RydWN0dXJlIiwic291cmNlSGFzaCI6IjVhZjgzNGQyZmZmMzY1NzZiZDYwYzQ0YmUxMzhlMmZiYmRiYTIxOTZjNTljNjFhZTZlOTc0NGNjNzY0ZjEwNjgiLCJsYW5ndWFnZSI6ImVzIiwicHJvdmlkZXIiOiJzY2FmZm9sZCIsIm1vZGVsIjoiIiwiZ2VuZXJhdGVkQXQiOiIyMDI2LTAzLTE2VDE3OjA5OjI2LjAwOVoifQ== */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wYWdlLXN0cnVjdHVyZS5tZHgiLCJzb3VyY2VSb3V0ZSI6InYyL3Jlc291cmNlcy9kb2N1bWVudGF0aW9uLWd1aWRlL2NvbXBvbmVudC1saWJyYXJ5L3BhZ2Utc3RydWN0dXJlIiwic291cmNlSGFzaCI6IjVkM2E3M2QxZTQxN2EzZjU3ZjczZWNiNWUxODJiNjkxYjMzNTBmZTFhNmJjNWZhNjExZjQ1ZWExZTE3NjRjOGQiLCJsYW5ndWFnZSI6ImVzIiwicHJvdmlkZXIiOiJzY2FmZm9sZCIsIm1vZGVsIjoiIiwiZ2VuZXJhdGVkQXQiOiIyMDI2LTA0LTAzVDExOjA3OjM2LjU1NFoifQ== */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `es` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/es/resources/documentation-guide/component-library/primitives.mdx b/v2/es/resources/documentation-guide/component-library/primitives.mdx index 27373e9ef..9500aff4a 100644 --- a/v2/es/resources/documentation-guide/component-library/primitives.mdx +++ b/v2/es/resources/documentation-guide/component-library/primitives.mdx @@ -3,7 +3,7 @@ title: 'Primitives' sidebarTitle: 'Primitives' description: 'Standalone visual atoms used across authored documentation.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wcmltaXRpdmVzLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvcHJpbWl0aXZlcyIsInNvdXJjZUhhc2giOiI5Njk0YzE2ZThiM2UyODAzMzdmYzg4NzhhNDhmNDRkOTgxNzEyNzZjYTA3MDAxYzY5ZWJiZjg3NzcxYTlhZjNhIiwibGFuZ3VhZ2UiOiJlcyIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wMy0xNlQxNzowOToyNi4wMDdaIn0= */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wcmltaXRpdmVzLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvcHJpbWl0aXZlcyIsInNvdXJjZUhhc2giOiIwMWQwMDU4NTllYjY4NjQ2NjFmYjcwMzZiZDg3NjUzOGM0MmZlZmUzNWM3MmQ0N2I1MDdkMjQ5M2JhY2Y3MzM2IiwibGFuZ3VhZ2UiOiJlcyIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wNC0wM1QxMTowNzozNi41NTJaIn0= */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `es` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/fr/resources/documentation-guide/component-library/content.mdx b/v2/fr/resources/documentation-guide/component-library/content.mdx index 1acb4d07c..dca1a51d2 100644 --- a/v2/fr/resources/documentation-guide/component-library/content.mdx +++ b/v2/fr/resources/documentation-guide/component-library/content.mdx @@ -3,7 +3,7 @@ title: 'Content' sidebarTitle: 'Content' description: 'Renderers for reader-facing media, code, quotations, and structured content.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9jb250ZW50Lm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvY29udGVudCIsInNvdXJjZUhhc2giOiIzMzA4ZDk3NGQ3OTQ0Yjc1MzQ1Y2E4M2Q1MmExYWQzY2UzZjcxYjhmYzBhMmRlYTlmMTE3NTU4YTFiMDMwMDkwIiwibGFuZ3VhZ2UiOiJmciIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wMy0xNlQxNzowOToyNi4wMTBaIn0= */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9jb250ZW50Lm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvY29udGVudCIsInNvdXJjZUhhc2giOiIxM2JmNmQwYmRkMzY2YTcyMGFlMDk1ZDFjNzQ2MTdhZDMzY2IwMzkzZjRhYmFlMWYzYzZlNzBlMDMyMzNkODM4IiwibGFuZ3VhZ2UiOiJmciIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wNC0wM1QxMTowNzozNi41NTZaIn0= */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `fr` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/fr/resources/documentation-guide/component-library/data.mdx b/v2/fr/resources/documentation-guide/component-library/data.mdx index ce531bf70..aaf577095 100644 --- a/v2/fr/resources/documentation-guide/component-library/data.mdx +++ b/v2/fr/resources/documentation-guide/component-library/data.mdx @@ -3,7 +3,7 @@ title: 'Data' sidebarTitle: 'Data' description: 'Components that are coupled to feeds, release data, or other external sources.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9kYXRhLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvZGF0YSIsInNvdXJjZUhhc2giOiJkODdlMWRiMmM5YTg0OGYyYzc1Nzk1YTNkZWQ0M2ZlMzJkZTgxMWIxNmFlYTYxZDVjNTYwNTZmYjgyNGVkM2M3IiwibGFuZ3VhZ2UiOiJmciIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wMy0xNlQxNzowOToyNi4wMTBaIn0= */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9kYXRhLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvZGF0YSIsInNvdXJjZUhhc2giOiIxNjQ3ZTQ1ZDdkMjFmNjk0ZGY2YjQyYTVmZGIwZTlkNDdiY2U0YTIyNGMyZjNkNDFjNTdiNzMxMWI0YTBjYWNmIiwibGFuZ3VhZ2UiOiJmciIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wNC0wM1QxMTowNzozNi41NTZaIn0= */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `fr` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/fr/resources/documentation-guide/component-library/layout.mdx b/v2/fr/resources/documentation-guide/component-library/layout.mdx index c51c2be18..6d364123b 100644 --- a/v2/fr/resources/documentation-guide/component-library/layout.mdx +++ b/v2/fr/resources/documentation-guide/component-library/layout.mdx @@ -3,7 +3,7 @@ title: 'Layout' sidebarTitle: 'Layout' description: 'Containers and arrangements that define spacing, grouping, and page flow.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQubWR4Iiwic291cmNlUm91dGUiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQiLCJzb3VyY2VIYXNoIjoiYTEyMjE3ZmQyOGI3YzIyOTM4ZjM0YjE3OGQ2ZGM4ZWQ3ZmE4MjdiZTlmMDM0YTFiY2Q2NDllZjJmNzkzOTI1OCIsImxhbmd1YWdlIjoiZnIiLCJwcm92aWRlciI6InNjYWZmb2xkIiwibW9kZWwiOiIiLCJnZW5lcmF0ZWRBdCI6IjIwMjYtMDMtMTZUMTc6MDk6MjYuMDEwWiJ9 */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQubWR4Iiwic291cmNlUm91dGUiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9sYXlvdXQiLCJzb3VyY2VIYXNoIjoiYzc2NWJjZmYwYzI0YjUzZjkwNDg1ZTZjYWM0NzRhMDViNTUwYmNiMWQ0ZmE5NDRlODhiN2IxMmM5OWMyNTE2MSIsImxhbmd1YWdlIjoiZnIiLCJwcm92aWRlciI6InNjYWZmb2xkIiwibW9kZWwiOiIiLCJnZW5lcmF0ZWRBdCI6IjIwMjYtMDQtMDNUMTE6MDc6MzYuNTU1WiJ9 */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `fr` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/fr/resources/documentation-guide/component-library/page-structure.mdx b/v2/fr/resources/documentation-guide/component-library/page-structure.mdx index 0b89cdf51..09488fee7 100644 --- a/v2/fr/resources/documentation-guide/component-library/page-structure.mdx +++ b/v2/fr/resources/documentation-guide/component-library/page-structure.mdx @@ -3,7 +3,7 @@ title: 'Page Structure' sidebarTitle: 'Page Structure' description: 'Portal and frame-mode scaffolding components that shape whole sections.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wYWdlLXN0cnVjdHVyZS5tZHgiLCJzb3VyY2VSb3V0ZSI6InYyL3Jlc291cmNlcy9kb2N1bWVudGF0aW9uLWd1aWRlL2NvbXBvbmVudC1saWJyYXJ5L3BhZ2Utc3RydWN0dXJlIiwic291cmNlSGFzaCI6IjVhZjgzNGQyZmZmMzY1NzZiZDYwYzQ0YmUxMzhlMmZiYmRiYTIxOTZjNTljNjFhZTZlOTc0NGNjNzY0ZjEwNjgiLCJsYW5ndWFnZSI6ImZyIiwicHJvdmlkZXIiOiJzY2FmZm9sZCIsIm1vZGVsIjoiIiwiZ2VuZXJhdGVkQXQiOiIyMDI2LTAzLTE2VDE3OjA5OjI2LjAxMFoifQ== */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wYWdlLXN0cnVjdHVyZS5tZHgiLCJzb3VyY2VSb3V0ZSI6InYyL3Jlc291cmNlcy9kb2N1bWVudGF0aW9uLWd1aWRlL2NvbXBvbmVudC1saWJyYXJ5L3BhZ2Utc3RydWN0dXJlIiwic291cmNlSGFzaCI6IjVkM2E3M2QxZTQxN2EzZjU3ZjczZWNiNWUxODJiNjkxYjMzNTBmZTFhNmJjNWZhNjExZjQ1ZWExZTE3NjRjOGQiLCJsYW5ndWFnZSI6ImZyIiwicHJvdmlkZXIiOiJzY2FmZm9sZCIsIm1vZGVsIjoiIiwiZ2VuZXJhdGVkQXQiOiIyMDI2LTA0LTAzVDExOjA3OjM2LjU1NloifQ== */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `fr` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/fr/resources/documentation-guide/component-library/primitives.mdx b/v2/fr/resources/documentation-guide/component-library/primitives.mdx index 15bb1c5eb..af0dc01be 100644 --- a/v2/fr/resources/documentation-guide/component-library/primitives.mdx +++ b/v2/fr/resources/documentation-guide/component-library/primitives.mdx @@ -3,7 +3,7 @@ title: 'Primitives' sidebarTitle: 'Primitives' description: 'Standalone visual atoms used across authored documentation.' --- -{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wcmltaXRpdmVzLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvcHJpbWl0aXZlcyIsInNvdXJjZUhhc2giOiI5Njk0YzE2ZThiM2UyODAzMzdmYzg4NzhhNDhmNDRkOTgxNzEyNzZjYTA3MDAxYzY5ZWJiZjg3NzcxYTlhZjNhIiwibGFuZ3VhZ2UiOiJmciIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wMy0xNlQxNzowOToyNi4wMDlaIn0= */} +{/* codex-i18n: eyJraW5kIjoiY29kZXgtaTE4biIsInZlcnNpb24iOjEsInNvdXJjZVBhdGgiOiJ2Mi9yZXNvdXJjZXMvZG9jdW1lbnRhdGlvbi1ndWlkZS9jb21wb25lbnQtbGlicmFyeS9wcmltaXRpdmVzLm1keCIsInNvdXJjZVJvdXRlIjoidjIvcmVzb3VyY2VzL2RvY3VtZW50YXRpb24tZ3VpZGUvY29tcG9uZW50LWxpYnJhcnkvcHJpbWl0aXZlcyIsInNvdXJjZUhhc2giOiIwMWQwMDU4NTllYjY4NjQ2NjFmYjcwMzZiZDg3NjUzOGM0MmZlZmUzNWM3MmQ0N2I1MDdkMjQ5M2JhY2Y3MzM2IiwibGFuZ3VhZ2UiOiJmciIsInByb3ZpZGVyIjoic2NhZmZvbGQiLCJtb2RlbCI6IiIsImdlbmVyYXRlZEF0IjoiMjAyNi0wNC0wM1QxMTowNzozNi41NTVaIn0= */} {/* codex-i18n: scaffold — translation pending */} {/* generated-file-banner: generated-file-banner:v1 @@ -22,7 +22,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only <Note>Localized prose refresh for `fr` is pending. This page preserves the new route and mirrors the English category inventory at a summary level.</Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the localized component-library landing page. </Card> diff --git a/v2/gateways/resources/reference/technical/contract-addresses.mdx b/v2/gateways/resources/reference/technical/contract-addresses.mdx index 8c6be2abb..e73e4d6d6 100644 --- a/v2/gateways/resources/reference/technical/contract-addresses.mdx +++ b/v2/gateways/resources/reference/technical/contract-addresses.mdx @@ -33,8 +33,8 @@ keywords: - livepeer verified contracts - livepeer arbiscan - official livepeer addresses - - 0x289ba1701C2F088cf0faf8B3705246331cB8A839 - - 0x58b6a8a3302369daec383334672404ee733ab239 + - "0x289ba1701C2F088cf0faf8B3705246331cB8A839" + - "0x58b6a8a3302369daec383334672404ee733ab239" 'og:title': "Official Livepeer Contract Addresses - Verified On-Chain" 'og:description': >- The only canonical source for Livepeer protocol contract addresses on @@ -55,6 +55,6 @@ audience: general lastVerified: 2026-03-26 --- -import ContractAddressesCanonical from "/snippets/composables/pages/reference/livepeer-contract-addresses.mdx" +import ContractAddressesCanonical from "/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx" <ContractAddressesCanonical /> diff --git a/v2/index.mdx b/v2/index.mdx index 99ad3e267..230232f55 100644 --- a/v2/index.mdx +++ b/v2/index.mdx @@ -169,6 +169,7 @@ Run command: node tools/scripts/generate-pages-index.js --write #### Guides And Resources - [⚠️ 贡献指南](cn/developers/guides-and-resources/contribution-guide.mdx) +- [⚠️ Developer Guides 2](cn/developers/guides-and-resources/developer-guides%25202.mdx) - [⚠️ Developer Guides](cn/developers/guides-and-resources/developer-guides.mdx) - [⚠️ 开发者帮助](cn/developers/guides-and-resources/developer-help.mdx) - [⚠️ Resources](cn/developers/guides-and-resources/resources.mdx) @@ -2338,7 +2339,7 @@ Run command: node tools/scripts/generate-pages-index.js --write - [⚠️ Delegator Dashboard](resources/lpt/delegator-dashboard.mdx) ### References -- [Canonical Contract Addresses](resources/references/contract-addresses.mdx) +- [⚠️ Canonical Contract Addresses](resources/references/contract-addresses.mdx) ### Resources - [⚠️ Videos](resources/resources/videos.mdx) @@ -2526,6 +2527,7 @@ Run command: node tools/scripts/generate-pages-index.js --write - [⚠️ Landing Frame Page Template](templates/pages/landing-frame-page-template.mdx) - [⚠️ OpenAPI Endpoint Template](templates/pages/openapi-endpoint-page-template.mdx) - [⚠️ Overview Page Template](templates/pages/overview-page-template.mdx) +- [⚠️ Page-structure-template](templates/pages/page-composition-framework-template.mdx) - [⚠️ Reference Page Template](templates/pages/reference-page-template.mdx) - [⚠️ Troubleshooting Page Template](templates/pages/troubleshooting-page-template.mdx) - [⚠️ Tutorial Page Template](templates/pages/tutorial-page-template.mdx) @@ -2536,7 +2538,26 @@ Run command: node tools/scripts/generate-pages-index.js --write - [⚠️ Portal Page Template](templates/pages/landing-and-navigation/portal-page-template.mdx) #### Reference And Api +- [⚠️ Changelog](templates/pages/reference-and-api/changelog-template-template.mdx) - [⚠️ OpenAPI Endpoint Template](templates/pages/reference-and-api/openapi-endpoint-page-template.mdx) +#### Resources +- [⚠️ {DISPLAY_NAME} Changelog](templates/pages/resources/changelog-automated-template-template.mdx) +- [⚠️ {PRODUCT_NAME} Changelog](templates/pages/resources/changelog-solutions-template-template.mdx) +- [⚠️ Changelog](templates/pages/resources/changelog-template-template.mdx) +- [⚠️ OpenAPI Endpoint Template](templates/pages/resources/openapi-endpoint-page-template.mdx) +- [⚠️ Reference Page Template](templates/pages/resources/reference-page-template.mdx) + +##### Compendium +- [⚠️ FAQ Page Template](templates/pages/resources/compendium/faq-page-template.mdx) +- [⚠️ Livepeer Glossary](templates/pages/resources/compendium/glossary-consolidated-template-template.mdx) +- [⚠️ Livepeer Glossary](templates/pages/resources/compendium/glossary-consolidated-template.mdx) +- [⚠️ \\[Tab\\] Glossary](templates/pages/resources/compendium/glossary-tab-template-template.mdx) +- [⚠️ \\[Tab\\] Glossary](templates/pages/resources/compendium/glossary-tab-template.mdx) +- [⚠️ Troubleshooting Page Template](templates/pages/resources/compendium/troubleshooting-page-template.mdx) + +##### Technical Reference +- [⚠️ OpenAPI Endpoint Template](templates/pages/resources/technical-reference/openapi-endpoint-page-template.mdx) + #### Setup And Code Layouts - [⚠️ Multi-View Setup Template](templates/pages/setup-and-code-layouts/multi-view-page-template.mdx) diff --git a/v2/orchestrators/resources/reference/technical/contract-addresses.mdx b/v2/orchestrators/resources/reference/technical/contract-addresses.mdx index 8c6be2abb..e73e4d6d6 100644 --- a/v2/orchestrators/resources/reference/technical/contract-addresses.mdx +++ b/v2/orchestrators/resources/reference/technical/contract-addresses.mdx @@ -33,8 +33,8 @@ keywords: - livepeer verified contracts - livepeer arbiscan - official livepeer addresses - - 0x289ba1701C2F088cf0faf8B3705246331cB8A839 - - 0x58b6a8a3302369daec383334672404ee733ab239 + - "0x289ba1701C2F088cf0faf8B3705246331cB8A839" + - "0x58b6a8a3302369daec383334672404ee733ab239" 'og:title': "Official Livepeer Contract Addresses - Verified On-Chain" 'og:description': >- The only canonical source for Livepeer protocol contract addresses on @@ -55,6 +55,6 @@ audience: general lastVerified: 2026-03-26 --- -import ContractAddressesCanonical from "/snippets/composables/pages/reference/livepeer-contract-addresses.mdx" +import ContractAddressesCanonical from "/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx" <ContractAddressesCanonical /> diff --git a/v2/resources/documentation-guide/component-library/component-library.mdx b/v2/resources/documentation-guide/component-library/component-library.mdx index 0dab0314a..08e729ffb 100644 --- a/v2/resources/documentation-guide/component-library/component-library.mdx +++ b/v2/resources/documentation-guide/component-library/component-library.mdx @@ -7,37 +7,34 @@ pageType: overview {/* generated-file-banner: generated-file-banner:v1 -Generation Script: operations/scripts/generate-component-docs.js -Purpose: Generated component-library MDX pages derived from docs-guide/config/component-registry.json. +Generation Script: tools/scripts/generate-component-docs.js +Purpose: Generated component-library MDX pages derived from docs-guide/component-registry.json. Run when: Component governance metadata, registry outputs, or published component-library templates change. -Run command: node operations/scripts/generate-component-docs.js --fix --template-only +Run command: node tools/scripts/generate-component-docs.js --fix --template-only */} <Note> -**Generation Script**: This file is generated from script(s): `operations/scripts/generate-component-docs.js`. <br/> -**Purpose**: Generated component-library MDX pages derived from docs-guide/config/component-registry.json. <br/> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-component-docs.js`. <br/> +**Purpose**: Generated component-library MDX pages derived from docs-guide/component-registry.json. <br/> **Run when**: Component governance metadata, registry outputs, or published component-library templates change. <br/> -**Important**: Do not manually edit this file; run `node operations/scripts/generate-component-docs.js --fix --template-only`. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-component-docs.js --fix --template-only`. <br/> </Note> <CardGroup cols={2}> - <Card title="Elements" href="./elements" icon="puzzle-piece"> - Standalone visual atoms — icons, text, links, callouts, math, spacing, images. (27 exports) + <Card title="Primitives" href="./primitives" icon="puzzle-piece"> + Standalone visual atoms used across authored documentation. (30 exports) </Card> - <Card title="Wrappers" href="./wrappers" icon="puzzle-piece"> - Containers that hold, group, or spatially arrange other components. (31 exports) + <Card title="Layout" href="./layout" icon="puzzle-piece"> + Containers and arrangements that define spacing, grouping, and page flow. (31 exports) </Card> - <Card title="Displays" href="./displays" icon="puzzle-piece"> - Renderers for authored content — code, video, diagrams, quotes, response fields. (20 exports) + <Card title="Content" href="./content" icon="puzzle-piece"> + Renderers for reader-facing media, code, quotations, and structured content. (24 exports) </Card> - <Card title="Scaffolding" href="./scaffolding" icon="puzzle-piece"> - One-per-page structural skeleton — heroes, portals, frame-mode overrides. (20 exports) + <Card title="Data" href="./data" icon="puzzle-piece"> + Components that are coupled to feeds, release data, or other external sources. (17 exports) </Card> - <Card title="Integrators" href="./integrators" icon="puzzle-piece"> - Fetches, embeds, or binds to external data — feeds, embeds, video, APIs. (18 exports) - </Card> - <Card title="Config" href="./config" icon="puzzle-piece"> - Non-component configuration objects (e.g. theme, colour maps). (1 exports) + <Card title="Page Structure" href="./page-structure" icon="puzzle-piece"> + Portal and frame-mode scaffolding components that shape whole sections. (25 exports) </Card> </CardGroup> @@ -49,11 +46,11 @@ Run command: node operations/scripts/generate-component-docs.js --fix --template ## Decision Tree Excerpt -1. Fetches, embeds, or binds to external/third-party data? → `integrators/` -2. Part of the page's outer structure, typically used once? → `scaffolding/` -3. Takes content and presents it in a formatted way? → `displays/` -4. Exists to hold, group, or arrange other things? → `wrappers/` -5. Single visual piece — no wrapping, no arranging, no fetching? → `elements/` +1. Bound to an external data source or automation pipeline? `data/` +2. Only makes sense on frame-mode or portal pages? `page-structure/` +3. Accepts children and arranges them spatially? `layout/` +4. Formats or renders content for the reader? `content/` +5. Otherwise: `primitives/` ## Start Here diff --git a/v2/resources/documentation-guide/component-library/content.mdx b/v2/resources/documentation-guide/component-library/content.mdx index 00ce77af8..514370e0a 100644 --- a/v2/resources/documentation-guide/component-library/content.mdx +++ b/v2/resources/documentation-guide/component-library/content.mdx @@ -20,7 +20,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only **Important**: Do not manually edit this file; run `node tools/scripts/generate-component-docs.js --fix --template-only --category content`. <br/> </Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the generated component library landing page. </Card> diff --git a/v2/resources/documentation-guide/component-library/data.mdx b/v2/resources/documentation-guide/component-library/data.mdx index 1a3a59887..c6c0f749d 100644 --- a/v2/resources/documentation-guide/component-library/data.mdx +++ b/v2/resources/documentation-guide/component-library/data.mdx @@ -20,7 +20,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only **Important**: Do not manually edit this file; run `node tools/scripts/generate-component-docs.js --fix --template-only --category data`. <br/> </Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the generated component library landing page. </Card> diff --git a/v2/resources/documentation-guide/component-library/layout.mdx b/v2/resources/documentation-guide/component-library/layout.mdx index be0515cbb..f84e73971 100644 --- a/v2/resources/documentation-guide/component-library/layout.mdx +++ b/v2/resources/documentation-guide/component-library/layout.mdx @@ -20,7 +20,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only **Important**: Do not manually edit this file; run `node tools/scripts/generate-component-docs.js --fix --template-only --category layout`. <br/> </Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the generated component library landing page. </Card> @@ -186,7 +186,7 @@ import { BorderedBox } from '/snippets/components/layout/containers.jsx' - Decision: `KEEP` - Status: `stable` - Tier: `composite` -- `@usedIn`: `v2/community/livepeer-community/community-guidelines.mdx`, `v2/developers/build/workload-fit.mdx`, `v2/developers/developer-journey.mdx`, `v2/developers/opportunities/bug-bounties.mdx`, `v2/developers/opportunities/grants-and-programmes.mdx`, `v2/developers/opportunities/oss-contributions.mdx`, and 40 more page(s) +- `@usedIn`: `v2/community/livepeer-community/community-guidelines.mdx`, `v2/developers/build/workload-fit.mdx`, `v2/developers/developer-journey.mdx`, `v2/developers/opportunities/bug-bounties.mdx`, `v2/developers/opportunities/grants-and-programmes.mdx`, `v2/developers/opportunities/oss-contributions.mdx`, and 37 more page(s) **Props** | Prop | Type | Default | Required | Description | | --- | --- | --- | --- | --- | @@ -257,7 +257,7 @@ import { CenteredContainer } from '/snippets/components/layout/containers.jsx' - Decision: `KEEP` - Status: `stable` - Tier: `composite` -- `@usedIn`: `v2/gateways/concepts/architecture.mdx`, `v2/gateways/concepts/business-model.mdx`, `v2/gateways/concepts/capabilities.mdx`, `v2/gateways/concepts/role.mdx`, `v2/gateways/guides/advanced-operations/scaling.mdx`, `v2/gateways/guides/deployment-details/setup-requirements.mdx`, and 10 more page(s) +- `@usedIn`: `v2/gateways/concepts/business-model.mdx`, `v2/gateways/concepts/capabilities.mdx`, `v2/gateways/concepts/role.mdx`, `v2/gateways/guides/advanced-operations/scaling.mdx`, `v2/gateways/guides/deployment-details/setup-requirements.mdx`, `v2/gateways/guides/node-pipelines/pipeline-configuration.mdx`, and 9 more page(s) **Props** | Prop | Type | Default | Required | Description | | --- | --- | --- | --- | --- | diff --git a/v2/resources/documentation-guide/component-library/overview.mdx b/v2/resources/documentation-guide/component-library/overview.mdx index 26eba279a..302a1296b 100644 --- a/v2/resources/documentation-guide/component-library/overview.mdx +++ b/v2/resources/documentation-guide/component-library/overview.mdx @@ -7,44 +7,43 @@ pageType: overview {/* generated-file-banner: generated-file-banner:v1 -Generation Script: operations/scripts/generate-component-docs.js -Purpose: Generated component-library MDX pages derived from docs-guide/config/component-registry.json. +Generation Script: tools/scripts/generate-component-docs.js +Purpose: Generated component-library MDX pages derived from docs-guide/component-registry.json. Run when: Component governance metadata, registry outputs, or published component-library templates change. -Run command: node operations/scripts/generate-component-docs.js --fix --template-only +Run command: node tools/scripts/generate-component-docs.js --fix --template-only */} <Note> -**Generation Script**: This file is generated from script(s): `operations/scripts/generate-component-docs.js`. <br/> -**Purpose**: Generated component-library MDX pages derived from docs-guide/config/component-registry.json. <br/> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-component-docs.js`. <br/> +**Purpose**: Generated component-library MDX pages derived from docs-guide/component-registry.json. <br/> **Run when**: Component governance metadata, registry outputs, or published component-library templates change. <br/> -**Important**: Do not manually edit this file; run `node operations/scripts/generate-component-docs.js --fix --template-only`. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-component-docs.js --fix --template-only`. <br/> </Note> ## Governance Snapshot -The governed component library currently exposes **117** named export(s) across five active categories. +The governed component library currently exposes **127** named export(s) across five active categories. ### Category Matrix | Category | Purpose | Exports | | --- | --- | --- | -| [Elements](./elements) | Smallest visual atoms — no children, no fetching, no arrangement | 27 | -| [Wrappers](./wrappers) | Holds, groups, or spatially arranges other components | 31 | -| [Displays](./displays) | Renders authored content into a specific visual format | 20 | -| [Scaffolding](./scaffolding) | One-per-page structural skeleton — heroes, portals, frame-mode | 20 | -| [Integrators](./integrators) | Fetches, embeds, or binds to external/third-party data | 18 | -| [Config](./config) | Non-component config objects | 1 | +| [Primitives](./primitives) | Standalone visual atoms | 30 | +| [Layout](./layout) | Spatial arrangement containers | 31 | +| [Content](./content) | Content formatting and rendering | 24 | +| [Data](./data) | Data-bound feed renderers | 17 | +| [Page Structure](./page-structure) | Frame-mode and portal scaffolding | 25 | ### Classification Decision Tree -1. Fetches, embeds, or binds to external/third-party data? → `integrators/` -2. Part of the page's outer structure, typically used once? → `scaffolding/` -3. Takes content and presents it in a formatted way? → `displays/` -4. Exists to hold, group, or arrange other things? → `wrappers/` -5. Single visual piece — no wrapping, no arranging, no fetching? → `elements/` +1. Bound to an external data source or automation pipeline? `data/` +2. Only makes sense on frame-mode or portal pages? `page-structure/` +3. Accepts children and arranges them spatially? `layout/` +4. Formats or renders content for the reader? `content/` +5. Otherwise: `primitives/` ### Canonical Sources -- Registry JSON: [`docs-guide/config/component-registry.json`](/docs-guide/config/component-registry.json) -- Usage map: [`docs-guide/config/component-usage-map.json`](/docs-guide/config/component-usage-map.json) +- Registry JSON: [`docs-guide/component-registry.json`](/docs-guide/component-registry.json) +- Usage map: [`docs-guide/component-usage-map.json`](/docs-guide/component-usage-map.json) - Docs-guide index: [`docs-guide/catalog/components-catalog.mdx`](/docs-guide/catalog/components-catalog.mdx) diff --git a/v2/resources/documentation-guide/component-library/page-structure.mdx b/v2/resources/documentation-guide/component-library/page-structure.mdx index 7807b321f..75f226c21 100644 --- a/v2/resources/documentation-guide/component-library/page-structure.mdx +++ b/v2/resources/documentation-guide/component-library/page-structure.mdx @@ -20,7 +20,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only **Important**: Do not manually edit this file; run `node tools/scripts/generate-component-docs.js --fix --template-only --category page-structure`. <br/> </Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the generated component library landing page. </Card> diff --git a/v2/resources/documentation-guide/component-library/primitives.mdx b/v2/resources/documentation-guide/component-library/primitives.mdx index 343b7c269..80480bb17 100644 --- a/v2/resources/documentation-guide/component-library/primitives.mdx +++ b/v2/resources/documentation-guide/component-library/primitives.mdx @@ -20,7 +20,7 @@ Run command: node tools/scripts/generate-component-docs.js --fix --template-only **Important**: Do not manually edit this file; run `node tools/scripts/generate-component-docs.js --fix --template-only --category primitives`. <br/> </Note> -<Card title="Back to Component Library" icon="arrow-left" href="../component-library" arrow> +<Card title="Back to Component Library" icon="arrow-left" href="./component-library" arrow> Return to the generated component library landing page. </Card> diff --git a/v2/resources/index.mdx b/v2/resources/index.mdx index a55f7a6d2..fd8f457e0 100644 --- a/v2/resources/index.mdx +++ b/v2/resources/index.mdx @@ -123,7 +123,7 @@ Run command: node tools/scripts/generate-pages-index.js --write - [⚠️ Delegator Dashboard](lpt/delegator-dashboard.mdx) ## References -- [Canonical Contract Addresses](references/contract-addresses.mdx) +- [⚠️ Canonical Contract Addresses](references/contract-addresses.mdx) ## Resources - [⚠️ Videos](resources/videos.mdx) diff --git a/v2/resources/references/contract-addresses.mdx b/v2/resources/references/contract-addresses.mdx index 8c6be2abb..e73e4d6d6 100644 --- a/v2/resources/references/contract-addresses.mdx +++ b/v2/resources/references/contract-addresses.mdx @@ -33,8 +33,8 @@ keywords: - livepeer verified contracts - livepeer arbiscan - official livepeer addresses - - 0x289ba1701C2F088cf0faf8B3705246331cB8A839 - - 0x58b6a8a3302369daec383334672404ee733ab239 + - "0x289ba1701C2F088cf0faf8B3705246331cB8A839" + - "0x58b6a8a3302369daec383334672404ee733ab239" 'og:title': "Official Livepeer Contract Addresses - Verified On-Chain" 'og:description': >- The only canonical source for Livepeer protocol contract addresses on @@ -55,6 +55,6 @@ audience: general lastVerified: 2026-03-26 --- -import ContractAddressesCanonical from "/snippets/composables/pages/reference/livepeer-contract-addresses.mdx" +import ContractAddressesCanonical from "/snippets/composables/pages/canonical/livepeer-contract-addresses.mdx" <ContractAddressesCanonical /> diff --git a/v2/templates/index.mdx b/v2/templates/index.mdx index fef20ddd0..572014a24 100644 --- a/v2/templates/index.mdx +++ b/v2/templates/index.mdx @@ -32,6 +32,7 @@ Run command: node tools/scripts/generate-pages-index.js --write - [⚠️ Landing Frame Page Template](pages/landing-frame-page-template.mdx) - [⚠️ OpenAPI Endpoint Template](pages/openapi-endpoint-page-template.mdx) - [⚠️ Overview Page Template](pages/overview-page-template.mdx) +- [⚠️ Page-structure-template](pages/page-composition-framework-template.mdx) - [⚠️ Reference Page Template](pages/reference-page-template.mdx) - [⚠️ Troubleshooting Page Template](pages/troubleshooting-page-template.mdx) - [⚠️ Tutorial Page Template](pages/tutorial-page-template.mdx) @@ -42,7 +43,26 @@ Run command: node tools/scripts/generate-pages-index.js --write - [⚠️ Portal Page Template](pages/landing-and-navigation/portal-page-template.mdx) ### Reference And Api +- [⚠️ Changelog](pages/reference-and-api/changelog-template-template.mdx) - [⚠️ OpenAPI Endpoint Template](pages/reference-and-api/openapi-endpoint-page-template.mdx) +### Resources +- [⚠️ {DISPLAY_NAME} Changelog](pages/resources/changelog-automated-template-template.mdx) +- [⚠️ {PRODUCT_NAME} Changelog](pages/resources/changelog-solutions-template-template.mdx) +- [⚠️ Changelog](pages/resources/changelog-template-template.mdx) +- [⚠️ OpenAPI Endpoint Template](pages/resources/openapi-endpoint-page-template.mdx) +- [⚠️ Reference Page Template](pages/resources/reference-page-template.mdx) + +#### Compendium +- [⚠️ FAQ Page Template](pages/resources/compendium/faq-page-template.mdx) +- [⚠️ Livepeer Glossary](pages/resources/compendium/glossary-consolidated-template-template.mdx) +- [⚠️ Livepeer Glossary](pages/resources/compendium/glossary-consolidated-template.mdx) +- [⚠️ \[Tab\] Glossary](pages/resources/compendium/glossary-tab-template-template.mdx) +- [⚠️ \[Tab\] Glossary](pages/resources/compendium/glossary-tab-template.mdx) +- [⚠️ Troubleshooting Page Template](pages/resources/compendium/troubleshooting-page-template.mdx) + +#### Technical Reference +- [⚠️ OpenAPI Endpoint Template](pages/resources/technical-reference/openapi-endpoint-page-template.mdx) + ### Setup And Code Layouts - [⚠️ Multi-View Setup Template](pages/setup-and-code-layouts/multi-view-page-template.mdx) diff --git a/v2/templates/pages/overview-page-template.mdx b/v2/templates/pages/overview-page-template.mdx index 34e954b6e..873dda10f 100644 --- a/v2/templates/pages/overview-page-template.mdx +++ b/v2/templates/pages/overview-page-template.mdx @@ -25,6 +25,6 @@ import Template from '/snippets/templates/pages/overview-page.mdx' Source template: `snippets/templates/pages/overview-page.mdx` -Snippet prefix: `lp-overview` +Snippet prefix: `template-overview-page` <Template /> diff --git a/v2/templates/pages/page-composition-framework-template.mdx b/v2/templates/pages/page-composition-framework-template.mdx new file mode 100644 index 000000000..02036aea4 --- /dev/null +++ b/v2/templates/pages/page-composition-framework-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'Page-structure-template' +sidebarTitle: 'Page-structure-template' +description: 'Describe page-structure-template Preview route generated from snippets/templates/pages/page-composition-framework.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'page-composition-framework'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for Page-structure-template. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for Page-structure-template. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/page-composition-framework.mdx' + +Source template: `snippets/templates/pages/page-composition-framework.mdx` + +Snippet prefix: `template-page-composition-framework` + +<Template /> diff --git a/v2/templates/pages/reference-and-api/changelog-template-template.mdx b/v2/templates/pages/reference-and-api/changelog-template-template.mdx new file mode 100644 index 000000000..5ecb55a02 --- /dev/null +++ b/v2/templates/pages/reference-and-api/changelog-template-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'Changelog' +sidebarTitle: 'Changelog' +description: 'Track significant updates to [product or section name]. For protocol changes, see the Livepeer Improvement Proposals (LIPs) and Livepeer Forum. Preview route generated from snippets/templates/pages/reference-and-api/changelog-template.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'changelog-template'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for Changelog. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for Changelog. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/reference-and-api/changelog-template.mdx' + +Source template: `snippets/templates/pages/reference-and-api/changelog-template.mdx` + +Snippet prefix: `template-changelog-template` + +<Template /> diff --git a/v2/templates/pages/resources/changelog-automated-template-template.mdx b/v2/templates/pages/resources/changelog-automated-template-template.mdx new file mode 100644 index 000000000..7807b51a5 --- /dev/null +++ b/v2/templates/pages/resources/changelog-automated-template-template.mdx @@ -0,0 +1,30 @@ +--- +title: '{DISPLAY_NAME} Changelog' +sidebarTitle: '{DISPLAY_NAME} Changelog' +description: '{DESCRIPTION} Preview route generated from snippets/templates/pages/resources/changelog-automated-template.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'changelog-automated-template'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for {DISPLAY_NAME} Changelog. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for {DISPLAY_NAME} Changelog. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/changelog-automated-template.mdx' + +Source template: `snippets/templates/pages/resources/changelog-automated-template.mdx` + +Snippet prefix: `template-changelog-automated-template` + +<Template /> diff --git a/v2/templates/pages/resources/changelog-solutions-template-template.mdx b/v2/templates/pages/resources/changelog-solutions-template-template.mdx new file mode 100644 index 000000000..b27885e9a --- /dev/null +++ b/v2/templates/pages/resources/changelog-solutions-template-template.mdx @@ -0,0 +1,30 @@ +--- +title: '{PRODUCT_NAME} Changelog' +sidebarTitle: '{PRODUCT_NAME} Changelog' +description: 'Release history for {PRODUCT_NAME} — {PRODUCT_DESCRIPTION}. Preview route generated from snippets/templates/pages/resources/changelog-solutions-template.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'changelog-solutions-template'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for {PRODUCT_NAME} Changelog. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for {PRODUCT_NAME} Changelog. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/changelog-solutions-template.mdx' + +Source template: `snippets/templates/pages/resources/changelog-solutions-template.mdx` + +Snippet prefix: `template-changelog-solutions-template` + +<Template /> diff --git a/v2/templates/pages/resources/changelog-template-template.mdx b/v2/templates/pages/resources/changelog-template-template.mdx new file mode 100644 index 000000000..3092031da --- /dev/null +++ b/v2/templates/pages/resources/changelog-template-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'Changelog' +sidebarTitle: 'Changelog' +description: 'Track significant updates to [product or section name]. For protocol changes, see the Livepeer Improvement Proposals (LIPs) and Livepeer Forum. Preview route generated from snippets/templates/pages/resources/changelog-template.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'changelog-template'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for Changelog. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for Changelog. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/changelog-template.mdx' + +Source template: `snippets/templates/pages/resources/changelog-template.mdx` + +Snippet prefix: `template-changelog-template` + +<Template /> diff --git a/v2/templates/pages/resources/compendium/faq-page-template.mdx b/v2/templates/pages/resources/compendium/faq-page-template.mdx new file mode 100644 index 000000000..624af1d8d --- /dev/null +++ b/v2/templates/pages/resources/compendium/faq-page-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'FAQ Page Template' +sidebarTitle: 'FAQ Page Template' +description: 'Copy-ready FAQ page scaffold with canonical frontmatter and AccordionGroup structure. Preview route generated from snippets/templates/pages/resources/compendium/faq-page.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'faq-page'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for FAQ Page Template. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for FAQ Page Template. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/compendium/faq-page.mdx' + +Source template: `snippets/templates/pages/resources/compendium/faq-page.mdx` + +Snippet prefix: `template-faq-page` + +<Template /> diff --git a/v2/templates/pages/resources/compendium/glossary-consolidated-template-template.mdx b/v2/templates/pages/resources/compendium/glossary-consolidated-template-template.mdx new file mode 100644 index 000000000..efe0895a5 --- /dev/null +++ b/v2/templates/pages/resources/compendium/glossary-consolidated-template-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'Livepeer Glossary' +sidebarTitle: 'Livepeer Glossary' +description: 'Complete glossary of terms used across the Livepeer Real-time AI & Video Network — protocol, video, AI, web3, and operational terminology. Preview route generated from snippets/templates/pages/resources/compendium/glossary-consolidated-template.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'glossary-consolidated-template'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for Livepeer Glossary. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for Livepeer Glossary. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/compendium/glossary-consolidated-template.mdx' + +Source template: `snippets/templates/pages/resources/compendium/glossary-consolidated-template.mdx` + +Snippet prefix: `template-glossary-consolidated-template` + +<Template /> diff --git a/v2/templates/pages/resources/compendium/glossary-consolidated-template.mdx b/v2/templates/pages/resources/compendium/glossary-consolidated-template.mdx new file mode 100644 index 000000000..d956603a9 --- /dev/null +++ b/v2/templates/pages/resources/compendium/glossary-consolidated-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'Livepeer Glossary' +sidebarTitle: 'Livepeer Glossary' +description: 'Complete glossary of terms used across the Livepeer Real-time AI & Video Network — protocol, video, AI, web3, and operational terminology. Preview route generated from snippets/templates/pages/resources/compendium/glossary-consolidated.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'glossary-consolidated'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for Livepeer Glossary. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for Livepeer Glossary. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/compendium/glossary-consolidated.mdx' + +Source template: `snippets/templates/pages/resources/compendium/glossary-consolidated.mdx` + +Snippet prefix: `template-glossary-consolidated` + +<Template /> diff --git a/v2/templates/pages/resources/compendium/glossary-tab-template-template.mdx b/v2/templates/pages/resources/compendium/glossary-tab-template-template.mdx new file mode 100644 index 000000000..23e7a6de9 --- /dev/null +++ b/v2/templates/pages/resources/compendium/glossary-tab-template-template.mdx @@ -0,0 +1,30 @@ +--- +title: '[Tab] Glossary' +sidebarTitle: '[Tab] Glossary' +description: 'Key terms and definitions for the Livepeer [tab] section — [one sentence scope]. Preview route generated from snippets/templates/pages/resources/compendium/glossary-tab-template.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'glossary-tab-template'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for [Tab] Glossary. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for [Tab] Glossary. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/compendium/glossary-tab-template.mdx' + +Source template: `snippets/templates/pages/resources/compendium/glossary-tab-template.mdx` + +Snippet prefix: `template-glossary-tab-template` + +<Template /> diff --git a/v2/templates/pages/resources/compendium/glossary-tab-template.mdx b/v2/templates/pages/resources/compendium/glossary-tab-template.mdx new file mode 100644 index 000000000..017fce09a --- /dev/null +++ b/v2/templates/pages/resources/compendium/glossary-tab-template.mdx @@ -0,0 +1,30 @@ +--- +title: '[Tab] Glossary' +sidebarTitle: '[Tab] Glossary' +description: 'Key terms and definitions for the Livepeer [tab] section — [one sentence scope]. Preview route generated from snippets/templates/pages/resources/compendium/glossary-tab.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'glossary-tab'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for [Tab] Glossary. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for [Tab] Glossary. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/compendium/glossary-tab.mdx' + +Source template: `snippets/templates/pages/resources/compendium/glossary-tab.mdx` + +Snippet prefix: `template-glossary-tab` + +<Template /> diff --git a/v2/templates/pages/resources/compendium/troubleshooting-page-template.mdx b/v2/templates/pages/resources/compendium/troubleshooting-page-template.mdx new file mode 100644 index 000000000..264527b5d --- /dev/null +++ b/v2/templates/pages/resources/compendium/troubleshooting-page-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'Troubleshooting Page Template' +sidebarTitle: 'Troubleshooting Page Template' +description: 'Copy-ready troubleshooting page scaffold with Symptom, Cause, Fix, and Verify sections. Preview route generated from snippets/templates/pages/resources/compendium/troubleshooting-page.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'troubleshooting-page'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for Troubleshooting Page Template. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for Troubleshooting Page Template. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/compendium/troubleshooting-page.mdx' + +Source template: `snippets/templates/pages/resources/compendium/troubleshooting-page.mdx` + +Snippet prefix: `template-troubleshooting-page` + +<Template /> diff --git a/v2/templates/pages/resources/openapi-endpoint-page-template.mdx b/v2/templates/pages/resources/openapi-endpoint-page-template.mdx new file mode 100644 index 000000000..f750a07aa --- /dev/null +++ b/v2/templates/pages/resources/openapi-endpoint-page-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'OpenAPI Endpoint Template' +sidebarTitle: 'OpenAPI Endpoint Template' +description: 'Copy-ready OpenAPI endpoint page scaffold with canonical reference frontmatter. Preview route generated from snippets/templates/pages/resources/openapi-endpoint-page.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'openapi-endpoint-page'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for OpenAPI Endpoint Template. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for OpenAPI Endpoint Template. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/openapi-endpoint-page.mdx' + +Source template: `snippets/templates/pages/resources/openapi-endpoint-page.mdx` + +Snippet prefix: `template-openapi-endpoint-page` + +<Template /> diff --git a/v2/templates/pages/resources/reference-page-template.mdx b/v2/templates/pages/resources/reference-page-template.mdx new file mode 100644 index 000000000..599afbab5 --- /dev/null +++ b/v2/templates/pages/resources/reference-page-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'Reference Page Template' +sidebarTitle: 'Reference Page Template' +description: 'Lookup-oriented reference scaffold with inputs, outputs, and a concrete example. Preview route generated from snippets/templates/pages/resources/reference-page.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'reference-page'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for Reference Page Template. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for Reference Page Template. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/reference-page.mdx' + +Source template: `snippets/templates/pages/resources/reference-page.mdx` + +Snippet prefix: `lp-reference` + +<Template /> diff --git a/v2/templates/pages/resources/technical-reference/openapi-endpoint-page-template.mdx b/v2/templates/pages/resources/technical-reference/openapi-endpoint-page-template.mdx new file mode 100644 index 000000000..5d65eb5c8 --- /dev/null +++ b/v2/templates/pages/resources/technical-reference/openapi-endpoint-page-template.mdx @@ -0,0 +1,30 @@ +--- +title: 'OpenAPI Endpoint Template' +sidebarTitle: 'OpenAPI Endpoint Template' +description: 'Copy-ready OpenAPI endpoint page scaffold with canonical reference frontmatter. Preview route generated from snippets/templates/pages/resources/technical-reference/openapi-endpoint-page.mdx.' +pageType: overview +keywords: ['livepeer', 'template preview', 'openapi-endpoint-page'] +--- + +{/* +generated-file-banner: generated-file-banner:v1 +Generation Script: tools/scripts/generate-ui-templates.js +Purpose: Direct-route preview page for OpenAPI Endpoint Template. +Run when: Page/block templates change. +Run command: node tools/scripts/generate-ui-templates.js --write +*/} + +<Note> +**Generation Script**: This file is generated from script(s): `tools/scripts/generate-ui-templates.js`. <br/> +**Purpose**: Direct-route preview page for OpenAPI Endpoint Template. <br/> +**Run when**: Page/block templates change. <br/> +**Important**: Do not manually edit this file; run `node tools/scripts/generate-ui-templates.js --write`. <br/> +</Note> + +import Template from '/snippets/templates/pages/resources/technical-reference/openapi-endpoint-page.mdx' + +Source template: `snippets/templates/pages/resources/technical-reference/openapi-endpoint-page.mdx` + +Snippet prefix: `template-openapi-endpoint-page` + +<Template />