자주나오는패턴
[Common Vulnerabilities] DoS With Block Gas Limit
0xperiagoge
2024. 1. 3. 23:36
스마트 계약이 배포되거나 그 안의 기능들이 호출될 때, 이러한 작업들의 실행은 항상 필요한 계산량에 따라 일정량의 가스를 필요로 한다. 이더리움 네트워크는 블록 가스 한도를 지정하고 블록에 포함된 모든 거래의 합은 이 한도를 초과할 수 없다.
시간이 지남에 따라 커지는 큰 배열이 있을 것으로 예상된다면 주의가 필요하다. 전체 데이터 구조를 통해 루핑하는 작업은 피해야 한다.
크기가 불확실한 배열을 반드시 사용해야 하는 경우에는, 이 작업이 여러 블록에 걸쳐 이루어질 수 있으며, 따라서 여러 거래가 필요할 수 있다.
function ifillArray() public returns (bool){
if(listAddresses.length<1500) {
for(uint i=0;i<10000;i++) {
listAddresses.push(msg.sender);
}
return true;
} else {
listAddresses = new address[](0);
return false;
}
}
10,000개를 한 번에 배열에 넣으려고 했을 때
같은 코드에서 2000개로 했을 때는 성공은 하지만 gas를 많이 사용한다.
[ 참고 및 추가자료 ]
https://swcregistry.io/docs/SWC-128/