Skip to main content

배경

지금까지는 여러 IP를 등록하거나, 민팅, 라이선스 약관 부착, 파생물 등록 등의 작업을 수행하려면 각 작업마다 별도의 트랜잭션이 필요했습니다. 이는 비효율적이고 비용이 많이 들 수 있습니다. 이 과정을 간소화하기 위해, 여러 트랜잭션을 하나로 일괄 처리할 수 있습니다. 이를 위한 두 가지 솔루션이 있습니다:
  1. SPG 함수 호출 일괄 처리: SPG의 내장 multicall 함수 사용.
  2. SPG 이외의 함수 호출 일괄 처리: Multicall3 컨트랙트 사용.

1. 내장 multicall 함수를 통한 SPG 함수 호출 일괄 처리

SPG에는 여러 읽기 또는 쓰기 작업을 단일 트랜잭션으로 결합할 수 있는 multicall 함수가 포함되어 있습니다.

함수 정의

multicall 함수는 인코딩된 호출 데이터 배열을 받아, 각 함수 호출에 해당하는 인코딩된 결과 배열을 반환합니다:
Solidity

사용 예시

여러 NFT를 민팅하고, 이를 IP로 등록하고, 일부 부모 IP에 파생물로 연결한다고 가정해봅시다. 이를 위해 SPG의 multicall 함수를 사용해 mintAndRegisterIpAndMakeDerivative 함수 호출들을 일괄 처리할 수 있습니다. 방법은 다음과 같습니다:
Solidity
multicall 함수를 사용해 mintAndRegisterIpAndMakeDerivative를 일괄 호출하려면:
JavaScript

2. Multicall3 컨트랙트를 통한 함수 호출 일괄 처리

Multicall3 컨트랙트는 Multicall 실행 중 액세스 제어 및 컨텍스트가 변경되기 때문에, SPGNFT 민팅을 포함하는 SPG 함수와 완전히 호환되지는 않습니다. 그러한 작업의 경우, SPG의 내장 multicall 함수를 사용하세요.
Multicall3 컨트랙트는 단일 트랜잭션 내에서 여러 호출을 실행하고 결과를 집계할 수 있게 해줍니다. viem 라이브러리는 Multicall3에 대한 네이티브 지원을 제공합니다.

Aeneid Testnet Multicall3 배포 정보

(모든 EVM 체인에서 동일한 주소)

주요 함수

여러 함수 호출을 일괄 처리하려면, 다음 함수들을 사용할 수 있습니다:
  1. aggregate3: Call3 구조체를 사용해 호출을 일괄 처리합니다.
  2. aggregate3Value: aggregate3와 유사하지만, 각 호출에 값(value)을 첨부할 수도 있습니다.
Solidity

구조체 정의

  • Call3: aggregate3에서 사용.
  • Call3Value: aggregate3Value에서 사용.
Solidity

반환 타입

  • Result: aggregate3aggregate3Value 모두에서 반환되는 구조체.
Solidity
Solidity, TypeScript, Python의 자세한 예시는 Multicall3 저장소를 참고하세요.

제한 사항

Multicall3 사용 시의 제한 사항 목록은 Multicall3 README를 참고하세요.

추가 자료

전체 Multicall3 인터페이스

Solidity