일괄 거래
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은:
- zk 증명으로 필요한 금액을 비공개 잔액에서 언쉴드하며 목적지와 금액은 공개됩니다
- 언쉴드 금액으로 호출 자금을 조달합니다
- 일괄 호출을 실행합니다
사용자는 언쉴드와 호출을 함께 표시한 하나의 팝업을 승인합니다.
페이마스터 통합
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사용 가능