1. 문제 The Ethernaut The Ethernaut is a Web3/Solidity based wargame played in the Ethereum Virtual Machine. Each level is a smart contract that needs to be 'hacked'. The game is 100% open source and all levels are contributions made by other players. ethernaut.openzeppelin.com 이 컨트랙트는 서로다른 두 개의 타임존의 시간을 저장하기 위한 라이브러리를 사용한다. 생성자는 각각의 시간을 저장하기 위해 두 개의 라이브러리 인스턴스를 생성한다. 주어진 컨트랙트의 소유권을 탈취하라. // SPDX-..
1. 문제 NaughtCoint은 ERC20 토큰이며 당신은 이미 모든 토큰을 손에 쥐고 있다. 문제는 10년이 지나야 그 토큰들을 사용할 수 있다는 것이다. 시간 제한이 풀리기 전에 다른 주소로 자유롭게 토큰을 보낼 수 있는 방법은 없을까? 당신의 토큰 잔액을 0으로 만들어라. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import 'openzeppelin-contracts-08/token/ERC20/ERC20.sol'; contract NaughtCoin is ERC20 { // string public constant name = 'NaughtCoin'; // string public constant symbol = '0x0'; // uint..
1. 문제 The Ethernaut The Ethernaut is a Web3/Solidity based wargame played in the Ethereum Virtual Machine. Each level is a smart contract that needs to be 'hacked'. The game is 100% open source and all levels are contributions made by other players. ethernaut.openzeppelin.com 문지기(gatekeeper)를 지나서 입장자(entrant)로 등록하라. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract GatekeeperTwo {..
RLP는 임의의 바이트열을 공간 효율적인 형식으로 인코딩하는 방식으로, 이더리움 클라이언트에서 사용됩니다. RLP 인코딩 함수는 아이템을 파라미터로 받는데, 아이템의 정의는 다음과 같습니다. 문자열 아이템의 리스트 예를 들어, 이하의 항목은 모두 아이템으로 취급됩니다. 빈 문자열 "cat" [ "cat", "dog" ] (리스트) [ "cat", [ "puppy", "cow", [ ] ] (중첩된 리스트) 이 글에서 문자열이라고 함은, 단순히 '바이너리 데이터의 바이트 표현의 모음; 바이트열'을 의미합니다. 별다른 인코딩이 사용되거나 하지 않습니다. 정수는 부호가 없는 정수만 사용이 가능하며, 문자열로 변환하여 인코딩합니다. 그렇지 않으면 다른 타입과의 충돌이 발생할 수 있습니다. RLP 인코딩 규칙 1..
1. 문제 The Ethernaut The Ethernaut is a Web3/Solidity based wargame played in the Ethereum Virtual Machine. Each level is a smart contract that needs to be 'hacked'. The game is 100% open source and all levels are contributions made by other players. ethernaut.openzeppelin.com 문지기(gatekeeper)를 지나서 입장자(entrant)로 등록하라. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract GatekeeperOne {..
1. 문제 이 컨트랙트의 작성자는 스토리지의 민감한 부분에 대해 충분히 주의를 기울이고 컨트랙트를 작성했습니다. 이 컨트랙트의 잠금을 해제하시오. 도움이 될 만한 것들: * 스토리지 작동 원리 이해 * 함수의 파라미터가 어떻게 파싱되는지 이해 * 타입 캐스팅이 어떻게 동작하는지 이해 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Privacy { bool public locked = true; uint256 public ID = block.timestamp; uint8 private flattening = 10; uint8 private denomination = 255; uint16 private awkwardness = uint16..
1. 문제 빌딩의 꼭대기에 도달하라. (Elevator 컨트랙트의 top을 false에서 true로 바꿔라) // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface Building { function isLastFloor(uint) external returns (bool); } contract Elevator { bool public top; uint public floor; function goTo(uint _floor) public { Building building = Building(msg.sender); if (! building.isLastFloor(_floor)) { floor = _floor; top = building.isL..
1. 문제 아래 컨트랙트의 모든 자금을 탈취하라. // SPDX-License-Identifier: MIT pragma solidity ^0.6.12; import 'openzeppelin-contracts-06/math/SafeMath.sol'; contract Reentrance { using SafeMath for uint256; mapping(address => uint) public balances; function donate(address _to) public payable { balances[_to] = balances[_to].add(msg.value); } function balanceOf(address _who) public view returns (uint balance) { ret..
mdBook 설치 rust 설치 필요! Install Rust A language empowering everyone to build reliable and efficient software. www.rust-lang.org $ cargo install mdbook mdBook 생성 및 로컬에서 실행 $ mdbook init mdbook $ cd mdbook $ mdbook serve --open Github Page 배포 1. Github Actions를 통한 Github Page 생성 활성화 2. Github Actions를 사용해 mdBook 배포 name: book on: push: branches: - main jobs: deploy: runs-on: ubuntu-latest permission..
1. 문제 아래의 컨트랙트는 아주 간단한 게임입니다. 현재 컨트랙트의 상금보다 더 많은 금액을 컨트랙트에게 보내는 누구나 새로운 왕이 될 수 있습니다. 이 게임을 완전히 망가트려 보세요. *주의* 인스턴스를 제출할 때 관리자는 왕권을 다시 탈환하려 할 것입니다. 그러한 행위가 불가능하도록 하세요. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract King { address king; uint public prize; address public owner; constructor() payable { owner = msg.sender; king = msg.sender; prize = msg.value; } receive() external p..