가스로서의 USDT0
수수료는 USDT0으로 지불합니다. 두 번째 토큰, 래핑, 또는 ETH와 등가인 금액을 충전할 필요가 없습니다. USDT0은 기본 가스 토큰이자 동일한 잔액의 ERC-20 토큰 역할을 합니다. 지불로 이동하는 자산 자체를 이동하는 트랜잭션의 비용을 지불합니다. 수수료는 변동성이 큰 기본 토큰이 아닌 달러로 표시됩니다.
이러한 설계는 이더리움과는 다른 동작 방식을 가지며, 잔액 의미, 허용 범위 안전성 및 특정 opcode 가정에 영향을 미칩니다. 이더리움에서 컨트랙트를 포팅하는 경우, 배포하기 전에 마이그레이션 체크리스트를 보려면 Stable의 USDT0 동작을 참조하십시오.
초록
Stable은 USDT0을 기본 가스 토큰으로 사용하는 EVM 호환 블록체인입니다. USDT0은 가스 지불 및 가치 전송을 위한 기본 자산으로 동시에 기능하며, approve, transfer, transferFrom, permit을 지원하는 ERC-20 토큰으로도 작동합니다.
이 문서는 Stable의 USDT0 가스 메커니즘을 설명하고, 결과적인 동작 차이점을 기술하며, Stable에 배포된 스마트 컨트랙트에 대한 필수 및 권장 개발 패턴을 정의합니다.
버전 노트
Stable v1.2.0부터 USDT0은 gUSDT를 대체하여 Stable의 기본 가스 토큰이 됩니다. 이 전환의 일환으로:
- gUSDT는 단계적으로 폐지됩니다.
- 기존 gUSDT 잔액은 USDT0으로 자동 변환됩니다.
- 사용자 및 애플리케이션은 더 이상 수수료를 지불하거나 가치를 이동하기 위해 래핑 및 언래핑 흐름이 필요하지 않습니다.
v1.2.0 이후 USDT0은 다음 두 가지 역할을 합니다.
- 네트워크 수수료 자산(가스)
approve,permit,transfer,transferFrom을 포함하는 표준 ERC20 토큰
네트워크 주소
USDT0 토큰 컨트랙트 주소:
용어
- Stable: USDT0이 기본 가스 토큰인 EVM 호환 블록체인.
- USDT0: 다음 두 가지 역할을 하는 USDT의 옴니체인 버전:
- 가스 및 가치 전송에 사용되는 기본 자산
- 허용 및 허용 의미를 가진 ERC20 토큰
- 기본 잔액:
address(x).balance로 반환되는 잔액으로, USDT0으로 표시됩니다. - 가스 수수료: EIP-1559 스타일 수수료 시장에 따라 계산된 USDT0으로 지불되는 트랜잭션 수수료.
USDT0이란 무엇인가요?
USDT0은 LayerZero의 Omnichain Fungible Token (OFT) 표준을 사용하는 USDT의 옴니체인 표현입니다. USDT0은 USDT와 1:1로 고정되어 있으며, 기존 브리지 워크플로우나 래핑된 표현 없이 여러 블록체인에서 이동할 수 있도록 설계되었습니다.
USDT0을 체인 간에 전송할 때, 토큰은 일부 소스 체인(해당 체인의 기본 USDT 지원에 따라 다름)에서 잠기거나 소각됩니다. 그런 다음 LayerZero의 교차 체인 메시징을 통해 대상 체인에 발행됩니다. 이렇게 하면 파편화된 체인 로컬 풀이 아닌 단일 상호 운용 가능한 자산으로 유동성을 통합하면서 1:1 고정을 유지할 수 있습니다.
사용자에게는 더 빠른 온보딩, 운영 복잡성 감소 및 유동성 이동성 향상을 가능하게 합니다.
USDT0 및 Stable
USDT0은 Stable의 온체인 경제학과 일상적인 사용을 지원하는 핵심 자산입니다. 동일한 자산이 수수료 지불과 가치 전송에 모두 사용되므로 Stable은 다음 경우에 마찰을 줄여줍니다.
- 일반 사용자: 간편한 온보딩 및 더 적은 토큰 개념
- 개발자: 간편한 수수료 및 가치 흐름
- 기업: 간소화된 회계 및 재무 운영
Stable은 또한 LayerZero를 통해 사용자가 다른 네트워크에서 USDT0을 온보딩할 수 있도록 함으로써 첫날부터 깊은 USDT 유동성에 접근할 수 있습니다.
가정 및 전제 조건
아래 내용에 대해 다음 사항을 이해하고 있다고 가정합니다.
- Solidity 실행 의미 및 기본 값 전송
- ERC20 허용 메커니즘 및 허용 흐름
- Checks-Effects-Interactions를 포함한 표준 스마트 컨트랙트 보안 패턴
1. 가스 및 수수료 모델
1.1 개요
Stable은 모든 트랜잭션 수수료를 USDT0으로 표시합니다. 가스 가격 책정은 동적으로 조정되는 기본 수수료와 함께 EIP-1559 스타일 모델을 따릅니다.
트랜잭션 수수료는 다음과 같이 정의됩니다.
fee = gasUsed × baseFee트랜잭션은 표준 EIP-1559 매개변수를 사용하여 maxFeePerGas를 지정할 수 있습니다.
참고: Stable은 우선순위 팁을 지원하지 않습니다. maxPriorityFeePerGas를 설정하지 마십시오. 그렇지 않으면 팁 금액이 손실됩니다.
1.2 트랜잭션 제출
클라이언트는 최신 블록에서 최신 기본 수수료를 가져와 maxFeePerGas를 계산할 때 안전 마진을 포함해야 합니다.
예시 (설명용):
const block = await provider.getBlock("latest");
const baseFee = block.baseFeePerGas;
const maxPriorityFeePerGas = 1n;
const maxFeePerGas = baseFee * 2n + maxPriorityFeePerGas;1.3 USDT0 획득
계정은 다음을 통해 USDT0을 얻습니다.
- 다른 지원되는 체인에서 USDT0 브리징
- Stable의 다른 계정으로부터 전송 받기
2. Stable이 USDT0을 가스 토큰으로 사용하는 방법
Stable은 선불 및 환불 정산 모델을 사용하여 USDT0으로 가스를 청구합니다.
예시 트랜잭션
앨리스는 밥에게 100 USDT0을 보냅니다.
2.1 Ante-handler 단계
MonoEVMAnteHandler에서 트랜잭션 유효성 검사 중:
- 앨리스의 USDT0 잔액을 읽습니다.
- 프로토콜은 앨리스가 다음을 감당할 수 있는지 확인합니다.
- 트랜잭션 값 (100 USDT0)
- 가능한 최대 가스 수수료 (
gasWanted × fee).
- 최대 가스 수수료는 선불로 이체됩니다.
alice → fee_collector로 USDT0.
2.2 실행 단계
ApplyTransaction 중:
- EVM은 트랜잭션을 실행합니다.
- 실제 가스 소비량이 기록됩니다.
- 값 전송이 적용됩니다.
alice → bob으로 100 USDT0 전송.
2.3 정산 단계
실행 후:
- 프로토콜은 선불 수수료 중 사용되지 않은 부분을 계산합니다.
refund = (gasWanted − gasUsed) × baseFee - 사용되지 않은 수수료는 환불됩니다.
fee_collector → alice로 USDT0.
3. 잔액 의미 및 동작 차이
3.1 기본 잔액 변경 가능성
이더리움에서 컨트랙트의 기본 잔액은 일반적으로 컨트랙트 실행의 결과로만 변경됩니다.
Stable에서는 컨트랙트의 기본 USDT0 잔액이 transferFrom 및 permit을 포함한 ERC20 허용 기반 작업으로 인해 변경될 수도 있습니다. 이러한 작업은 컨트랙트 코드를 호출하지 않고도 컨트랙트의 기본 잔액을 줄일 수 있습니다.
결과적으로 다음 가정은 Stable에서 유효하지 않습니다.
- 컨트랙트의 기본 잔액은 컨트랙트가 호출될 때만 감소할 수 있습니다.
4. 컨트랙트 설계 요구 사항
4.1 금지된 패턴: 미러링된 잔액 회계
컨트랙트는 기본 잔액을 미러링하기 위해 내부 변수에 의존해서는 안 됩니다.
안전하지 않은 패턴의 예:
uint256 public deposited;
function deposit() external payable {
deposited += msg.value;
}이러한 변수는 허용 기반 전송을 통해 USDT0이 소진되면 실제 기본 잔액과 다를 수 있습니다.
4.2 필수 패턴: 실제 잔액 지불 능력 확인
모든 기본 값 전송은 전송 직전에 address(this).balance를 사용하여 지불 능력을 확인해야 합니다.
예시:
require(address(this).balance >= amount, "insufficient balance");인출은 Checks-Effects-Interactions 순서를 따라야 합니다.
uint256 amount = credit[msg.sender];
credit[msg.sender] = 0;
require(address(this).balance >= amount);
payable(msg.sender).call{value: amount}("");4.3 상태 진행은 잔액 독립적이어야 합니다.
진행, 마일스톤 또는 완료 조건에 의존하는 프로토콜 로직은 카운터 또는 에포크와 같은 잔액과 무관한 상태 변수를 사용하여 명시적으로 추적해야 합니다.
기본 잔액은 지급 시점에 지불 능력 확인을 위해서만 사용되어야 합니다.
4.4 허용 노출
사용자 자금을 보관하는 컨트랙트는 외부 주소에 USDT0 허용을 부여해서는 안 됩니다.
허용이 불가피한 경우, 컨트랙트는 다음을 수행해야 합니다.
- 정확한 금액만 승인
- 사용 직후 허용 재설정
- 잔여 유출 위험을 알려진 제한 사항으로 처리
5. 주소 상태 가정
5.1 EXTCODEHASH
컨트랙트는 주소가 사용된 적이 없다고 추론하기 위해 EXTCODEHASH(addr) == 0x0에 의존해서는 안 됩니다.
주소 사용에 대한 모든 개념은 컨트랙트 상태 내에서 명시적으로 추적되어야 합니다.
예시:
mapping(address => bool) public used;6. 제로 주소 처리
Stable에서:
address(0)으로의 기본 USDT0 전송은 되돌려집니다.address(0)으로의 ERC20 USDT0 전송도 되돌려집니다.
제로 주소로 전송하여 USDT0을 소각하는 지원되는 메커니즘은 없습니다.
컨트랙트는 다음을 수행해야 합니다.
address(0)을 수신자로 명시적으로 거부- 제로 주소 소각을 가정하는 모든 로직 재설계
- 돌이킬 수 없는 손실 의미가 필요한 경우 명시적 싱크 컨트랙트 사용
7. 테스트 요구 사항
Stable 배포를 위한 테스트 스위트는 다음을 포함해야 합니다.
- 허용 기반 소진 시나리오 (
approve+transferFrom) - 실제 기본 잔액을 사용한 지불 능력 시행
EXTCODEHASH에 의존하지 않는 주소 사용 로직- 제로 주소 전송에 대한 명시적 실패 사례
8. 마이그레이션 체크리스트
이더리움에서 Stable로 컨트랙트를 포팅할 때:
- 내부 기본 잔액 미러 제거
- 모든 지불 능력 확인을
address(this).balance로 대체 address(0)으로의 모든 기본 또는 ERC20 전송 제거- 모든 USDT0 승인 감사
- 허용 및 허용 기반 흐름을 다루는 테스트 추가
9. 요약
USDT0을 가스 토큰으로 사용하는 Stable은 예측 가능한 수수료와 통합된 가치 회계를 제공하는 동시에 기본 잔액 동작에 대한 핵심 가정을 변경합니다.
Stable에서 올바른 컨트랙트 설계는 다음을 요구합니다.
- USDT0을 이중 역할 자산으로 처리
- 실제 잔액에 대한 지불 능력 시행
- 허용 기반 유출 경로 방지
- 이더리움 특정 잔액 및 주소 가정에 대한 의존성 제거
FAQ
통합에서 래핑된 기본 토큰으로 어떤 토큰을 처리해야 합니까?
업그레이드 후 USDT0은 기본 토큰이자 ERC-20 토큰이 됩니다. USDT0을 직접 사용하십시오. 더 이상 래핑하거나 언래핑할 필요가 없습니다.
원래 USDT0 컨트랙트 주소는 어떻게 됩니까?
아무것도 변하지 않습니다. 0x779Ded0c9e1022225f8E0630b35a9b54bE713736은 유효하며 계속해서 USDT0을 나타냅니다.
기본 토큰을 식별하는 주소는 무엇입니까?
기본 토큰 식별자는 0x0000000000000000000000000000000000001000이 아닌 0x779Ded0c9e1022225f8E0630b35a9b54bE713736입니다.
통합은 이전 gUSDT 주소를 유지해야 합니까?
아니요. 0x0000000000000000000000000000000000001000을 제거할 수 있습니다. 업그레이드 후에는 사용되지 않습니다.
DEX calldata는 어떤 기본 토큰 식별자를 사용해야 합니까?
DEX calldata는 기본 토큰 식별자로 0x779Ded0c9e1022225f8E0630b35a9b54bE713736을 사용해야 합니다.
다음 권장 사항
- 첫 번째 USDT0 전송하기: 표준 EVM 도구를 사용하여 테스트넷에서 USDT0 전송을 제출하세요.
- 가스 가격 책정: Stable의 단일 구성 요소 수수료 모델에 따라 트랜잭션을 구축하세요.
- Stable의 USDT0 동작: 이중 역할 자산 의미, 잔액 조정 및
EXTCODEHASH동작에 대해 컨트랙트를 감사하세요.

