Don't think! Just do it!

종합 IT 기술 정체성 카오스 블로그! 이... 이곳은 어디지?

Smart contract 14

이더리움 스마트 컨트랙트 공부 순서

이더리움 네트워크는 거대한 세계 컴퓨터라고 보시면 됩니다. 단순히 비트코인처럼 거래 정보만 블록체인에 올라가는 것이 아니고 계약 정보나 고유 ID 같은 데이터도 블록체인에 올릴수도 있습니다. 특정 기능 수행을 위한 연산도 가능하구요 이더리움 기반 토큰도 발행할 수 있어요. 이는 이더리움이 지원하는 스마트 컨트렉트라는 기능 덕분인데요. 이 기술을 이용하여 수많은 Dapp이 만들어지고 있고 이더리움 기반 토큰, NFT 등이 구현될 수 있었죠. 스마트 컨트렉트는 Solidity나 Vyper와 같은 언어를 이용하여 만든 코드를 이더리움 네트워크에 업로드하여 수행할 수 있습니다. 관련 책을 한권 사서 스마트 컨트렉트를 작성하는 법, 로컬망에서 테스트하고 실제 메인넷에 업로드하는 등의 전체 과정을 주욱 따라해보는 ..

Smart contract 2022.02.28

Ethernaut 문제풀이 #13 - Gatekeeper One

13번 문제 Gatekeeper One 입니다. 이 문제는 13번, 14번에 one, twe 두 개로 구성되어 있네요. 두 레벨이 비슷한 성격인가 봅니다. Gatekeeper를 지나야 이 레벨을 통과할 수 있다고 합니다. 힌트로는 Telephone과 Token level에서 배운 것을 명심하라고 되어 있네요. 그리고 또 solidity 문서에서 gasleft()라는 특별한 함수를 배울 수 있다고 합니다. 2022.02.28 - [Smart contract/Ethernaut 문제풀이] - Ethernaut 문제풀이 #4 - Telephone Ethernaut 문제풀이 #4 - Telephone 레벨 4 Telephone입니다. 이번 문제도 Ownership을 탈취하는 문제고 역시 Beyond the con..

Ethernaut 문제풀이 #12 - Privacy

벌써 12번 문제입니다. 총 23개 문제니까 절반을 넘겼네요. 다른 길은 없습니다. ㅋㅋ 자 갑시다. 이 컨트랙트의 제작자는 저장소를 보호하는데 꽤나 신중했다고 하네요. 이 컨트랙트를 unlock하면 이길 수 있다고 합니다. 힌트로는 어떻게 storage가 작동하는지, 어떻게 parameter parsing 이 작동하는지 또 어떻게 casting이 작동하는지 이해하는 것이라 합니다. 팁을 하나 더 주네요. 난이도 8/10 짜리 문제라서 서비스가 좋군요. 메타마스크는 단지 상품이라는 것을 명심하고 메타마스크에 문제가 있느면 다른 툴을 사용하라고 합니다. 고급 난이도의 게임플레이는 Remix나 web3 provider를 사용한다고 합니다.....이미 그러고 있잖아... ㅅㅍ.. 코드를 봅시다~!!! cont..

Ethernaut 문제풀이 #11 - Elevator

