본문 바로가기

솔리디티7

[블록체인 보안] 스마트컨트랙트 취약성 (예측가능한 무작위성 취약점) 블록 해시, 블록 번호, 블록 타임스탬프 및 기타 필드와 같은 전역변수의 사용은 안전하지 않으며, 마이너와 공격자가 이를 제어할 수 있음 시나리오 GuessTheRandomNumber는 블록해시와 타임스탬프에서 생성된 유사한 무작위 숫자를 맞춘다면 1 이더를 얻을 수 있는 게임 처음에는 올바른 숫자를 맞추는 것은 불가능한 것처럼 보임 엘리스가 1 이더와 함께 GuessTheRandomNumber를 배포함 이브가 Attack을 배포함 이브가 Attack.attack()를 호출하고 1 이더를 획득함 개선방안 blockhash와 block.timestamp를 무작위성의 소스로 사용하지 말것 테스트 소스 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/tes.. 2023. 8. 24.
[블록체인 보안] 스마트컨트랙트 취약성 (DOS) KingOfEther 계약은 사용자가 현재 잔액보다 더 많은 이더를 보내는 것으로 왕위를 요구할 수 있는 게임을 운영 새로운 사용자가 더 많은 이더를 보낼 때, 계약은 이전 “왕”에게 이전 잔액을 반환하려고 시도함 그러나 이 매커니즘은 악용될 수 있음 공격자의 계약은 왕이 되어서 후속 fallback 함수를 실패시키거나 정해진 가스 한도보다 더 많은 가스를 소비하여 KingOfEther 계약이 이전 왕에게 이더를 반환하려고 할때 claimThrone 함수를 실패하게 만들 수 있음 개선방법 Pull 지불 패턴 사용, 사용자가 이더를 받는 대신 인출할 수 있도록 하는 것! 소스파일 https://github.com/SunWeb3Sec/DeFiVulnLabs/blob/main/src/test/DOS.sol 코.. 2023. 8. 24.
[솔리디티] 5. 배열, 열거형(enum), 구조체 (calldata, memory) [NEW] 누구나 쉽게 따라하는 솔리디티 강의(솔리디티 버전 0.8.13) 1. Helloworld, 카운터컨트랙트, 데이터타입 2. 변수, 상수, 불변, 상태변수 읽고 쓰기 3. 이더 단위, 가스와 가스가격 4. 조건문, 반복문, 맵핑(mapping) 5. 배열, 열거형(enum), 구조체(calldata,memory) 6. 데이터 저장공간, 함수(view,pure 속성) 7. 에러(error), 함수수정자(modifier) 8. 이벤트(events), 생성자(constructor), 상속 9. 상속, 섀도잉,super키워드 함수 속성들 10. 인터페이스(interface), payable, 이더전송,받기 관련 11. Fallback, Call, Delegate(솔리디티 업그레이드 기법) 12. 함수 .. 2022. 6. 8.
[솔리디티] 2. 변수, 상수, 불변, 상태변수 읽고 쓰기 [NEW] 누구나 쉽게 따라하는 솔리디티 강의(솔리디티 버전 0.8.13) 1. Helloworld, 카운터컨트랙트, 데이터타입 2. 변수, 상수, 불변, 상태변수 읽고 쓰기 3. 이더 단위, 가스와 가스가격 4. 조건문, 반복문, 맵핑(mapping) 5. 배열, 열거형(enum), 구조체(calldata,memory) 6. 데이터 저장공간, 함수(view,pure 속성) 7. 에러(error), 함수수정자(modifier) 8. 이벤트(events), 생성자(constructor), 상속 9. 상속, 섀도잉,super키워드 함수 속성들 10. 인터페이스(interface), payable, 이더전송,받기 관련 11. Fallback, Call, Delegate(솔리디티 업그레이드 기법) 12. 함수 .. 2022. 6. 6.
[솔리디티] 1. Helloworld, 카운터컨트랙트, 데이터타입 [NEW] 누구나 쉽게 따라하는 솔리디티 강의(솔리디티 버전 0.8.13) 1. Helloworld, 카운터컨트랙트, 데이터타입 2. 변수, 상수, 불변, 상태변수 읽고 쓰기 3. 이더 단위, 가스와 가스가격 4. 조건문, 반복문, 맵핑(mapping) 5. 배열, 열거형(enum), 구조체(calldata,memory) 6. 데이터 저장공간, 함수(view,pure 속성) 7. 에러(error), 함수수정자(modifier) 8. 이벤트(events), 생성자(constructor), 상속 9. 상속, 섀도잉,super키워드 함수 속성들 10. 인터페이스(interface), payable, 이더전송,받기 관련 11. Fallback, Call, Delegate(솔리디티 업그레이드 기법) 12. 함수 .. 2022. 5. 27.
블록체인 인 액션 서평 작년부터 블록체인에 대한 기본적인 개념 그리고 활용을 위해서 솔리디티를 기본으로 하는 dapp 프로그래밍등에 대한 강의를 진행하고 있다. 사실 적합한 교제를 가지고 강의를 하는게 가장 좋은데 지금까지는 그러한 교제가 없었다. 기본적으로 번역이 잘 안되어 있는 책들도 많고 책들에 있는 예제들은 실행이 잘안되거나(솔리디티 버전이 빠르게 변하고 환경도 빠르게 변하기 때문에..) 설명이 부족한 것들이 대부분이었다. 그래서 결국엔 외국 유튜버나 해외 사이트에서 잘 정리된 자료들을 찾아서 다시금 강의안을 새롭게 만드는 방법밖에는 없었다. 강의안을 만드는 것도 쉽지 않지만 조금 더 상세한 설명이 깃들여져 있는 좋은 교제로 강의를 하면 좋겠다는 생각은 항상 들었다. 그런데 그러한 교제를 찾지 못해서 현 수준에서 만족하.. 2021. 8. 10.
15. 솔리디티 컨트랙트 Web3.js 활용하여 웹으로 보여주기 1. 스마트 계약의 시작, 리믹스 도구 사용해보기 2. 솔리디티 개발환경 구성 3. 스마트컨트랙트 작성 후 배포하기 4. openzeppelin 사용하여 ERC20 토큰 만들기 5. Ropsten 테스트넷에 ERC20토큰 배포하기 6. web3.js 와 자바스크립트를 활용한 간단한 예제 7. 솔리디티 기초, 리믹스로 컨트랙트 작성하기 8. 솔리디티 기본문법 (변수, 데이터타입, 구조체) 9. 솔리디티 배열, 맵핑 10. 솔리디티 조건문, 반복문(if, else, for) 11. 솔리디티 암호화폐 지불(호텔룸 예약하기 프로그램) 12. 솔리디티 상속 13. 리믹스 솔리디티 6.0 버전 ERC20토큰 만들기 14. web3.js 와 자바스크립트를 활용하여 (이더잔액조회) 지갑 만들기 15. 솔리디티 컨트랙트.. 2020. 11. 17.