Opcode 연산 비용에 대해서

opcode 표를 보니
memory 변수를 읽을 떄는 376, storage 변수를 읽을 떄는 835이던데
만약 storage 배열값을 반복해서 비교 계산해야 될 때
memory에 storage배열값을 따로 저장하고 저장한 메모리의 배열값을 반복해서 읽어와 계산하는게 저렴한거겠죠?

address[] users;

function test() public{
  for(uint256 i = 0; i < .users.length; i = i + 1){
    if(users2[i] == msg.sender) {
      return;
    }
  }
}


function test2() public{
  address[] users2 = users;
  for(uint256 i = 0; i < .users2.length; i = i + 1){
    if(users2[i] == msg.sender) {
      return;
    }
  }
}

test2 함수가 더 연산 비용이 적게 드나요?

caver.rpc.klay.estimateGas()로 측정된 Gas값을 확인해보시면 궁금증이 풀리실 것 같습니다.

감사합니다.

1 Like

memory에 storage배열값을 따로 저장하는 과정에서 solidity가 어떻게 내부적으로 storage값을 읽거나 복사해오는지에 따라 결과가 달라질 수 있으므로, 확답을 드리긴 어렵습니다. 직접 측정하시고 판단하시기 바랍니다.

1 Like