전체 글 14

Chapter02- 모듈 시스템

모듈의 필요성 좋은 모듈 시스템은 소프트웨어 엔지니어링의 몇 가지 기본적인 필요성을 마주할 때 도움을 준다. 코드베이스를 나누어 여러 파일로 분할하는 방법을 제시한다. 이것은 코드를 좀 더 구조적으로 관리할 수 있게 해주고 각각으로부터 독립적인 기능의 조각들을 개발 및 테스트하는 데에 도움을 주며 이해하기 쉽게 한다. 다른 프로젝트에 코드를 재사용할 수 있게 해준다. 실제로 모듈은 다른 프로젝트에도 유용하고 일반적인 특성을 구현할 수 있다. 모듈로서 기능을 구조화하는 것이 그 기능들이 필요한 다른 프로젝트로 좀 더 쉽게 이동시킬 수 있다. 은닉성을 제공한다. 일반적으로 복잡한 구현을 숨긴 채 명료한 책임을 가진 간단한 인터페이스만 노출시키는 것이 좋은 방식이다. 대부분의 모듈 시스템은 함수와 클래스 또는..

Nodejs 2021.07.22

7. Force

먼저 임무를 확인한다. 이 컨트랙트는 당신의 돈을 가져가지않는다. 이 레벨의 목표는 0보다 더 높은 잔액을 만드는 것이다. 인스턴스 가져오기를 통해 트랜잭션을 발생시키고 인스턴스 주소를 불러오는 것을 확인한다. 솔리디티의 코드를 확인하면 주석 이외의 코드는 존재하지 않는다. 컨트랙트의 잔액을 확인한다. remix에서 솔리디티 코드를 작성하고 Deploy 버튼을 통해 컨트랙트를 배포한다. 해당 컨트랙트의 주소를 확인하고 deploy 한 후 나오는 함수에 컨트랙트 주소를 넣고 attack 함수를 실행시켜 트랜잭션을 발생시킨다. 이때 ENVIRONMENT는 Web3로 선택하고 자신의 메타마스크 주소가 정확히 들어간지 확인하고 자신의 값을 확인하기위해 1 ether로 설정한다. 여기서 1 wei 등 선택해도 상..

Ethereum/Ethernaut 2021.07.22

Chapter01 - Node.js 플랫폼

경량 코어 Node.js 코어는 몇 가지 원칙들을 기반으로 자신의 기초를 구성하였다. 최소한의 기능 세트를 가지고 코어의 바깥부분에 유저랜드(userland) 혹은 유저스페이스(userspace)라 불리는 사용자 전용 모듈 생태계를 두는 것. 코어를 최소한의 기능 세트로 관리하는 것은 관리의 관점에서 편리할 뿐 아니라 전체 생태계 진화에 있어 긍정적인 문화적 영향을 미칠 수 있다. 경량 모듈 Node.js는 프로그램 코드를 구성하는 기본적인 수단으로서 모듈 개념을 사용한다. 이것은 애플리케이션과 재사용 가능한 라이브러리를 만들기 위한 구성 요소이다. Node.js에서 가장 널리 통용되는 원칙 중 하나는 코드의 양 뿐 아니라 범위의 측면에서도 작은 모듈을 디자인 하는 것이다. Node.js는 패키지 관리자..

Nodejs 2021.07.20

6. Delegation

먼저 임무를 확인한다. 이 레벨의 소유권을 주장하라. 인스턴스 가져오기를 통해 트랜잭션을 발생시키고 인스턴스 주소를 가져온다. 현재 컨트랙트의 오너를 확인한다 pwn 함수는 owner를 바꾸는 기능을 가진다. delegatecall은 다른 컨트랙트의 함수를 호출하는 메소드 다른 컨트랙트의 함수를 사용하여 delegatecall이 쓰여진 내부 data를 수정할 수 있다. msg.data에는 함수의 시그니처를 넣을 수 있다. 시그니처는 sha3 해시 값의 첫 4byte를 의미한다. Delegation 컨트랙트의 fallback 함수를 호출하여 msg.data에 pwn()함수의 시그니처를 넣어서 부른다면 Delegation 의 owner를 변경할 수 있을 것이다. 참고자료 https://www.youtube...

Ethereum/Ethernaut 2021.07.20

5. Token

먼저 임무를 확인한다. 이번 목표는 초기에 20개의 토큰이 주어지는데 추가 토큰을 얻을 수 있으면 된다. 인스턴스 가져오기를 통해 트랜잭션을 발생시키고 인스턴스 주소를 가져온다. 'await contract.balanceOf(player)' player의 현재 토큰 보유량을 확인한다. 생성자, transfer, balanceOf 함수 2개가 존재한다. balanceOf 는 view로 선언되어 있기에 transfer을 이용해야하는 것 같다. etherscan.io 에서 아무 주소나 하나 복사를 한다. 가져온 주소를 넣고, 21개의 토큰을 transfer 시킨다. 21로 적용해도 된다. require 구문에서 부터 막혀야 정상이겠지만 언더 플로가 발생하기 때문에 보유 토큰이 -1 이 아닌 큰 수가 적용되어 ..

