Skip to content

v2.2.1#1853

Open
pikonha wants to merge 63 commits intomainfrom
dev
Open

v2.2.1#1853
pikonha wants to merge 63 commits intomainfrom
dev

Conversation

@pikonha
Copy link
Copy Markdown
Member

@pikonha pikonha commented May 4, 2026

No description provided.

LeonardoVieira1630 and others added 30 commits April 14, 2026 16:15
Implements a standalone Hono service (apps/relayer/) that allows users
to vote and delegate on governance proposals without paying gas. The
relayer validates EIP-712 signatures, checks eligibility and on-chain
state, enforces rate limits, and submits transactions via a funded wallet.

- Pluggable signer interface (local private key for v1, KMS-ready)
- Supports castVoteBySig and delegateBySig for all supported DAOs
- In-memory sliding window rate limiter (per-address hourly + daily)
- Zod OpenAPI schemas with /health, /relay/vote, /relay/delegate routes
- 29 tests across 7 files (unit + integration with MSW)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Captures the decision to move the relayer's rate-limit state from
in-memory to the shared snapshot schema, including backfill-safety
analysis, schema design, and the record-before-submit semantics.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reviewer-recommended clarifications: concrete reference SQL for the
atomic reserveSlot INSERT, and an explicit note that rate-limiter
service tests run against pglite (not mocks).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 4, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
anticapture Ready Ready Preview, ✅ 1 resolved May 4, 2026 5:29pm
anticapture-storybook Ready Ready Preview, Comment May 4, 2026 5:29pm

Request Review

@railway-app
Copy link
Copy Markdown

railway-app Bot commented May 4, 2026

🚅 Deployed to the anticapture-pr-1853 environment in anticapture-infra

Service Status Web Updated (UTC)
gateful ✅ Success (View Logs) Web May 4, 2026 at 6:04 pm
lil-nouns-api ❌ Build Failed (View Logs) May 4, 2026 at 6:03 pm
api-gateway ❌ Build Failed (View Logs) Web May 4, 2026 at 5:57 pm
nouns-api ❌ Build Failed (View Logs) May 4, 2026 at 5:54 pm
obol-api ❌ Build Failed (View Logs) May 4, 2026 at 5:52 pm
uniswap-api ❌ Build Failed (View Logs) May 4, 2026 at 5:52 pm
gitcoin-api ❌ Build Failed (View Logs) May 4, 2026 at 5:52 pm
shutter-api ❌ Build Failed (View Logs) May 4, 2026 at 5:52 pm
ens-api ❌ Build Failed (View Logs) May 4, 2026 at 5:52 pm
aave-api ❌ Build Failed (View Logs) May 4, 2026 at 5:51 pm
compound-api ❌ Build Failed (View Logs) Web May 4, 2026 at 5:51 pm
fluid-api ❌ Build Failed (View Logs) May 4, 2026 at 5:51 pm
gitcoin-indexer ✅ Success (View Logs) May 4, 2026 at 5:48 pm
uniswap-indexer ✅ Success (View Logs) May 4, 2026 at 5:48 pm
tempo ✅ Success (View Logs) May 4, 2026 at 5:48 pm
scroll-api ❌ Build Failed (View Logs) May 4, 2026 at 5:48 pm
prometheus ✅ Success (View Logs) Web May 4, 2026 at 5:47 pm
scroll-indexer ✅ Success (View Logs) May 4, 2026 at 5:47 pm
shutter-indexer ✅ Success (View Logs) May 4, 2026 at 5:47 pm
alertmanager ✅ Success (View Logs) Web May 4, 2026 at 5:47 pm
obol-indexer ✅ Success (View Logs) May 4, 2026 at 5:47 pm
ens-indexer ✅ Success (View Logs) May 4, 2026 at 5:47 pm
compound-indexer ✅ Success (View Logs) May 4, 2026 at 5:47 pm
address-enrichment ✅ Success (View Logs) Web May 4, 2026 at 5:47 pm
aave-indexer ✅ Success (View Logs) May 4, 2026 at 5:47 pm
nouns-indexer ✅ Success (View Logs) May 4, 2026 at 5:47 pm
erpc ✅ Success (View Logs) May 4, 2026 at 5:47 pm
nodeful ✅ Success (View Logs) May 4, 2026 at 5:46 pm
otelcol ✅ Success (View Logs) May 4, 2026 at 5:46 pm
loki ✅ Success (View Logs) Web May 4, 2026 at 5:40 pm
16 services not affected by this PR
  • RabbitMQ Web UI
  • telegram-bot-db
  • subscription-server
  • RabbitMQ
  • uniswap-indexer-offchain
  • dispatcher
  • logic-system
  • hyperindex-database
  • hyperindex-erpc
  • fluid-indexer
  • grafana
  • consumer
  • lil-nouns-indexer
  • compound-indexer-offchain
  • gitcoin-indexer-offchain
  • ens-indexer-offchain

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 775d329013

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +70 to +76
await this.publicClient.simulateContract({
address: this.governorAddress,
abi: governorAbi,
functionName: "castVoteBySig",
args: [params.proposalId, params.support, params.v, params.r, params.s],
account: await this.signer.getAddress(),
});
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Map simulation reverts to client-facing RelayError

simulateContract reverts for user-caused conditions (already voted, expired delegation, invalid proposal state/signature), but these exceptions are not converted to RelayError, so they fall through the global handler as 500 INTERNAL. In practice this makes normal request errors look like server outages and breaks API semantics for callers; the e2e cases for duplicate/late votes already demonstrate this path returning 500.

Useful? React with 👍 / 👎.

Comment thread apps/relayer/src/index.ts
const logger = createLogger("anticapture-relayer");

async function main() {
const chain = mainnet;
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use configured chain instead of hardcoded mainnet

The service always builds viem clients with mainnet, while EIP-712 verification uses env.CHAIN_ID. If this relayer is deployed to any non-mainnet RPC (staging/testnet/another DAO chain), request handling can fail with chain mismatch behavior and signatures will be checked against a different chain context than the transaction client. This makes the CHAIN_ID config misleading and can break all relays outside chain ID 1.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants