언어/Solidity

작성 계기 Web3를 통한 프로젝트의 경우 truffle / hardhat 등의 Smart Contract을 위한 대중성있는 블록체인 프레임워크가 존재한다. Java에서도 Web3j 모듈에서 다양하게 지원하긴 하지만, Web3 프로젝트에 비해 그 과정이 상당히 복잡하고 러닝커브가 높다. Web3에 비해 커뮤니티 풀이 생각 외로 적고, 프로젝트 전체 플로우에 대해 참조할만한 블로그도 없어서 직접 작성하게 됐다. 사용 스택 Spring Boot 2.7 & Gradle 7.0 JDK 11 Solidity 0.8.19 위 기술 스택으로 사용한 이유 Gradle 8.0 이상의 프로젝트 (JDK 17 / Spring Boot 3.0)에서는 아직 지원이 안 되는듯하여 이슈로 올라와있다. Solidity 0.8.20 ..
Solidity를 사용하면서 겪었던 스토리지 충돌 관련 이슈 정리 Proxy - delegateCall()호출 시, 스토리지 충돌 문제 컨트랙의 변경을 위해(Smart Contract는 원칙상 변경이 불가하다) Proxy를 만들 수 있는 방법을 찾다가 delegateCall() 발견 데이터 로직을 담당하는 컨트랙(A)에서 데이터 저장소를 담당하는 컨트랙(B)에 접근할 때 delegateCall() 사용 이슈 발생 delegateCall()은 현재 컨트랙의 컨텍스트에서 사용하고자 하는 컨트랙의 함수에 접근하여 사용 가능 (msg.sender가 동일하기 때문에 프록시로 사용하기 유용하다) 문제는 Solidity에서 Storage 변수를 다룰 때, Slot이라는 저장소에 변수를 선언 된 순서대로 저장하게 되는..
Gas Cost를 왜 책정해야할까? Gas 비용이 없다면, 공격자의 Ddos 공격에 취약해진다. 따라서 컨트랙트 함수를 호출할 때마다 비용을 지불하는 방식으로 공격자에게 부담을 지워지게 하는 용도가 가장 큰듯하다. Gast Cost는 어떻게 책정되는가? 1 Ether = 10^9 Gwei = 10^18 wei Gas 비용은 개발자가 어떻게 컨트랙트를 작성하냐에 따라 상대적으로 많아질수도, 적어질수도 있다. Gas 책정 방식은 EVM opcode 참고 https://github.com/wolflo/evm-opcodes/blob/main/gas.md#a5-balance-extcodesize-extcodehash Smart Contract를 구현할 때의 유의점 EVM opcode를 하나하나 찾아보고 컨트랙의 ..
iron_jin
'언어/Solidity' 카테고리의 글 목록