본문 바로가기

블록체인

(59)
[Ethernaut] 3. Coin Flip 소스코드 // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import '@openzeppelin/contracts/math/SafeMath.sol'; contract CoinFlip { using SafeMath for uint256; uint256 public consecutiveWins; uint256 lastHash; uint256 FACTOR = 57896044618658097711785492504343953926634992332820282019728792003956564819968; constructor() public { consecutiveWins = 0; } function flip(bool _guess) public returns (bo..
[Ethernaut] 2. Fallout 소스코드 // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import '@openzeppelin/contracts/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.sender == owner, "caller is..
이더리움2.0과 eWasm 6월에 이더리움이 POS로 전환된다는 것은 알고 있었지만 eWasm을 활용해 솔리디티를 제외하고도 다양한 언어로 스마트 컨트랙트 개발이 가능하다는 소식을 듣고 알아봤다. 이더리움 2.0으로 바꾸는 이유? 최근 몇 년간 블록체인이 주목받기 시작하고 채굴 시장에도 이목이 끌리면서 POW 합의 알고리즘을 사용하는 데에 소모되는 컴퓨팅 파워에 대한 비난이 커지기 시작하자 이더리움에서도 이를 해결하기 위한 방안으로 POS를 사용하는 이더리움 2.0을 발표하였다. POS와 EVM의 연관성 이더리움에서는 여태까지 EVM을 사용하고 EVM에서 스마트 컨트랙트를 실행하기 위해 솔리디티로 코드를 작성했어야 했다. EVM은 처리속도가 느리다는 단점이 있었는데 이는 POW의 합의 알고리즘 자체가 느려 가시적으로 드러나지 않았..
EVM 이란? EVM EVM은 스마트 컨트랙트 배포 및 실행을 처리하는 이더리움의 일부이다. 지갑 -> 지갑으로 간단한 값을 전송하는 트랜잭션은 EVM이 필요 없지만, 그 외 모든 것은 EVM에 의한 상태 업데이트를 수반한다. 넓게 보면 이더리움 블록체인에서 실행되는 EVM은 자체 영구 데이터 저장소가 있는 수백만 개의 실행 가능 객체를 가진 전 세계의 탈중앙화 된 컴퓨터다. EVM은 스택 기반의 구조를 가지며 유사 튜링 완전 상태 머신이다. 이것은 튜링 완전한 코드를 수행할 수 있지만 가스비라는 제한 도구를 두어 함수가 의도적으로 영원히 수행되어 이더리움 플랫폼이 전체적으로 중단되는 상황을 피할 수 있다. 솔리디티로 작성된 코드는 컴파일러를 통해 바이트 코드로 변환되며 변환된 바이트코드가 EVM에서 실행된다. EVM..
ABI란? 스마트컨트랙트를 개발하면서 웹에서 스마트컨트랙트를 호출하기 위해서는 웹 프로젝트 폴더에 abi가 필수적으로 있어야 합니다. 이 ABI라는 것에 대해 알아보겠습니다. ABI(Application Binary Interface) ABI란 Application Binary Interface의 약자로서 스마트 컨트랙트와 다른 프로그램 모듈의 인터페이스 역할을 하고 있으며 스마트 컨트랙트의 매개변수, 함수들을 json으로 표현한 것입니다. ABI를 사용하는 이유 ABI는 컨트랙트 내의 함수를 호출하거나 컨트랙트로부터 데이터를 얻는 방법입니다. 스마트 컨트랙트는 블록체인에 바이트 코드로 배포되는데 컨트랙트 내에 포함된 함수들 중 어떤 함수를 호출할지 지정하기 위해 ABI가 필요하며 호출한 함수의 리턴 값이 어떤 것..
트랜잭션 트랜잭션 트랜잭션이란? 트랜잭션이란 일종의 거래기록으로서 쉽게 말해 내가 상대방에게 코인을 전송했을 때 코인을 전송한다는 그 메시지가 트랜잭션이며 블록에 기록됩니다. 트랜잭션의 구조 네트워크마다 트랜잭션의 구조가 다를 수 있어 대표적으로 이더리움의 트랜잭션 구조를 살펴보겠습니다. 구조 설명 Nonce EOA에서 발행되는 시퀀스 넘버 Gas price 메시지 전송자가 지급하는 가스의 가격 Gas limit 가스의 최대 사용량 Recipient 수신자 Value 수신자에게 보낼 이더의 양 v, r, s EOA의 ECDSA 디지털 서명의 세가지 구성 요소 이더리움의 트랜잭션 메시지는 RLP(Recursive Length Prefix)라는 인코딩 체계를 사용하여 바이트 단위로 직렬화됩니다. 또한 이더리움의 모든..
[SpeedRunEthereum] Challenge 3 [Dex] 챌린지 3부터는 프로필에 Builder라는 태그가 부착되고 개발자들 풀에 참여해 팀원을 찾거나 서로 정보를 공유하는 커뮤니티에 접근할 수 있게 됩니다. Checkpoint 0: install 템플릿 프로젝트 파일을 설치해 주겠습니다. git clone https://github.com/squirtleDevs/scaffold-eth.git challenge-3-single-pool-dex cd scaffold-eth git checkout challenge-3-single-pool-dex yarn install Checkpoint 1: Environment 리액트, 하드햇 로컬 체인, 배포를 진행해줍니다. yarn start yarn chain yarn deploy Checkpoint 2: Reserves..
[SpeedRunEthereum] Challenge 2 [Token Vendor] Checkpoint 1: Environment 터미널 3개를 실행 후 하나씩 실행합니다. yarn chain //로컬 네트워크 yarn start //리액트 yarn deploy //스마트 컨트랙트 배포 Checkpoint 2: Your Token YourToken.sol의 생성자로 초기 물량을 발행합니다. contract YourToken is ERC20 { constructor() ERC20("EBTT", "EBT") { _mint(msg.sender , 1000 * 10 ** 18); } } Checkpoint 3: Vendor Vendor.sol 에서 다음 코드를 추가합니다. uint256 public constant tokensPerEth = 100; // 이더당 토큰 개수 event BuytT..