시스템 트랜잭션 참조
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가 낮을수록 일치 우선순위가 높습니다.
반환 값
| 필드 | 유형 | 설명 |
|---|---|---|
maxBlockspaceGasWeight | uint32 | 구성된 모든 레인에 걸쳐 예약된 블록 가스 한도의 0에서 100까지의 백분율입니다. |
enterpriseLanes | EnterpriseLane[] | 엔터프라이즈 레인 정의. 거버넌스는 최대 하나의 엔터프라이즈 레인을 허용합니다. |
txTypeLanes | TxTypeLane[] | 트랜잭션 필드를 검사하는 일치 규칙이 있는 레인. |
엔터프라이즈 레인
NonceKey의 비트 63이 설정된 모든 CustomTx는 MaxUint64를 제외하고 구성된 엔터프라이즈 레인으로 라우팅됩니다. 하위 63비트는 레인이 아닌 독립적인 논스 채널을 선택합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
id | uint64 | 드레인 순서 우선순위 및 식별자. |
name | string | 사람이 읽을 수 있는 레인 이름. |
weight | uint32 | 레인에 할당된 예약된 블록 공간 풀의 0에서 100까지의 백분율입니다. |
트랜잭션-유형 레인
트랜잭션은 모든 채워진 매처 필드와 일치해야 합니다. 하나의 필드 내의 항목은 대안이며, 빈 매처는 와일드카드입니다.
| 필드 | 유형 | 설명 |
|---|---|---|
id | uint64 | 레인 우선순위 및 식별자. ID가 낮을수록 먼저 일치합니다. |
name | string | 사람이 읽을 수 있는 레인 이름. |
toAddrs | address[] | 허용된 대상 주소. 비어 있으면 모든 대상을 일치시킵니다. |
methods | bytes4[] | 허용된 4바이트 함수 셀렉터. 비어 있으면 모든 셀렉터를 일치시킵니다. |
txTypes | uint8[] | 허용된 트랜잭션 형식. 비어 있거나 0 항목은 모든 형식을 일치시킵니다. |
nonceKeys | uint64[] | 허용된 논스 키. 비어 있거나 0 항목은 모든 키를 일치시킵니다. |
senders | address[] | 허용된 발신자 주소. 비어 있으면 모든 발신자를 일치시킵니다. |
weight | uint32 | 레인에 할당된 예약된 블록 공간 풀의 0에서 100까지의 백분율입니다. |
noOverflow | bool | true인 경우, 이 레인의 할당량을 초과하는 트랜잭션은 이후 일치하는 레인 또는 일반 레인에서 재시도되지 않습니다. |
txTypes는 다음 TxFormat 값을 사용합니다:
| 값 | 트랜잭션 형식 | EVM 유형 |
|---|---|---|
0 | 와일드카드 | Any |
1 | 레거시 | 0x00 |
2 | 액세스 리스트 | 0x01 |
3 | 동적 수수료 | 0x02 |
4 | 코드 설정 | 0x04 |
5 | 2차원 논스 | 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.xyzv1.8.0 메인넷 활성화는 20%의 예약된 풀과 그 풀의 50%를 가진 하나의 엔터프라이즈 레인을 시드했습니다. 거버넌스는 이 출력을 변경할 수 있습니다.
(20, [(1, "enterprise", 50)], [])notifySystemTxLogs()
notifySystemTxLogs()는 상태에서 대기 중인 프로토콜 로그 항목을 읽고 호출당 최대 100개를 처리합니다. 인수를 받지 않으며 값을 반환하지 않습니다.
발신자 0x0000000000000000000000000000000000000001를 가진 시스템 트랜잭션만 이 메서드를 호출할 수 있습니다. 사용자 또는 컨트랙트에서 호출하면 되돌려집니다.
언본딩이 완료되면 흐름은 다음과 같습니다:
- 스테이킹 모듈이 작업을 완료하고 SDK 이벤트를 기록합니다.
x/stable모듈은 이벤트 데이터와 원래 블록 높이를 대기열에 추가합니다.- 다음 블록 제안자는
notifySystemTxLogs()를 호출하는 시스템 트랜잭션을 생성합니다. - 프리컴파일은 최대 100개의 대기 중인 항목에 대해 EVM 로그를 발행합니다.
- 클라이언트는
eth_getLogs, WebSocket 구독 또는 블록 익스플로러를 사용하여 로그를 읽습니다.
배치 한도를 초과하는 항목은 나중 블록을 위해 대기열에 유지됩니다.
UnbondingCompleted 이벤트
| 매개변수 | 유형 | 색인됨 | 설명 |
|---|---|---|---|
delegator | address | Yes | 위임된 토큰의 언본딩이 완료된 주소. |
validator | address | Yes | 검증자-운영자 주소에서 파생된 검증자 주소. |
originBlockHeight | uint64 | Yes | SDK-레이어 언본딩이 원래 완료된 블록 높이. |
amount | uint256 | No | 언본딩이 완료된 양. |
EVM 로그는 시스템 트랜잭션을 포함하는 블록에 나타납니다. 원래 SDK 이벤트의 높이가 필요할 때 originBlockHeight를 사용하십시오.
보안 모델
- 프로토콜은 블록 제안 중에 시스템 트랜잭션을 생성합니다.
- EVM 상태-전환 규칙은 시스템 트랜잭션에 발신자
0x0000000000000000000000000000000000000001를 예약합니다. - 사용자 트랜잭션은 발신자를 위조하거나
notifySystemTxLogs()를 성공적으로 호출할 수 없습니다. blockspaceLanes()는 의도적으로 공개되어 있으며 상태를 변경할 수 없습니다.