Ethereum/Ethernaut 2021.07.20

4.Telephone

가장 먼저 임무를 확인한다. 이 컨트랙트의 소유권을 주장하라. 새 인스턴스 가져오기 버튼을 통해서 메타마스크에서 트랜잭션을 발생시키고 인스턴스 주소가 정상적으로 출력이 되는지 확인한다. 이번 레벨에서 임무가 컨트랙트의 소유권을 주장하는 것이기에 현재 컨트랙트의 오너가 누구인지 확인한다. 소스코드 분석 constructor : 생성자는 컨트랙트의 수명 주기에서 처음 실행될 때 한 번 실행된다. changeOwner : 주소값을 인자로 받으며 public 이다. 계약 외부의 어느 곳에서 이 함수를 실행할 수 있다. tx.origin 이 msg.sender와 같지 않으면 오너를 변경한다. tx.origin (address payable) : sender of the transaction (full call c..

Ethereum/Ethernaut 2021.07.15

3. Coin Flip

시작 할 때에는 문제의 임무를 먼저 확인한다. 이번 단계에서는 초능력을 사용해서 10번의 결과를 추측해야 한다고 한다. 먼저 인스턴스 가져오기 버튼을 통해 메타마스크에 트랜잭션을 발생시키고 인스턴스 주소를 불러온다. 컨트랙스 소스코드를 보면 openzepplin의 SafeMath 라이브러리를 사용한다. 상태변수 3가지 consecutiveWins : 횟수를 저장하는 변수 public 프론트에서 조회 가능하다. lastHash : hash값 FACTOR : 랜덤 값을 만들어 낼 때 사용하는 값. 생성자 컨트랙트 생성시에 consecutiveWins를 0으로 선언한다. flip이라는 함수는 bool 값을 반환한다. solidity 공식 문서에서 blockhash와 block.number 전역변수로 사용 가능..

Ethereum/Ethernaut 2021.07.10

2.Fallout

가장먼저 해야할 임무에 대해 확인을 한다. 계약의 소유권즉 owner가 되면 된다. 인스턴스 가져오기를 통해 트랜잭션을 발생시키고 기다리면 인스턴스 주소를 확인한다. 솔리디티 코드를 http://remix.ethereum.org 에 복사 붙여넣기를 한다. Remix - Ethereum IDE remix.ethereum.org 단 여기에서 현재 솔리디티의 버전은 0.8.6 버전까지 있는데 https://github.com/OpenZeppelin/openzeppelin-contracts 에서 확인해보면 현재경로에는 SafeMath.sol이 존재하지 않는다. 그렇기 때문에 경로를 새로 지정할 필요가 있다. import 'https://github.com/OpenZeppelin/openzeppelin-contr..

Ethereum/Ethernaut 2021.07.09

1. Fallback

인스턴스를 가져오기 전 우선 단계 클리어하기 위해서 해야할 것들에 대해서 살펴봐야한다. 1. 컨트랙트의 소유권을 주장해야한다. 2. 잔액을 0으로 줄여야한다. 도움이 될만한 것들 ABI와 상호작용할때 이더를 어떻게 보내는가 ABI외부로 이더를 어떻게 보내는가 wei / ether 단위로 변환하는법 help() Fallback methods 1. 새 인스턴스 가져오기 새 인스턴스 가져오기(파란 버튼)을 클릭하게 되면 메타마스크에서 반응이 오며 트랜잭션을 발생시키고 잠시 기다리면 채굴이 완료되며 Instance address가 나온다. 여러 주소들이 나오는데 주소들에 관한 설명은 https://steemit.com/kr-dev/@modolee/ethereum-ethernaut-1-fallback [Ether..

Ethereum/Ethernaut 2021.07.08

0. Hello Ethernaut

0번에서는 Ethernaut을 플레이하기에 기본 방법들을 안내해준다. 1. 메타 마스크 설정 메타 마스크에 관한 정보는 이전 포스팅에 존재하기에 넘어간다. 현재 Ethernaut은 Rinkeby 테스트 네트워크를 사용하는 것 같으니 Rinkeby 테스트 네트워크를 가리키고 테스트 이더 도 받아둔다. 2. Ethernaut은 개발자 도구를 많이 이용한다. 크롬의 경우 F12번을 눌러 개발자 도구를 띄워준다. 개발자 도구를 조금 더 편하게 보기 위해 우측상단에 점3개를 누르고 제일 좌측의 아이콘을 눌러 개발자 도구를 따로 띄워주는 것이 좋지만 본인이 편한대로 하는것이 제일 좋다. console 에서 player를 입력하면 자신의 메타마스크의 주소가 나온다. 3.콘솔에서 help 사용 help입력시 Ether..

Ethereum/Ethernaut 2021.07.08