이 페이지는 커뮤니티 번역으로 참고용이며, 내용은 영어 원문을 우선합니다.
영어 원문 보기 ↗

HyperCore와 상호작용

읽기 프리컴파일

테스트넷 EVM은 HyperCore 정보를 조회할 수 있는 읽기 프리컴파일을 제공합니다. 프리컴파일 주소는 0x0000000000000000000000000000000000000800부터 시작하며, 펍 포지션, 스팟 잔액, 볼트 지분(equity), 스테이킹 위임, 오라클 가격, L1 블록 번호 등의 정보를 조회하는 메서드를 가집니다.

값은 EVM 블록이 구축되는 시점의 최신 HyperCore 상태와 일치함이 보장됩니다.

읽기 프리컴파일을 설명하는 Solidity 파일 L1Read.sol이 첨부되어 있습니다. 예를 들어, 다음 호출은 테스트넷의 세 번째 펍 오라클 가격을 조회합니다:

cast call 0x0000000000000000000000000000000000000807 0x0000000000000000000000000000000000000000000000000000000000000003 --rpc-url https://rpc.hyperliquid-testnet.xyz/evm

부동소수점 숫자로 변환하려면, 반환된 가격을 펍의 경우 10^(6 - szDecimals)(으)로, 스팟의 경우 10^(8 - base asset szDecimals)(으)로 나눕니다.

잘못된 자산이나 볼트 주소 같은 유효하지 않은 입력으로 프리컴파일을 호출하면 오류가 반환되고 프리컴파일 호출 프레임에 전달된 가스가 모두 소모됩니다. 프리컴파일의 가스 비용은 2000 + 65 * (input_len + output_len)입니다.

CoreWriter 컨트랙트

HyperEVM에서 HyperCore로 트랜잭션을 보내기 위한 시스템 컨트랙트가 0x3333333333333333333333333333333333333333에 있습니다. 이 컨트랙트는 HyperCore가 액션으로 처리할 로그를 발생시키기 전에 약 25,000 가스를 소각합니다. 실제로 기본 호출의 가스 사용량은 약 47,000입니다. 쓰기 시스템 컨트랙트용 Solidity 파일 CoreWriter.sol이 첨부되어 있습니다.

액션 인코딩 세부 사항

  • 바이트 1: 인코딩 버전
  • 현재는 버전 1만 지원되지만, 하위 호환성을 유지하면서 향후 업그레이드를 가능하게 합니다.
  • 바이트 2-4: 액션 ID
  • 이 세 바이트는 빅엔디언 부호 없는 정수로 디코딩했을 때 해당 액션의 고유 식별자를 나타냅니다.
  • 나머지 바이트: 액션 인코딩
  • 나머지 바이트는 액션별 데이터를 구성합니다. 항상 Solidity 타입 시퀀스의 원시 ABI 인코딩입니다.

HyperEVM을 사용해 L1 멤풀을 우회하는 잠재적 지연 시간 이점을 방지하기 위해, CoreWriter에서 보낸 주문 액션과 볼트 이체는 온체인에서 몇 초 지연됩니다. 최종 사용자가 적어도 하나의 작은 블록 확인을 기다려야 하므로 UX에는 눈에 띄는 영향이 없습니다. 이렇게 온체인에서 지연된 액션은 L1 탐색기에 두 번 나타납니다. 처음은 큐잉(enqueue)으로, 두 번째는 HyperCore 실행으로.

