testnet
GitHub EN

컨트랙트 아티팩트

component developer

Solidity 컴파일러가 생성하는 JSON 파일로, 스마트 컨트랙트의 ABI와 바이트코드를 포함합니다.

컨트랙트 아티팩트는 스마트 컨트랙트 컴파일 프로세스의 주요 출력물입니다. 이는 컨트랙트의 표준적인, 기계가 읽을 수 있는 표현인 JSON 파일로, 특히 ABI(Application Binary Interface)와 EVM 바이트코드를 포함합니다. Maroo 생태계에서 이러한 아티팩트는 Go 모듈과 EVM 간의 상호작용을 가능하게 하는 데 매우 중요합니다.

아티팩트의 구조

Hardhat이 생성하는 일반적인 컨트랙트 아티팩트는 여러 주요 필드를 포함합니다:
  • abi: 컨트랙트의 public 함수, 이벤트, 에러를 정의하는 객체의 배열입니다. 컨트랙트 호출을 인코딩하고 디코딩하는 방법을 지정하므로 아티팩트에서 가장 자주 사용되는 부분입니다.
  • bytecode: 컴파일된 EVM 바이트코드를 16진수 문자열로 나타냅니다. 이것이 실제로 블록체인에 배포되고 EVM에 의해 실행되는 코드입니다.
  • contractName: 컨트랙트의 이름입니다.
  • sourceName: 소스 Solidity 파일의 경로입니다.
  • deployedBytecode: 생성자 로직을 제외한, 체인 상에 존재하는 컨트랙트의 바이트코드입니다.

동일 위치 저장 전략

Maroo의 빌드 시스템은 의도적으로 컴파일된 아티팩트 JSON 파일을 소스 .sol 파일 바로 옆에 배치합니다. 예를 들어, 컨트랙트가 precompiles/identity/IIdentity.sol에 정의되어 있다면, 그 아티팩트는 precompiles/identity/abi.json 또는 precompiles/identity/IIdentity.json으로 저장됩니다. 이 동일 위치 저장 전략은 핵심 Go 모듈의 의존성 관리를 단순화합니다. Go 모듈은 복잡한 조회 경로 없이 자신의 디렉토리를 살펴봄으로써 필요한 ABI를 안정적으로 찾을 수 있습니다.

`abi.json` 관례

프리컴파일 인터페이스의 경우, 아티팩트는 종종 ContractName.json 대신 abi.json으로 이름이 지정됩니다. 이 관례는 Go 코드가 읽을 수 있는 안정적이고 예측 가능한 파일 이름을 제공합니다. 프리컴파일의 Go 구현은 Solidity 인터페이스의 특정 이름에 관계없이 모듈 디렉토리에서 abi.json을 로드하도록 하드코딩될 수 있어, 인터페이스 이름 변경에 대해 시스템을 더 견고하게 만듭니다.

버전 관리

컨트랙트 아티팩트는 버전 관리 시스템(Git)에 커밋됩니다. 이는 Go 코드와 그것이 의존하는 컨트랙트 인터페이스가 항상 동기화되도록 보장하기 위한 의도적인 선택입니다. 개발자가 Maroo 코드베이스의 특정 버전을 체크아웃하면, Go 코드가 빌드되고 테스트된 정확한 ABI를 얻게 되어 ABI 불일치로 인한 통합 문제를 방지할 수 있습니다.
소스: maroo
ESC
검색어를 입력하세요