{
  "$schema": "https://degreesofsatoshi.com/encyclopedia/schemas/article-v1.json",
  "schemaVersion": "1.0.0",
  "id": "borrowed-governance-power",
  "canonical": "https://degreesofsatoshi.com/encyclopedia/borrowed-governance-power/",
  "collection": "defi",
  "title": "Borrowed governance power: what snapshots can and cannot prevent",
  "description": "Understand temporary voting power and why snapshots, delays and execution controls address different governance risks.",
  "aliases": [
    "flash loan governance voting attack",
    "can borrowed tokens influence governance"
  ],
  "dates": {
    "published": "2026-10-02",
    "modified": "2026-10-02",
    "verified": "2026-10-02T19:18:00.092Z",
    "dataAsOf": "2026-10-02"
  },
  "authorship": {
    "publisher": "Degrees of Satoshi editorial project",
    "process": "AI-assisted research and drafting with a separate automated source-verification pass; no external expert or named human review is implied."
  },
  "quickAnswer": {
    "text": "Governance that gives power to token balances must consider how that power was acquired and when it is measured. Borrowed or delegated tokens can create temporary influence under the system’s rules. Historical snapshots prevent current transfers from repeatedly changing a past vote’s weight, but they do not prove that every voter has permanent economic exposure.",
    "claimId": "borrowed-governance-power-quick-answer",
    "sourceIds": [
      "x425-defi-oz-governance",
      "x425-defi-oz-governor-api"
    ]
  },
  "keyFacts": [
    {
      "label": "Historical weight",
      "value": "ERC20Votes records voting power that can be read at a past snapshot.",
      "sourceIds": [
        "x425-defi-oz-governance"
      ],
      "id": "historical-weight",
      "claimId": "borrowed-governance-power-fact-historical-weight"
    },
    {
      "label": "Timing",
      "value": "Voting delay and voting period are separate governor parameters.",
      "sourceIds": [
        "x425-defi-oz-governance"
      ],
      "id": "timing",
      "claimId": "borrowed-governance-power-fact-timing"
    },
    {
      "label": "Execution",
      "value": "A timelock adds a later stage after successful voting.",
      "sourceIds": [
        "x425-defi-oz-governance"
      ],
      "id": "execution",
      "claimId": "borrowed-governance-power-fact-execution"
    }
  ],
  "prerequisites": [
    "governance-delegation",
    "flash-loans"
  ],
  "sections": [
    {
      "id": "example",
      "heading": "Ask whether temporary control reaches the snapshot",
      "sourceIds": [
        "x425-defi-oz-governor-api"
      ],
      "paragraphs": [
        "In a block-based governor, the cited API measures a proposal’s snapshot at the end of the relevant block and voting starts afterward. A balance borrowed and returned within a single transaction does not remain as that borrower’s end-of-block balance.",
        "That does not settle every borrowing scenario. A longer loan held through the measurement time is different, and delegation or custom voting strategies can change the analysis."
      ]
    },
    {
      "id": "layers",
      "heading": "Each control addresses a different step",
      "sourceIds": [
        "x425-defi-oz-governance"
      ],
      "paragraphs": [
        "The proposal threshold limits submission; the snapshot fixes voting power; the voting period allows participation; quorum and approval rules decide success; the timelock delays execution. Calling a system flash-loan resistant requires examining their actual interaction, not checking whether it has one named safeguard."
      ]
    },
    {
      "id": "evidence",
      "heading": "Evaluate powers and actions, not wallet labels",
      "sourceIds": [
        "x425-defi-oz-governance",
        "x425-defi-oz-access"
      ],
      "paragraphs": [
        "A token holder, delegate and treasury administrator can have different authority. Inspect how the proposed calls would use that authority and who can cancel or change them. This article explains governance-design questions; a large or borrowed vote alone is not proof of malicious intent."
      ]
    }
  ],
  "faq": [
    {
      "question": "Does using snapshots prevent every governance attack?",
      "answer": "No. It provides historical voting-power accounting; authority design, concentration, longer-lived borrowing and execution controls remain relevant.",
      "sourceIds": [
        "x425-defi-oz-governance",
        "x425-defi-oz-access"
      ]
    }
  ],
  "claims": [
    {
      "id": "borrowed-governance-power-quick-answer",
      "articleSlug": "borrowed-governance-power",
      "statement": "Governance that gives power to token balances must consider how that power was acquired and when it is measured. Borrowed or delegated tokens can create temporary influence under the system’s rules. Historical snapshots prevent current transfers from repeatedly changing a past vote’s weight, but they do not prove that every voter has permanent economic exposure.",
      "sourceIds": [
        "source-5ae9ea0050b20bf7",
        "source-da7d59cbf24fff1c"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-5ae9ea0050b20bf7",
          "locator": "Proposal threshold; quorum; Votes; snapshot"
        },
        {
          "sourceId": "source-da7d59cbf24fff1c",
          "locator": "Governor; GovernorVotesQuorumFraction; GovernorSettings"
        }
      ],
      "scope": {
        "collection": "defi",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:18:00.092Z",
        "reviewer": "Independent automated verification — Codex root, separate from the DeFi drafting agent",
        "notes": [
          "Checked OpenZeppelin block-end snapshot API and historical voting power. Same-transaction return cannot preserve borrower power through end-of-block under this stated model; longer borrowing/custom rules qualified."
        ]
      }
    },
    {
      "id": "borrowed-governance-power-fact-historical-weight",
      "articleSlug": "borrowed-governance-power",
      "statement": "Historical weight: ERC20Votes records voting power that can be read at a past snapshot.",
      "sourceIds": [
        "source-5ae9ea0050b20bf7"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-5ae9ea0050b20bf7",
          "locator": "Proposal threshold; quorum; Votes; snapshot"
        }
      ],
      "scope": {
        "collection": "defi",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:18:00.092Z",
        "reviewer": "Independent automated verification — Codex root, separate from the DeFi drafting agent",
        "notes": [
          "Checked OpenZeppelin block-end snapshot API and historical voting power. Same-transaction return cannot preserve borrower power through end-of-block under this stated model; longer borrowing/custom rules qualified."
        ]
      }
    },
    {
      "id": "borrowed-governance-power-fact-timing",
      "articleSlug": "borrowed-governance-power",
      "statement": "Timing: Voting delay and voting period are separate governor parameters.",
      "sourceIds": [
        "source-5ae9ea0050b20bf7"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-5ae9ea0050b20bf7",
          "locator": "Proposal threshold; quorum; Votes; snapshot"
        }
      ],
      "scope": {
        "collection": "defi",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:18:00.092Z",
        "reviewer": "Independent automated verification — Codex root, separate from the DeFi drafting agent",
        "notes": [
          "Checked OpenZeppelin block-end snapshot API and historical voting power. Same-transaction return cannot preserve borrower power through end-of-block under this stated model; longer borrowing/custom rules qualified."
        ]
      }
    },
    {
      "id": "borrowed-governance-power-fact-execution",
      "articleSlug": "borrowed-governance-power",
      "statement": "Execution: A timelock adds a later stage after successful voting.",
      "sourceIds": [
        "source-5ae9ea0050b20bf7"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-5ae9ea0050b20bf7",
          "locator": "Proposal threshold; quorum; Votes; snapshot"
        }
      ],
      "scope": {
        "collection": "defi",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:18:00.092Z",
        "reviewer": "Independent automated verification — Codex root, separate from the DeFi drafting agent",
        "notes": [
          "Checked OpenZeppelin block-end snapshot API and historical voting power. Same-transaction return cannot preserve borrower power through end-of-block under this stated model; longer borrowing/custom rules qualified."
        ]
      }
    }
  ],
  "sources": [
    {
      "id": "x425-defi-oz-governance",
      "label": "How to set up on-chain governance",
      "publisher": "OpenZeppelin",
      "url": "https://docs.openzeppelin.com/contracts/5.x/governance",
      "locator": "Proposal threshold; quorum; Votes; snapshot",
      "note": "Governance gates, historical voting power and execution.",
      "version": "Documentation retrieved for the 2026-10-02 editorial scope; content hash recorded",
      "checkedAt": "2026-10-02T18:53:22.811Z",
      "contentSha256": "8cd8a9df31a3165f8f33dab4dfe215bbed6043818a09edfaf72c4600c1463843",
      "recordId": "source-5ae9ea0050b20bf7"
    },
    {
      "id": "x425-defi-oz-governor-api",
      "label": "Governance API",
      "publisher": "OpenZeppelin",
      "url": "https://docs.openzeppelin.com/contracts/5.x/api/governance",
      "locator": "Governor; GovernorVotesQuorumFraction; GovernorSettings",
      "note": "Precisely scoped quorum and proposal configuration.",
      "version": "Documentation retrieved for the 2026-10-02 editorial scope; content hash recorded",
      "checkedAt": "2026-10-02T18:53:23.077Z",
      "contentSha256": "bf9f7bcbcdeb1edac62b878684699260dd85107dfcb167fce3f79cf751341e2b",
      "recordId": "source-da7d59cbf24fff1c"
    },
    {
      "id": "x425-defi-oz-access",
      "label": "Access Control",
      "publisher": "OpenZeppelin",
      "url": "https://docs.openzeppelin.com/contracts/5.x/access-control",
      "locator": "Ownership; roles; delayed access",
      "note": "Privileges beyond a locked LP position.",
      "version": "Documentation retrieved for the 2026-10-02 editorial scope; content hash recorded",
      "checkedAt": "2026-10-02T18:53:23.338Z",
      "contentSha256": "64d4904044619055e92ed628892df0be1db2aec6a37ccd1c14384b4348211c80",
      "recordId": "source-56dd3f4220f6fea2"
    }
  ],
  "related": {
    "articles": [
      "governance-quorum-thresholds",
      "governance-timelocks",
      "protocol-upgrades-and-admin-powers",
      "dao-treasury-runway",
      "liquidity-locks-burned-lp"
    ],
    "dossiers": [],
    "wallets": []
  },
  "revisionHistory": [
    {
      "date": "2026-10-02",
      "kind": "published",
      "summary": "First publication after primary-source research and separate automated verification."
    }
  ],
  "citation": "Degrees of Satoshi editorial project. “Borrowed governance power: what snapshots can and cannot prevent.” Published 2026-10-02; updated 2026-10-02. https://degreesofsatoshi.com/encyclopedia/borrowed-governance-power/"
}