액션 ID 액션 필드 Solidity 타입 참고
1 지정가 주문 (asset, isBuy, limitPx, sz, reduceOnly, encodedTif, cloid) (uint32, bool, uint64, uint64, bool, uint8, uint128) Tif 인코딩: Alo는 1, Gtc는 2, Ioc는 3. Cloid 인코딩: 0은 cloid 없음을 의미하고, 그 외에는 해당 숫자를 cloid로 사용합니다. limitPx와 sz는 사람이 읽을 수 있는 값의 10^8 배로 전송해야 합니다
2 볼트 이체 (vault, isDeposit, usd) (address, bool, uint64)
3 토큰 위임 (validator, wei, isUndelegate) (address, uint64, bool)
4 스테이킹 입금 wei uint64
5 스테이킹 출금 wei uint64
6 스팟 전송 (destination, token, wei) (address, uint64, uint64)
7 USD 클래스 이체 (ntl, toPerp) (uint64, bool)
8 EVM 컨트랙트 확정 (token, encodedFinalizeEvmContractVariant, createNonce) (uint64, uint8, uint64) encodedFinalizeEvmContractVariant는 Create가 1, FirstStorageSlot이 2, CustomStorageSlot이 3. Create 배리언트인 경우 createNonce 입력 인자가 사용됩니다.
9 API 지갑 추가 (API wallet address, API wallet name) (address, string) API 지갑 이름이 비어 있으면 메인 API 지갑/에이전트가 됩니다
10 oid로 주문 취소 (asset, oid) (uint32, uint64)
11 cloid로 주문 취소 (asset, cloid) (uint32, uint128)
12 빌더 수수료 승인 (maxFeeRate, builder address) (uint64, address) maxFeeRate는 decibps 단위입니다. 0.01%의 빌더 수수료를 승인하려면 maxFreeRate가 10이어야 합니다.
13 자산 전송 (destination, subAccount, source_dex, destination_dex, token, wei) (address, address, uint32, uint32, uint64, uint64) subAccount가 제로 주소가 아니면 subAccount에서 이체합니다. 스팟의 경우 source_dex 또는 destination_dex에 uint32::MAX를 지정합니다.
15 차입/대출 작업 (encodedOperation, token, wei) (uint8, uint64, uint64) encodedOperation은 Supply가 0, Withdraw가 1. wei가 0이면 작업을 최대로 적용합니다(예: 리저브에서 전체 잔액 인출).
16 추상화 설정 (user, abstraction) (address, uint8) abstraction은 disabled가 1, unifiedAccount가 2, portfolioMargin이 3. user는 마스터 사용자 또는 서브 계정일 수 있습니다.
17 아웃컴 작업 (encodedOperation, question, outcome, wei) (uint8, uint32, uint32, uint64)

encodedOperation은 0이 SplitOutcome, 1이 MergeOutcome, 2가 MergeQuestion, 3이 NegateOutcome. 사용하지 않는 필드는 0으로 설정해야 합니다: SplitOutcome과 MergeOutcome은 question을 무시하고, MergeQuestion은 outcome을 무시합니다. negate는 둘 다 사용합니다. 사용하지 않는 필드가 0이 아닌 페이로드는 버려집니다. wei는 size의 배수여야 합니다. 병합 작업에서 0은 최대 수량을 병합함을 의미합니다.

다음은 HyperCore에서 자신의 컨트랙트 주소를 대신해 액션을 보내는 예시 컨트랙트로, Solidity에서 인코딩된 액션을 구성하는 한 가지 방법도 보여줍니다.

contract CoreWriterCaller {
    function sendUsdClassTransfer(uint64 ntl, bool toPerp) external {
        bytes memory encodedAction = abi.encode(ntl, toPerp);
        bytes memory data = new bytes(4 + encodedAction.length);
        data[0] = 0x01;
        data[1] = 0x00;
        data[2] = 0x00;
        data[3] = 0x07;
        for (uint256 i = 0; i < encodedAction.length; i++) {
            data[4 + i] = encodedAction[i];
        }
        CoreWriter(0x3333333333333333333333333333333333333333).sendRawAction(data);
    }
}

\ 즐거운 빌딩 되세요. 어떤 피드백이든 환영합니다.

{% file src="/files/4dRObNCsfvnrcSVeJXgc" %}

{% file src="/files/Nsv6L7FugL44GNDvyDq2" %}

영문 공식 출처: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore
원문 수집일: · 미러 빌드일: · 커뮤니티 번역이며 영문 원문 우선
비공식 커뮤니티 번역입니다. 저작권은 Hyperliquid에 있으며 영어 원문을 우선합니다. 출처: https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/hyperevm/interacting-with-hypercore