11번 문제입니다. 이 엘레베이터는 당신이 빌딩의 꼭대기까지 올라가는 것을 허락하지 않는다는군요. 힌트로 두 문장을 주는데요. 가끔씩 솔리디티는 약속들을 지키기에는 좋지 못하다. 이 엘레베이터는 빌딩에서 사용될 것으로 예상된다. 무슨 소리일까요? 저도 잘 모르겠습니다. 코드부터 보시죠. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; interface Building { function isLastFloor(uint) external returns (bool);//빌딩 컨트렉트의 인터페이스 } contract Elevator {//엘레베이터 컨트렉트 bool public top; uint public floor; function goTo(uint _fl..

Ethernaut 문제풀이 #10 - Re-entrancy

10번 문제 re-entrancy입니다. Solidity 문서의 보안 측면 고려사항 페이지에서 거의 처음 부분에 나오는 거라 언제 이게 문제로 나오나 했는데 이제 나오네요. 그래도 힌트를 좀 보면 기존에 많은 문제풀이 처럼 다른 컨트랙트를 사용해 이 레벨을 클리어 해야 하겠네요. fallback은 거의 항상 이용되는 것 같은데 이 정도면 fallback을 없애야 하는거 아닌가 싶어요 ㅎㅎ 그리고 Throw/revert bubbling 이라는 힌트가 있는데 revert는 레벨9 King에서도 활용했었습니다. 자 하던대로 코드를 살펴보시죠. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import '@openzeppelin/contracts/math/S..

Ethernaut 문제풀이 #9 - King

Ethernaut 9번째 문제 King! 왕입니다. 이번 문제는 영어가 어렵네요. 이번 컨트랙트는 간단한 게임입니다. 왕이 되려면 기존의 상금보다 많은 돈을 입금해야 합니다. 그러면 그 돈은 기존 왕에게 보내지고 새로운 왕이 선출됩니다. 인스턴스를 제출할 때 이 레벨은 왕 권한을 다시 돌려받습니다. 오너라서 그런가? 암튼 self proclamation을 막으면 이 레벨을 이길 수 있다고 하..는군요.. 무슨 소리야!! 문제 이해를 못하겠네 큰일입니다. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract King { address payable king; //왕 uint public prize; //상 address payable publi..

Ethernaut 문제풀이 #7 - Force

7번 Ethernaut 문제 Force입니다. 목표는 컨트랙트의 돈을 0보다 크게 만드는 것입니다. ㅎㅎ 이상한 문제군요. 힌트로 제시된 것은 역시 fallback 함수이고 컨트랙트를 공격하는 가장 좋은 방법은 다른 컨트랙트라고 하네요. Beyond the console의 내용도 마찬가지입니다. 이번에도 Remix를 사용하여 문제를 풀어야 하나 봅니다. 코드를 봅시다. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Force {/* MEOW ? /\_/\ / ____/ o o \ /~____ =ø= / (______)__m_m) */} ㅋㅋㅋㅋㅋ 뭐야 이게 ㅋㅋㅋ 아무것도 없습니다. 다른 컨트랙트로 fallback을 일으켜보면 뭔가 알..

Ethernaut 문제풀이 #6 - Delegation

6번째 문제 Delegation(위임)입니다. 역시 ownership을 탈취가 이번 레벨 클리어 조건입니다. 힌트를 살펴 봅시다. 먼저 Delegation call에 관한 문제라고 친절하게 알려주네요. solidity 문서의 delegatecall을 살펴보라고 합니다. Fallback과 Method ids도 도움이 된다고 하는데 method ids는 가 뭐였지? 생각이 안나네요. 공부하다보면 다시 생각 나겠죠 ㅎㅎ 자 인스턴스 생성하시고 코드를 한번 살펴 봅시다. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Delegate { //Delegate 컨트렉트 정의 address public owner; constructor(address..

Ethernaut 문제풀이 #5 - Token

5번째 문제 Token입니다. 목표는 컨트렉트의 토큰을 해킹하는 것이구요. 20개의 토큰을 가지고 시작하는데요 20개보다 더 많은(매우 많이) 토큰을 확보하면 된다고 합니다. 힌트로는 "odometer가 뭔가요?" 음.... 주행계? 모르겠네요. 코드부터 봅시다. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Token { mapping(address => uint) balances;//balances 변수 uint public totalSupply;//총 공급 변수 constructor(uint _initialSupply) public { balances[msg.sender] = totalSupply = _initialSupply; ..

Ethernaut 문제풀이 #4 - Telephone

레벨 4 Telephone입니다. 이번 문제도 Ownership을 탈취하는 문제고 역시 Beyond the console을 참고하라는, 즉 다른 컨트랙트를 통해 이 컨트랙트를 공격하라고 합니다. 자 해 봅시다. 똑같이 인스턴스를 생성하시고 나서 코드를 분석해 보겠습니다. 이번에는 코드가 짧네요. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Telephone { address public owner; constructor() public {//오너 설정 owner = msg.sender; } function changeOwner(address _owner) public { if (tx.origin != msg.sender) {//tx...

반응형