Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

시스템 트랜잭션 참조

StableSystem 프리컴파일은 고정된 EVM 컨트랙트 인터페이스를 통해 Stable 프로토콜 데이터와 이벤트를 노출합니다. v1.8.0에서는 모든 클라이언트가 보장된 블록 공간 레지스트리를 쿼리할 수 있지만, 프로토콜에서 생성된 트랜잭션만 시스템 로그를 발행할 수 있습니다.

컨트랙트

프리컴파일은 메인넷과 테스트넷에서 동일한 주소를 사용합니다:

0x0000000000000000000000000000000000009999

메서드셀렉터액세스가스 한도목적
blockspaceLanes()0x2c0ac3be누구나, 읽기 전용10,000활성 엔터프라이즈 및 트랜잭션-유형 레인 레지스트리를 반환합니다.
notifySystemTxLogs()0xe8e983b7시스템 트랜잭션 발신자만50,000최대 100개의 대기 중인 시스템 로그 항목을 처리합니다.

v1.8.0 ABI에 이 솔리디티 인터페이스를 사용하십시오:

// SAFE: This interface matches the Stable v1.8.0 StableSystem ABI.
struct EnterpriseLane {
    uint64 id;
    string name;
    uint32 weight;
}
 
struct TxTypeLane {
    uint64 id;
    string name;
    address[] toAddrs;
    bytes4[] methods;
    uint8[] txTypes;
    uint64[] nonceKeys;
    address[] senders;
    uint32 weight;
    bool noOverflow;
}
 
struct BlockspaceLanes {
    uint32 maxBlockspaceGasWeight;
    EnterpriseLane[] enterpriseLanes;
    TxTypeLane[] txTypeLanes;
}
 
interface IStableSystem {
    event UnbondingCompleted(
        address indexed delegator,
        address indexed validator,
        uint64 indexed originBlockHeight,
        uint256 amount
    );
 
    function notifySystemTxLogs() external;
 
    function blockspaceLanes()
        external
        view
        returns (BlockspaceLanes memory lanes);
}

blockspaceLanes()

blockspaceLanes()는 블록 제안 및 유효성 검사 중에 사용되는 거버넌스 제어 레인 레지스트리를 반환합니다. 이는 맞춤형 JSON-RPC 메서드가 아닌 일반적인 eth_call이며, 엔터프라이즈 게이트웨이가 필요하지 않습니다.

두 레인 배열은 id에 따라 오름차순으로 정렬됩니다. ID가 낮을수록 일치 우선순위가 높습니다.

반환 값

필드유형설명
maxBlockspaceGasWeightuint32구성된 모든 레인에 걸쳐 예약된 블록 가스 한도의 0에서 100까지의 백분율입니다.
enterpriseLanesEnterpriseLane[]엔터프라이즈 레인 정의. 거버넌스는 최대 하나의 엔터프라이즈 레인을 허용합니다.
txTypeLanesTxTypeLane[]트랜잭션 필드를 검사하는 일치 규칙이 있는 레인.

엔터프라이즈 레인

NonceKey의 비트 63이 설정된 모든 CustomTxMaxUint64를 제외하고 구성된 엔터프라이즈 레인으로 라우팅됩니다. 하위 63비트는 레인이 아닌 독립적인 논스 채널을 선택합니다.

필드유형설명
iduint64드레인 순서 우선순위 및 식별자.
namestring사람이 읽을 수 있는 레인 이름.
weightuint32레인에 할당된 예약된 블록 공간 풀의 0에서 100까지의 백분율입니다.

트랜잭션-유형 레인

트랜잭션은 모든 채워진 매처 필드와 일치해야 합니다. 하나의 필드 내의 항목은 대안이며, 빈 매처는 와일드카드입니다.

