testnet
GitHub EN

새로운 프리컴파일 인터페이스 추가하기

intermediate advanced 20 min

커스텀 프리컴파일 컨트랙트를 위한 새로운 Solidity 인터페이스를 정의하고, 컴파일하며, Go 구현에 필요한 ABI 아티팩트를 생성하는 방법을 배웁니다.

학습 목표

  • 새로운 프리컴파일을 위한 디렉토리 구조화 방법.
  • 프리컴파일을 위한 Solidity 인터페이스 작성 방법.
  • `abi.json` 파일을 생성하기 위한 컴파일 스크립트 사용법.
  • 생성된 ABI가 Go 모듈에서 어떻게 사용되는지.

사전 요구사항

  • Maroo 리포지토리의 로컬 클론.
  • Solidity 인터페이스에 대한 기본적 이해.
  • 프리컴파일 컨트랙트 개념에 대한 친숙함.

필요 도구

Python 3.8+Node.js 18+Yarn
Maroo에서 프리컴파일 컨트랙트는 Go로 구현되지만 표준 Solidity 인터페이스를 통해 EVM에 노출됩니다. 이를 통해 스마트 컨트랙트는 핵심 블록체인 로직과 원활하게 상호작용할 수 있습니다. 이 튜토리얼은 가상의 'Oracle' 프리컴파일을 위한 새로운 인터페이스를 만드는 과정을 안내합니다.
1

1. 디렉토리 구조 설정

먼저, precompiles/ 폴더 내에 새로운 프리컴파일을 위한 디렉토리를 만들어야 합니다. 이는 인터페이스와 미래의 Go 구현을 같은 위치에 둡니다.
terminal bash
mkdir -p precompiles/oracle
2

2. Solidity 인터페이스 정의

precompiles/oracle/ 디렉토리 안에 IOracle.sol이라는 새 Solidity 파일을 만듭니다. 가격을 가져오는 함수와 업데이트를 기록하는 이벤트를 포함하는 인터페이스를 정의합니다. 이 인터페이스는 EVM이 사용할 정확한 함수 시그니처를 정의합니다.
precompiles/oracle/IOracle.sol solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IOracle {
    /**
     * @dev 가격이 업데이트될 때 발생합니다.
     */
    event PriceUpdated(string indexed symbol, uint256 price);

    /**
     * @dev 주어진 심볼의 최신 가격을 반환합니다.
     */
    function getPrice(string calldata symbol) external view returns (uint256);
}
3

3. Hardhat 의존성 설치

컴파일 스크립트를 실행하기 전에 중앙 Hardhat 프로젝트의 의존성을 설치해야 합니다. contracts 디렉토리로 이동하여 yarn을 실행합니다.
terminal bash
cd contracts
yarn install
팁: 이 작업은 한 번만 수행하거나 `contracts/package.json`의 의존성이 변경될 때만 수행하면 됩니다.
4

4. 인터페이스 컴파일

이제 컴파일 스크립트를 실행하여 새로운 인터페이스를 처리합니다. 스크립트는 IOracle.sol을 찾아 Hardhat 프로젝트에 복사하고 컴파일한 후, 결과 아티팩트를 precompiles/oracle/ 디렉토리에 다시 배치합니다.
terminal bash
# 'contracts/'에서 스크립트 디렉토리로 다시 이동
cd ../scripts/compile_smart_contracts

python3 compile_smart_contracts.py --compile
5

5. 아티팩트 확인

스크립트가 완료되면 precompiles/oracle/에 새로운 abi.json 파일이 생성된 것을 볼 수 있습니다. 이 파일에는 IOracle 인터페이스의 ABI가 포함되어 있습니다. 오라클 프리컴파일의 Go 구현은 이 파일을 로드하여 함수 호출을 파싱하고 이벤트를 올바르게 발생시키는 방법을 이해합니다.
terminal bash
ls -l precompiles/oracle
output text
total 8
-rw-r--r--  1 user  staff  1234 Date Time abi.json
-rw-r--r--  1 user  staff   321 Date Time IOracle.sol

마무리

성공적으로 새로운 프리컴파일을 위한 Solidity 인터페이스를 정의하고 Maroo 빌드 시스템을 사용하여 필요한 ABI 아티팩트를 생성했습니다. 이 abi.json은 Go 로직을 EVM에 연결하는 중요한 다리 역할을 하며, Maroo 네트워크에 강력하고 효율적인 커스텀 확장을 가능하게 합니다.
소스: maroo
ESC
검색어를 입력하세요