트랜잭션 비용 (구 버전 문서)
현재 Klaytn 가상머신(KLVM)의 트랜잭 션 수수료는 다음과 같이 계산됩니다.
트랜잭션 수수료 : = (총 가스 사용량) x (가스 단가)
총 가스 사용량
은 opcode의 가스 비용과 intrinsic gas cost을 기준으로 KLVM이 계산합니다.unit price
는 Klaytn에서 정한 가스 가격입니다.
이 계산된 트랜잭션 수수료는 트랜잭션에 따라 발신자 또는 기업 계좌 잔액에서 차감됩니다.
블록체인 상태를 변경하는 모든 행동에는 가스가 필요합니다. 노드가 KLAY 전송, ERC-20 토큰 사용 또는 컨트랙트 실행과 같은 사용자의 트랜잭션을 처리할 때 사용자는 연산 및 스토리지 사용 비용을 지불해야 합니다. 지불 금액은 필요한
가스
양으로 정합니다.가스
는 사용자의 트랜잭션을 처리하는 데 어느 정도의 연산이 필요한지를 나타내는 측정 단위입니다.단가
는 가스당 가격입니다. 단가 (가스 가격
\라고도 함)는 거버넌스에 의해 시스템에 설정되어 있습니다. It is currently set to 250 ston (i.e., 250 x 10^9 peb) per gas and cannot be changed by user. 현재의 단가 정보는 klay.gasPrice
API를 호출하여 얻을 수 있습니다.이더리움에서 사용자는 각 트랜잭션에 대한 가스 가격을 설정하고, 채굴자들은 보상을 극대화하기 위해 특정 트랜잭션을 그들의 블록에 포함시킬 수 있습니다. 이는 한정된 자원을 얻기 위한 경매와 같습니다. 이 접근 방식은 시장을 기반으로 하므로 효과가 있습니다. 하지만, 트랜잭션 수수료의 변동이 심하고 실행을 보장할 수 없을 정도로 수수료가 너무 비싸지는 경우가 잦습니다.
이 문제를 해결하기 위해 Klaytn은 고정된 단가를 사용하고 있으며 가격은 governance council에서 조정할 수 있습니다. 이 정책은 모든 트랜잭션이 동일하게 처리되고 실행되도록 보장합니다. 따라서, 사용자는 적절한 단가를 결정하기 위해 애쓸 필요가 없습니다.
Klaytn은 유저가 Klaytn의 단가와 같도록 설정한 가스비를 포함한 트랜잭션만 받습니다. Klaytn의 단가와 다른 가스 가격의 트랜잭션은 거부됩니다.
트랜잭션의 가스 가격이 Klaytn의 단가(Unit price)와 같지 않을 때, 에러 메시지인
invalid unit price
가 반환됩니다.Klaytn은 현재 단가를 이용하는 트랜잭션을 교체할 수 없습니다. 하지만 향후 트랜잭션 교체를 위한 방법이 지원될 것입니다. 이더리움에서는 주어진 논스를 가진 트랜잭션이 더 높은 가스 가격으로 설정된 트랜잭션에 의해 교체될 수 있습니다.
기본적으로 Klaytn은 이더리움과 호환성을 유지합니다. 그래서 Klaytn의 가스표는 이더리움과 매우 유사합니다. 하지만 Klaytn의 고유한 기능이 있기 때문에, 그런 기능들을 위한 다른 수치들이 있습니다.
항목 | 가스 | 설명 |
---|---|---|
G_zero | 0 | Set Wzero 연산을 위해 지불할 금액은 없음 |
G_base | 2 | Set Wbase 연산을 위해 지불하는 가스량 |
G_verylow | 3 | Set Wverylow 연산을 위해 지불하는 가스량 |
G_low | 5 | Set Wlow 연산을 위해 지불하는 가스량 |
G_mid | 8 | Set Wmid 연산을 위해 지불하는 가스량 |
G_high | 10 | Set Whigh 연산을 위해 지불하는 가스량 |
G_blockhash | 20 | BLOCKHASH 연산을 위해 지불하는 가스량 |
G_extcode | 700 | Set Wextcode 연산을 위해 지불하는 가스량 |
G_balance | 400 | BALANCE 연산을 위해 지불하는 가스량 |
G_sload | 200 | SLOAD 연산을 위해 지불되는 가스량 |
G_jumpdest | 1 | JUMPDEST 연산을 위해 지불되는 가스량 |
G_sset | 20000 | Storage value가 0에서 0이 아니도록 변경된 경우 SSTORE 연산을 위해 지불하는 가스량 |
G_sreset | 5000 | Storage value가 0이 유지되거나 0으로 바뀐 경우 SSTORE 연산을 위해 지불하는 가스량 |
G_sclear | 15000 | 스토리지 값이 0이 아닌 경우에서 0으로 설정된 경우 반환되는 양(반환 카운터가 추가됨) |
R_selfdestruct | 24000 | 계정 self-destructing시 반환되는 양(반환 카운터가 추가됨) |
G_selfdestruct | 5000 | SELFDESTRUCT 연산을 위해 지불하는 가스량 |
G_create | 32000 | CREATE 연산을 위해 지불되는 가스량 |
G_codedeposit | 200 | CREATE 연산이 코드를 상태에 배치하는 데 바이트당 지불하는 가스량 |
G_call | 700 | CALL 연산을 위해 지불되는 가스량 |
G_callvalue | 9000 | CALL 연산의 일부로 0이 아닌 값 전송에 대해 지불되는 가스량 |
G_callstipend | 2300 | 0이 아닌 값 전송을 위해 호출된 컨트랙트에 지불하는 비용으로 Gcallvalue에서 차감된 금액 |
G_newaccount | 25000 | 계정을 생성하는 SELFDESTRUCT나 CALL 연산을 위해 지불하는 가스량 |
G_exp | 10 | EXP 연산에 대한 부분 지불 |
G_expbyte | 50 | EXP 연산에서 dlog256(exponent)e가 곱해질 때 부분 지불하는 가스량 |
G_memory | 3 | 메모리를 확장하는 모든 추가적인 단어를 위해 지불하는 가스량 |
G_txcreate | 32000 | 모든 컨트랙트 생성 트랜잭션을 위해 지불하는 가스량 |
G_transaction | 21000 | 모든 트랜잭션에 대해 지불하는 가스량 |
G_log | 375 | LOG 연산에 대한 부분 지불하는 가스량 |
G_logdata | 8 | LOG 연산 데이터의 각 바이트에 대해 지불하는 가스량 |
G_logtopic | 375 | LOG 연산의 각 topic마다 지불되는 가스량 |
G_sha3 | 30 | SHA3 연산을 위해 지불되는 가스량 |
G_sha3word | 6 | SHA3 연산에 대한 입력 데이터의 각 단어(반올림)에 대해 지불하는 가스량 |
G_copy | 3 | *COPY 연산에 대한 부분 지불량. 복사된 단어에 곱하고, 반올림 됨. |
G_blockhash | 20 | BLOCKHASH 연산을 위해 지불하는 가스량 |
G_extcodehash | 400 | 컨트랙트 코드의 keccak256 해시를 얻기 위해 지불하는 가스량 |
G_create2 | 32000 | CREATE와 똑같이 작동하지만 다른 인수를 사용하는 CREATE2 Opcode를 위해 지불하는 가스량. |
미리 컴파일된 컨트랙트는 일반적으로 복잡한 암호화 연산을 수행하며, 다른 컨트랙트에 의해 실행되는 특수한 유형의 컨트랙트입니다.
항목 | 가스 | 설명 |
---|---|---|
EcrecoverGas | 3000 | ECRecover 연산 수행 |
Sha256BaseGas | 60 | sha256 hash 연산 수행 |
Sha256PerWordGas | 12 | |
Ripemd160BaseGas | 600 | Ripemd160 연산 수행 |
Ripemd160PerWordGas | 120 | |
IdentityBaseGas | 15 | |
IdentityPerWordGas | 3 | |
ModExpQuadCoeffDiv | 20 | |
Bn256AddGas | 500 | Bn256 elliptic curve 연산 수행 |
Bn256ScalarMulGas | 40000 | |
Bn256PairingBaseGas | 100000 | |
Bn256PairingPerPointGas | 80000 | |
VMLogBaseGas | 100 | 노드의 로그 파일에 로그 쓰기 - Klaytn 전용 |
VMLogPerByteGas | 20 | Klaytn 전용 |
FeePayerGas | 300 | feePayer의 주소 획득 - Klaytn 전용 |
ValidateSenderGas | 5000 per signature | 발신자의 주소와 서명 검증 - Klaytn 전용 |
XXXBaseGas와 XXXPerWordGas (e.g. Sha256BaseGas, Sha256PerWordGas)등을 포함한 항목들의 총 가스량은 다음과 같이 계산됩니다.
TotalGas = XXXBaseGas + (number of words * XXXPerWordGas)
ValidateSenderGas는 서명마다 지불해야 합니다.
TotalGas = number of signatures * ValidateSenderGas
항목 | 가스 | 설명 |
---|---|---|
TxAccountCreationGasPerKey | 20000 | 키 페어 생성에 필요한 가스 |
TxValidationGasPerKey | 15000 | 키 검증(validation)에 필요한 가스 |
TxGasAccountUpdate | 21000 | 계정 업데이트에 필요한 가스 |
TxGasFeeDelegated | 10000 | 트랜잭션 수수료 위임에 필요한 가스 |
TxGasFeeDelegatedWithRatio | 15000 | Ratio 트랜잭션 수수료 위임에 필요한 가스 |
TxGasCancel | 21000 | 논스가 같은 트랜잭션을 취소하는 데 필요한 가스 |
TxGasValueTransfer | 21000 | KLAY 전송에 필요한 가스 |
TxGasContractExecution | 21000 | 컨트랙트 실행을 위한 기본 가스 |
TxDataGas | 100 | 트랜잭션의 단일 바이트 당 필요한 가스 |
페이로드 데이터는 아래와 같이 계산 됩니다.
GasPayload = number_of_bytes * TxDataGas
트랜잭션 유형 | 가스 |
---|---|
LegacyTransaction | TxGas + PayloadGas + KeyValidationGas |
ValueTransfer | TxGasValueTransfer + KeyValidationGas |
ValueTransferMemo | TxGasValueTransfer + PayloadGas + KeyValidationGas |
AccountUpdate | TxGasAccountUpdate + KeyCreationGas + KeyValidationGas |
SmartContractDeploy | TxGasContractCreation + PayloadGas + KeyValidationGas |
SmartContractExecution | TxGasContractExecution + PayloadGas + KeyValidationGas |
Cancel | TxGasCancel + KeyValidationGas |
KeyValidationGas는 키 유형에 따라 아래와 같이 정의됩니다.
키 유형 | 가스 |
---|---|
Nil | N/A |
Legacy | 0 |
Fail | 0 |
Public | 0 |
MultiSig | (keys-1) * GasValidationPerKey (15000) |
RoleBased | 검증(validation)에 사용된 역할의 키를 기반으로 함 |
KeyCreationGas는 키 유형에 따라 아래와 같이 정의됩니다.
키 유형 | 가스 |
---|---|
Nil | N/A |
Legacy | 0 |
Fail | 0 |
Public | GasCreationPerKey (20000) |
MultiSig | (keys) * GasCreationPerKey |
RoleBased | 가스 비용은 각 역할의 키를 기반으로 계산됩니다. e.g., GasRoleTransaction = (keys) GasCreationPerKey GasRoleAccountUpdate = (keys) GasCreationPerKey GasRoleFeePayer = (keys) * GasCreationPerKey |
Last modified 9mo ago