필드유형설명
iduint64레인 우선순위 및 식별자. ID가 낮을수록 먼저 일치합니다.
namestring사람이 읽을 수 있는 레인 이름.
toAddrsaddress[]허용된 대상 주소. 비어 있으면 모든 대상을 일치시킵니다.
methodsbytes4[]허용된 4바이트 함수 셀렉터. 비어 있으면 모든 셀렉터를 일치시킵니다.
txTypesuint8[]허용된 트랜잭션 형식. 비어 있거나 0 항목은 모든 형식을 일치시킵니다.
nonceKeysuint64[]허용된 논스 키. 비어 있거나 0 항목은 모든 키를 일치시킵니다.
sendersaddress[]허용된 발신자 주소. 비어 있으면 모든 발신자를 일치시킵니다.
weightuint32레인에 할당된 예약된 블록 공간 풀의 0에서 100까지의 백분율입니다.
noOverflowbooltrue인 경우, 이 레인의 할당량을 초과하는 트랜잭션은 이후 일치하는 레인 또는 일반 레인에서 재시도되지 않습니다.

txTypes는 다음 TxFormat 값을 사용합니다:

트랜잭션 형식EVM 유형
0와일드카드Any
1레거시0x00
2액세스 리스트0x01
3동적 수수료0x02
4코드 설정0x04
52차원 논스0x3F

레지스트리 쿼리

Foundry의 cast 명령으로 프리컴파일을 호출합니다:

cast call \
  0x0000000000000000000000000000000000009999 \
  "blockspaceLanes()((uint32,(uint64,string,uint32)[],(uint64,string,address[],bytes4[],uint8[],uint64[],address[],uint32,bool)[]))" \
  --rpc-url https://rpc.stable.xyz

v1.8.0 메인넷 활성화는 20%의 예약된 풀과 그 풀의 50%를 가진 하나의 엔터프라이즈 레인을 시드했습니다. 거버넌스는 이 출력을 변경할 수 있습니다.

(20, [(1, "enterprise", 50)], [])

notifySystemTxLogs()

notifySystemTxLogs()는 상태에서 대기 중인 프로토콜 로그 항목을 읽고 호출당 최대 100개를 처리합니다. 인수를 받지 않으며 값을 반환하지 않습니다.

발신자 0x0000000000000000000000000000000000000001를 가진 시스템 트랜잭션만 이 메서드를 호출할 수 있습니다. 사용자 또는 컨트랙트에서 호출하면 되돌려집니다.

언본딩이 완료되면 흐름은 다음과 같습니다:

  1. 스테이킹 모듈이 작업을 완료하고 SDK 이벤트를 기록합니다.
  2. x/stable 모듈은 이벤트 데이터와 원래 블록 높이를 대기열에 추가합니다.
  3. 다음 블록 제안자는 notifySystemTxLogs()를 호출하는 시스템 트랜잭션을 생성합니다.
  4. 프리컴파일은 최대 100개의 대기 중인 항목에 대해 EVM 로그를 발행합니다.
  5. 클라이언트는 eth_getLogs, WebSocket 구독 또는 블록 익스플로러를 사용하여 로그를 읽습니다.

배치 한도를 초과하는 항목은 나중 블록을 위해 대기열에 유지됩니다.

UnbondingCompleted 이벤트

매개변수유형색인됨설명
delegatoraddressYes위임된 토큰의 언본딩이 완료된 주소.
validatoraddressYes검증자-운영자 주소에서 파생된 검증자 주소.
originBlockHeightuint64YesSDK-레이어 언본딩이 원래 완료된 블록 높이.
amountuint256No언본딩이 완료된 양.

EVM 로그는 시스템 트랜잭션을 포함하는 블록에 나타납니다. 원래 SDK 이벤트의 높이가 필요할 때 originBlockHeight를 사용하십시오.

보안 모델

  • 프로토콜은 블록 제안 중에 시스템 트랜잭션을 생성합니다.
  • EVM 상태-전환 규칙은 시스템 트랜잭션에 발신자 0x0000000000000000000000000000000000000001를 예약합니다.
  • 사용자 트랜잭션은 발신자를 위조하거나 notifySystemTxLogs()를 성공적으로 호출할 수 없습니다.
  • blockspaceLanes()는 의도적으로 공개되어 있으며 상태를 변경할 수 없습니다.

다음으로 이동할 곳