본문으로 건너뛰기
Anon Wallet

일괄 거래

Anon은 EIP-5792의 wallet_sendCalls로 한 번의 승인에 여러 호출을 제출하고 선택적으로 비공개 풀 자금을 사용하게 합니다.

기본 사용

const result = await window.ethereum.request({
  method: "wallet_sendCalls",
  params: [{
    version: "1.0",
    chainId: "0x1",
    calls: [
      {
        to: "0xTokenAddress...",
        data: "0x095ea7b3...", // approve(spender, amount)
      },
      {
        to: "0xDexRouter...",
        data: "0x...",         // swap call
        value: "0x0",
      },
    ],
  }],
});

// result.id is a job ID for status polling

전체 호출을 요약한 승인 팝업이 나타납니다. atomicBatch 지원 시 하나의 거래로 실행하며 하나라도 실패하면 모두 되돌립니다.

상태 확인

const status = await window.ethereum.request({
  method: "wallet_getCallsStatus",
  params: [result.id],
});

// status.status: "PENDING" | "CONFIRMED" | "FAILED"
// status.receipts: array of transaction receipts when confirmed

status.status가 "PENDING"이 아닐 때까지 폴링합니다.

보조 자금 사용

연결 출처가 쉴드 잔액을 가진 스텔스 주소라면 auxiliaryFunds를 보고하며 DApp이 사용을 요청할 수 있습니다.

const result = await window.ethereum.request({
  method: "wallet_sendCalls",
  params: [{
    version: "1.0",
    chainId: "0x1",
    calls: [...],
    capabilities: {
      auxiliaryFunds: {
        // Optional: specify the asset and amount needed
        assets: [
          {
            address: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
            amount: "0xDE0B6B3A7640000", // 1 WETH
          }
        ]
      }
    }
  }],
});

Anon은:

  1. zk 증명으로 필요한 금액을 비공개 잔액에서 언쉴드하며 목적지와 금액은 공개됩니다
  2. 언쉴드 금액으로 호출 자금을 조달합니다
  3. 일괄 호출을 실행합니다

사용자는 언쉴드와 호출을 함께 표시한 하나의 팝업을 승인합니다.

페이마스터 통합

wallet_sendCalls에서 가스 지원을 사용하려면:

const result = await window.ethereum.request({
  method: "wallet_sendCalls",
  params: [{
    version: "1.0",
    chainId: "0x1",
    calls: [...],
    capabilities: {
      paymasterService: {
        url: "https://paymaster.anon.inc/v1",
      }
    }
  }],
});

페이마스터가 가스를 지불하고 설정한 수수료 토큰으로 쉴드 잔액에서 비용을 차감합니다.

스텔스 연결 출처

주 공개 EOA 대신 스텔스 주소를 DApp에 연결한 출처입니다.

  • auxiliaryFunds 활성화, 쉴드 잔액 사용 가능
  • paymasterService 활성화, 쉴드 잔액으로 가스 지불 가능
  • eth_getBalance는 온체인·비공개 WETH·가스 여유분의 합계 반환
  • balanceOf의 eth_call은 온체인·비공개 쉴드 잔액 합계 반환

DApp은 전체 유효 잔액에 따라 동작하며, 그 잔액 정보도 연결된 DApp에 공개됩니다.

호환성 참고

  • 일괄 실행 컨트랙트가 배포된 체인에서 atomicBatch 포함 wallet_sendCalls 지원
  • auxiliaryFunds에는 요청 토큰의 활성 쉴드 잔액 필요
  • EIP-5792 미지원 DApp도 기존 eth_sendTransaction 사용 가능