1. 문제 당신은 20개의 토큰을 지급받은 상태로 시작한다. 아래의 컨트랙트에 가능한 한 많은 토큰을 탈취하라. 도움이 될만한 것: 오도미터가 무엇인가? // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; contract Token { mapping(address => uint) balances; uint public totalSupply; constructor(uint _initialSupply) public { balances[msg.sender] = totalSupply = _initialSupply; } function transfer(address _to, uint _value) public returns (bool) { require(balanc..
1. 문제 아래 컨트랙트의 소유권을 탈취하라. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Telephone { address public owner; constructor() { owner = msg.sender; } function changeOwner(address _owner) public { if (tx.origin != msg.sender) { owner = _owner; } } } 2. 해법 기름기 싹 빼고 해법만 간단하게 적겠습니다. 이번에도 3번 문제와 유사하게 Telephone 컨트랙트를 공격하는 Attack 컨트랙트를 작성하고 배포합니다. contract Attack { address public telephone..
1. 문제 초능력(?)을 사용해서 10번 연속으로 코인 뒤집기의 결과를 맞춰라. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract CoinFlip { uint256 public consecutiveWins; uint256 lastHash; uint256 FACTOR = 57896044618658097711785492504343953926634992332820282019728792003956564819968; constructor() { consecutiveWins = 0; } function flip(bool _guess) public returns (bool) { uint256 blockValue = uint256(blockhash(bl..
1. 문제 아래의 컨트랙트의 소유권을 탈취해라. // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import 'openzeppelin-contracts-06/math/SafeMath.sol'; contract Fallout { using SafeMath for uint256; mapping (address => uint) allocations; address payable public owner; /* constructor */ function Fal1out() public payable { owner = msg.sender; allocations[owner] = msg.value; } modifier onlyOwner { require( msg.sen..
1. 문제 아래의 컨트랙트 코드를 잘 살펴보고 다음의 문제를 해결하자. 1. 컨트랙트의 소유권을 탈취해라. 2. 컨트랙트의 이더 잔액(balance)을 0으로 만들어라. // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Fallback { mapping(address => uint) public contributions; address public owner; constructor() { owner = msg.sender; contributions[msg.sender] = 1000 * (1 ether); } modifier onlyOwner { require( msg.sender == owner, "caller is not the owne..
1. 지원되는 네트워크 선택 goerli는 조만간 비활성화되므로 polygon mumbai 또는 sepolia를 사용할 것을 권장합니다. 2. 새로운 인스턴스 생성 Get new instance 버튼을 클릭하여 새로운 인스턴스(스마트 컨트랙트)를 생성합니다. 이 인스턴스를 사용해 게임을 진행합니다. 3. 브라우저 콘솔창 열기 브라우저의 콘솔창을 열어 스마트 컨트랙트와 상호작용을 준비합니다. 상호작용에 앞서, contract.abi를 입력하여 어떤 메서드들이 있는지 확인할 수 있습니다. 4. 스마트 컨트랙트와 상호작용 먼저 contract.info()를 콘솔창에 입력합니다. 이때 반환되는 값이 Promise 이므로 await를 붙여야 바로바로 응답을 확인할 수 있습니다. 4-1. info 4-2. info..
0. 이전 게시글 [Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 6. 메타데이터를 사용한 standard json input 생성 0. 이전 게시글 [Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 5. 이벤트 구독 0. 이전 게시글 [Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 4. 배포된 스마트 컨트랙트와 상호작용 0. 이전 게시글 [Sol piatoss3612.tistory.com 1. .env 파일 업데이트 PRIVATE_KEY= RPC_ENDPOINT= RPC_WS_ENDPOINT=ws://localhost:8545 ETHERSCAN_API_KEY= Polygon Mumbai 테스트넷 사용 PRIVATE\_KEY : Polygon Mumbai 테..
0. 이전 게시글 [Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 5. 이벤트 구독 0. 이전 게시글 [Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 4. 배포된 스마트 컨트랙트와 상호작용 0. 이전 게시글 [Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 3. 생성된 Go 코드로 스마트 컨트 piatoss3612.tistory.com 1. 메타데이터 생성 $ solc @openzeppelin/=$(pwd)/node_modules/@openzeppelin/ --optimize --metadata --metadata-literal contracts/MyToken.sol -o build --overwrite @openzeppelin/=$(pwd)/node\_mo..
0. 이전 게시글 [Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 4. 배포된 스마트 컨트랙트와 상호작용 0. 이전 게시글 [Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 3. 생성된 Go 코드로 스마트 컨트랙트 배포 1. 로컬 테스트넷 실행 $ anvil 2. 최상위 경로에 .env 파일 생성 PRIVATE_KEY= RPC_ENDPOINT=http://localho piatoss3612.tistory.com 1. .env 파일 업데이트 PRIVATE_KEY= RPC_ENDPOINT=http://localhost:8545 RPC_WS_ENDPOINT=ws://localhost:8545 이벤트 구독을 위해서는 웹소켓 주소가 필요 2. 코드 작성 cmd/subscribe/ma..
0. 이전 게시글 [Solitidy+Go] geth로 스마트 컨트랙트 배포하기 - 3. 생성된 Go 코드로 스마트 컨트랙트 배포 1. 로컬 테스트넷 실행 $ anvil 2. 최상위 경로에 .env 파일 생성 PRIVATE_KEY= RPC_ENDPOINT=http://localhost:8545 이 때 PRIVATE\_KEY가 0x로 시작하면 파싱에서가 발생하므로 0x를 지워준 16진수값만 넣어줍니다. 3. piatoss3612.tistory.com 1. 코드 작성 cmd/interact/main.go package main import ( "context" "crypto/ecdsa" "fmt" token "go-ethereum-example/gen" "math/big" "os" _ "github.com/j..