메인 콘텐츠로 건너뛰기

Bank Precompile

Bank Precompile은 고정 주소 0x0000000000000000000000000000000000000064에 있는 시스템 스마트 컨트랙트입니다. EVM 개발자에게 Injective의 bank 모듈(x/bank)과 직접 상호작용하는 가스 효율적이고 네이티브한 경로를 제공합니다. 이를 통해 ERC-20 토큰을 효과적으로 온체인에 가져옵니다. Bank precompile을 사용하는 모든 ERC-20 컨트랙트는 온체인에서 erc20:0x... denom으로 표현됩니다. 기술적으로 이는 토큰이 온체인에만 존재하며 EVM은 별도의 복사본을 유지하는 대신 체인 상태에 대한 뷰를 제공함을 의미합니다. 두 개의 토큰 버전이 전환하기 위해 사용자 작업이 필요한 기존 브릿징과 달리 Bank precompile은 온체인 bank denom 또는 ERC-20 transfer() 메서드를 사용하는 모든 전송에 대해 실시간 이중 환경 반영을 제공합니다. Bank precompile로 지원되는 다양한 ERC-20 구현과 precompile 인터페이스 및 추상 컨트랙트는 Injective의 Solidity Contracts 저장소에서 사용할 수 있습니다. 주요 컨트랙트는 다음과 같습니다:
  • Bank.sol – precompile 인터페이스
  • BankERC20.sol – Bank precompile로 지원되는 추상 ERC20 구현
  • FixedSupplyBankERC20.sol – 고정 공급량의 탈중앙화 ERC20(소유자 없음, 민팅 또는 버닝 없음)
  • MintBurnBankERC20.sol – 토큰을 민트하고 버닝할 수 있는 소유자가 있는 ERC20
이러한 구현은 OpenZeppelin의 ERC20 컨트랙트를 기반으로 합니다. 개발자는 Bank precompile을 활용하는 사용자 정의 ERC20 컨트랙트를 자유롭게 만들 수 있습니다.

ERC20 컨트랙트 배포

ℹ️ 참고: denom 스팸을 방지하기 위해 ERC20 모듈을 통한 ERC20 컨트랙트 배포는 유료 작업이며 1 INJ의 배포 수수료가 필요합니다. ERC20 컨트랙트 배포 트랜잭션에 이 금액이 포함되어 있는지 확인하세요. 그렇지 않으면 작업이 거부됩니다.

Bank Precompile 인터페이스

interface IBankModule {
    function mint(address,uint256) external payable returns (bool);
    function balanceOf(address,address) external view returns (uint256);
    function burn(address,uint256) external payable returns (bool);
    function transfer(address,address,uint256) external payable returns (bool);
    function totalSupply(address) external view returns (uint256);
    function metadata(address) external view returns (string memory,string memory,uint8);
    function setMetadata(string memory,string memory,uint8) external payable returns (bool);
}

예제

Wrapped INJ(wINJ)MultiVM Token Standard(MTS)를 구현하기 위해 Bank EVM precompile을 사용합니다.

빌딩 시작

Bank, Exchange 및 Staking precompiles를 사용하여 컨트랙트를 구축하는 방법을 보여주는 몇 가지 데모를 준비했습니다. 이 예제는 또한 가장 일반적인 Ethereum 개발 프레임워크인 Foundry를 사용하여 Injective EVM과 상호작용하는 방법을 보여줍니다. 여기에서 bank precompile 데모를 보고 해당 README를 따르세요.