본문 바로가기
블록체인

이더리움 스마트 컨트랙트의 실행 비용

by 제이제이_은재 2022. 7. 11.
728x90

 

💡스마트 컨트랙트의 실행 비용

 

이더리움에서 가장 중요한 개념 중 하나는 트랜잭션 실행 수수료이다. 이더리움에서 트랜잭션의 결과로 발생하는 모든 연산은 수수료를 요구하며, 이 수수료를 가스라고 한다. 가스는 트랜잭션 코드에 있는 모든 Opcode를 실행하는데 필요한 수수료를 측정하는 데 사용하는 단위이다. Gas Price 는 가스 당 지불하려고 하는 이더의 양을 의미하며, Gwei 라는 단위를 사용한다.

 

1 이더 = 10^18 wei, 1 Gwei = 10^9 wei

 

트랜잭션 송신자는 Gas Limit과 Gas Price 를 트랜잭션에 지정한다. 이 Gas Price와 Gas Limit은 송신자가 트랜잭션을 실행하는데 지불하고자 하는 Wei 의 최대 양을 의미한다. 예를 들어, 송신자가 Gas Limit을 50,000으로 지정하고, Gas Price를 20 Gwei로 지정했다고 가정해보자. 이것은 송신자가 최대 50,000 x 20 Gwei = 10^15 Wei = 0.001 이더 를 트랜잭션을 실행하는 데 지불한다는 것을 의미한다.

 

 

Gas Limit은 송신자가 지불하고자 하는 가스의 최댓값을 의미한다. 만약, CA에 이 최대치를 지불하고도 남을 충분한 이더가 들어있다면 트랜잭션은 문제없이 실행도리 것이다. 송신자는 트랜잭션이 완료된 후, 사용되지 않은 가스를 기존 비율로 환불 받는다.

Gas Limit - Use Gas(50) - Use Gas(30) = Remaining Gas

반대로 송신자가 트랜잭션을 실행할만한 충분한 가스를 제공하지 않은 경우, 트랜잭션은 OOG 상태가 되며, 실행이 중지된다. 상태가 변경되었다면, 트랜잭션이 실행되기 이전의 상태로 돌아간다. 또한, 실패한 트랜잭션에 대한 기록이 남으며, 이 기록에서 어떤 트랜잭션이 시도되었고 어디에서 실패했는지 남게 된다. 그리고 EVM은 트랜잭션 실행이 중지되기 전까지 연산을 수행했기 때문에, 연산에 사용된 가스는 환불되지 않는다.

 

 

이 가스는 채굴자의 주소로 송금된다. 채굴자는 연산을 수행하고 트랜잭션을 검증하는 데에 자원을 소모하기 때문에 이에 대한 보상으로 가스 수수료를 받는다. 

 

 

일반적으로, 송신자가 지불하고자 하는 가스 가격이 높을수록, 또는 실제 연산에 소요되는 가스의 양이 높을수록, 채굴자는 트랜잭션에서 수수료를 더 많이 받을 수 있다. 따라서 채굴자들은 수수료를 많이 받을 수 있는 트랜잭션을 선택하려 한다. 채굴자들은 트랜잭션 송신자가 Gas Price를 어느 정도로 설정해야 할 지 알려주기 위해 트랜잭션을 실행하거나 검증하는데 드는 Gas Price의 최솟값을 광고하기도 한다.

 

 

✓ 스토리지 수수료

 

연산을 할 때 뿐만 아니라, 스토리지를 사용할 때도 수수료를 내야 한다. 스토리지의 최종 수수료는 32 바이트 단위에 비례한다. 스토리지 수수료는 일반적인 수수료와는 다르게 약간 특이한 부분이 있다. 가령, 스토리지가 증가하면 모든 노드에서 이더리움 상태 데이터베이스의 크기가 커지기 때문에 저장되는 데이터의 양을 최대한 적게 유지할수록 인센티브를 부여한다. 이러한 이유 때문에 만약 트랜잭션이 스토리지에 있는 특정 요소를 지우는 연산을 수행하면, 해당 연산을 수행하는 데에 대한 수수료는 면제하고, 저장 공간을 확보했기 때문에 기존에 요소를 스토리지에 추가했을 때 지불했던 가스를 환불 받는다.

 

예를 들어, 스토리지에 요소 하나를 할당해했을 때 100 Gas를 지불해야 한다고 가정해보자. 트랜잭션에서 스토리지에 요소 하나를 할당하여 100 Gas를 지불했다. 이후 해당 요소를 다시 스토리제에서 제거하는 연산을 수행할 때는, 제거 연산에 대한 수수료는 0 Gas 이며, 더 이상 스토리지 자리를 차리하지 않기 때문에 할당 할 때 지불했던 100 Gas를 환불해준다.

 

 

✓ 수수료를 지불하는 이유

 

이더리움은 비트코인과는 달리, 스마트 컨트랙트에서 수행되는 모든 연산에 대해 가스라는 수수료를 부과한다. 이렇게 수수료를 부과하는 이유는 이더리움 네트워크 위에서 동작하는 스마트 컨트랙트 작업들이 전체 노드에 영향을 미치기 때문이다. 이더리움은 튜링 완전 언어이기 때문에, 튜링 불완전한 비트코인 스크립트와는 달리 반복문을 지원한다. 그러나 반복문의 가장 큰 단점은 무한 루프문제가 일어날 수 있다는 것이다. 만약 악의적인 사용자가 큰 자원을 소모하는 무한 루프 코드가 들어있는 트랜잭션을 실행시킨다면, 트랜잭션은 이더리움 네트워크의 엄청난 양의 자원을 소모하게 될 것이고, 심각하게는 이더리움 네트워크 전체가 멈출 수도 있다. 수수료는 이러한 악의적인 공격으로부터 네트워크를 보호한다. 각 연산마다 수수료를 부과하면 악의적인 사용자라도 수수료를 지불해야 하기 때문에 쉽게 무한 루프 코드를 실행시킬 수 없다. 또한 의도치 않게 무한 루프를 만든 코드를 실행시키더라도 Gas Limi을 설정해두면 지정해둔 가스를 다 소모하기 전에 실행을 멈출 수 있다.

'블록체인' 카테고리의 다른 글

이중지불 문제  (0) 2022.08.04
솔리디티(Solidity)란?  (0) 2022.07.07
EVM (Ethereum Virtual Machine)  (0) 2022.07.07
이더리움에서의 스마트 컨트랙트란?  (0) 2022.07.07

댓글