연산량이 큰 함수 실행이 가능한가요?

스마트 컨트렉트 작성 중 확장되는 데이터를 활용하여 2중 루프를 써야되는 경우가 생겨서 질문드립니다

클레이튼 Docs 내용 중 '실행 비용 한도는 100,000,000으로 설정되어 있습니다’라는 의미는 함수 실행에 필요한 가스 비용을 말하는 것인가요?
테스트 넷에서는 가스비용이 1억이 넘는 함수가 실행되었습니다

연산 비용 시물레이션 opcode 계산 시 반복횟수도 포함되나요?

함수 연산 시간이 1초를 넘기면 revert가 되나요?

안녕하세요,

클레이튼의 경우 블록 생성 시간이 1초로 비교적 짧은 시간 내에 블록 생성이 이루어져야 합니다. 따라서, 트랜잭션의 실행 시간을 제한하는 것이 중요하여 vm의 opcode 별로 computation cost(연산 비용)이란 개념을 만들었습니다. 클레이튼의 트랜잭션이 실행되며 각 opcode의 computation cost가 더해져 총 computation cost가 계산되는데, 만약 네트워크 상에 설정된 computation cost limit(연산 비용 한도)를 넘게 되면, 그 트랜잭션은 revert됩니다. (https://ko.docs.klaytn.com/bapp/json-rpc/transaction-error-codes 의 0x0a 에러 코드를 참조하시면 됩니다.) 참고로 연산 비용은 가스와는 별개로 동작된다고 보시면 됩니다.

질문1. 클레이튼 Docs 내용 중 '실행 비용 한도는 100,000,000으로 설정되어 있습니다’라는 의미는 함수 실행에 필요한 가스 비용을 말하는 것인가요?
답변: 트랜잭션의 실행 비용의 한도가 1억이라는 의미입니다. 즉, 트랜잭션의 총 실행 비용이 1억을 넘기면 revert된다고 보시면 됩니다.

질문2. 연산 비용 시물레이션 opcode 계산 시 반복횟수도 포함되나요?
답변: gas를 생각하시면 쉬운데, 반복된 횟수만큼 더해집니다.

질문3. 함수 연산 시간이 1초를 넘기면 revert가 되나요?
답변: 네트워크 설정값이 1억이 되어 있으면, 트랜잭션의 총 연산 비용의 합이 1억이 되는 순간 revert 됩니다. 연산 비용은 정확하게 초로 환산되기는 어려워 1초라고 답변드리기는 어려울 것 같습니다.

1개의 좋아요

답변 감사합니다 혹시 연산비용을 테스트하기 위해서는 어떻방법을 써야될까요? 직접 표를보고 계산해야되나요?

다음 문서와 같이 klay.estimateComputationCost api를 호출하면, 예상하는 연산비용을 계산할 수 있습니다 :slight_smile: