IPrivacy.batchTransfer

batchTransfer(
  bytes32 batchId,
  PrivacyTransferRequest[] requests
) external returns (bool success)

여러 개의 은닉 전송을 하나의 batchId로 제출합니다. 프리플라이트는 공유되지만 항목별로 독립적으로 commitment가 추가되고 이벤트가 발행됩니다. 각 항목의 PrivacyTransferRequest는 유효한 expiresAtUnix를 설정해야 하며, 만료된 항목이 하나라도 있으면 전체 배치가 일반 문자열 revert로 거절됩니다(IPrivacy는 커스텀 오류 타입을 선언하지 않습니다). 배치 가스는 잔여 증명 surcharge와 항목당 고정 비용의 합으로 부과됩니다.

파라미터

이름 타입 필수 설명
batchId bytes32 호출자가 지정하는 0이 아닌 식별자로, 하나의 EVM 트랜잭션 안에서 고유해야 합니다. 트랜잭션 내 중복이 발생하면 duplicate privacy batchId in EVM transaction로 revert됩니다.
requests PrivacyTransferRequest[] 배치 항목들입니다. 각 요청은 유효한 expiresAtUnix를 개별적으로 가져야 합니다. 리스트는 비어 있으면 안 되고 체인 설정의 배치 크기 한도 안에 있어야 합니다.

반환값

타입: bool

성공 시 true를 반환합니다. 항목이 하나라도 실패하면 배치 전체가 revert됩니다.

에러

코드 이름 설명
expiresAtUnix is required expiresAtUnix is required 문자열 revert입니다. 하나 이상의 항목에서 expiresAtUnix == 0이었습니다.
transfer payload has expired transfer payload has expired 문자열 revert입니다. 하나 이상의 항목에서 expiresAtUnix가 현재 블록 시간 이하였습니다.
privacy batch transfer requires at least one item privacy batch transfer requires at least one item 문자열 revert입니다. requests가 비어 있었습니다.
invalid batchId invalid batchId 문자열 revert입니다. batchId가 0이었습니다.
duplicate privacy batchId in EVM transaction duplicate privacy batchId in EVM transaction 문자열 revert입니다. 동일한 batchId가 하나의 EVM 트랜잭션에서 두 번 제출되었습니다.
privacy batch output commitment already exists privacy batch output commitment already exists 문자열 revert입니다. 배치의 출력 commitment가 이미 온체인에 존재하는 commitment와 충돌합니다.

예제

항목별 만료를 지정해 소규모 배치 제출

모든 배치 항목이 같은 expiresAtUnix를 공유해도 됩니다. 검증은 항목별로 이뤄지지만, 서로 다른 값을 요구하지는 않습니다.

const nowSec = Math.floor(Date.now() / 1000);
const expiresAtUnix = BigInt(nowSec + 300);

const batchId = "0x2b9c1e5f8a1d40d7b7c9f0e13a8bd21e4c6a8e12f9d0b3e2f1a4c5b6d7e8f901" as const;

const requests = items.map((it) => ({
  ...it,
  expiresAtUnix, // every item must set this
}));

await wallet.writeContract({
  address: "0x100000000000000000000000000000000000000b",
  abi: privacyAbi,
  functionName: "batchTransfer",
  args: [batchId, requests],
});
ESC
검색어를 입력하세요