솔리디티에서는 변수가 저장되는 데이터 영역으로 크게 3가지가 있다. 각각의 데이터 영역은 사용되는 목적과 특성에 따라 다르게 사용되는데, 이 데이터 영역들의 특징을 알아보자. 설명 내용이 길면 맨 아래 요약된 글을 참고하자. Storage 솔리디티에서 storage는 블록체인에 영구적인 상태를 저장하는 영역이다. 모든 스마트 컨트랙트의 상태는 블록체인의 상태로 저장되며, 상태 변경 함수가 호출될 때마다 해당 상태의 변경 사항이 블록체인의 storage에 저장된다. contract Example { uint256 public myNumber; } 위 코드에서 myNumber는 uint256 타입의 상태 변수이다. 이 변수는 스마트 컨트랙트의 storage 영역에 저장된다. myNumber 변수는 Examp..
솔리디티에서 함수를 정의할 때 함수 옆에 붙어서 제약을 걸어주는 키워드들이 존재한다. 이 키워드를 사용하면 그 함수에 부가적인 기능을 추가할 수 있는데 키워드들을 잘 사용하면 컨트랙트의 가스 비용을 줄이거나 간편하게 제약을 걸 수 있다. view 솔리디티에서 view가 붙은 함수는 블록체인에서 상태를 변경하지 않고 값을 읽기만 하는 함수이다. view 함수는 단순히 데이터를 읽기만 하고 변경하지 않기 때문에, 다른 컨트랙트를 호출할 수 있지만 상태를 변경하는 함수는 호출할 수 없다. 따라서 view 함수는 블록체인 안에서 상태 변경이 발생하지 않으며, 실행될 때 가스비의 없이 무료로 실행된다. 다음은 view 함수의 예시이다. pragma solidity ^0.8.0; contract Example { ..
솔리디티에서 override 키워드는 솔리디티 0.6.0 버전 이후에 추가된 기능으로, 상위 컨트랙트(contract)에서 정의된 함수를 하위 컨트랙트(contract)에서 재정의(override)할 때 사용한다. 상위 컨트랙트에서 정의된 함수와 같은 이름과 형식을 갖는 함수를 하위 컨트랙트에서 정의하면, 이를 override 했다고 한다. 이때, override한 함수는 상위 컨트랙트에서 정의된 함수와 이름, 매개변수 형식, 반환값 형식이 동일해야 한다. 즉, 상속받은 함수를 덮어쓰기 위해 같은 이름, 같은 매개변수를 가진 함수를 다시 정의할 때 사용하는 것이다. 솔리디티는 override를 통해 컨트랙트 간의 상속 관계를 구현할 수 있다. override(오버라이드, 재정의) override된 함수는..
솔리디티에서 msg.sender는 가장 중요한 전역 변수(global variable) 중 하나 이다. msg.sender는 현재 스마트 계약을 호출한 계정의 주소를 나타내며, 이것을 통해 스마트 계약은 누가 트랜잭션을 실행했는지 확인할 수 있다. 예를 들어, 계약을 배포한 주소에서 트랜잭션을 호출하면 msg.sender는 배포한 계정의 주소가 된다. 또, 다른 계정에서 트랜잭션을 호출하면 msg.sender는 그 계정의 주소가 된다. 즉, msg.sender를 사용하면 스마트 컨트랙트를 실행하는 사용자 또는 다른 컨트랙트의 주소를 확인할 수 있어, 스마트 컨트랙트는 msg.sender를 기반으로 조건 분기 등의 로직을 구현할 수 있다. msg.sender는 스마트 계약 보안을 유지하기 위해 매우 중요하..
클레이튼(Klaytn)은 국내 블록체인 기업인 Ground X가 개발한 공개형 블록체인 플랫폼이다. 이더리움 기반의 블록체인으로 solidity와 같은 이더리움 언어로 스마트 컨트랙트 개발이 가능하며 개발자들이 쉽게 BApp(블록체인 어플리케이션)을 개발할 수 있도록 다양한 도구와 서비스를 제공한다. 그럼 이제 클레이튼을 본격적으로 사용할 수 있도록 클레이튼 지갑을 생성해보겠다. 클레이튼은 국내 IT 기업 카카오의 자회사인 그라운드 X가 개발했다. 따라서 카카오 플랫폼을 활용하여 다양한 클레이튼 지갑 서비스를 제공한다. 그 중 PC에서 클레이튼 지갑을 만드는 방법을 소개하고, 테스트넷의 코인도 받아보도록 한다. 클레이튼 Wallet 페이지에서 클레이튼 지갑 생성 Klaytn Wallet baobab.wa..
OpenZepplin은 오픈소스 블록체인 프레임워크 및 라이브러리로, 이더리움 및 다른 블록체인 플랫폼에서 스마트 컨트랙트를 구축하는데 사용되고 있다. OpenZepplin은 강력한 보안 기능과 높은 수준의 코드 재사용성을 제공하는 것으로 유명하다. (OpenZepplin의 오픈소스들은 보안측면에서 검증받은 코드들이기에, DApp 개발에 신뢰하고 사용할 수 있다.) OpenZepplin은 다양한 프로그래밍 언어로 기본적인 컨트랙트들을 제공하는데, 그 중 우리는 솔리디티 기반의 Ownable 컨트랙트에 대해서 알아볼 것이다. Ownable 컨트랙트(소유 가능한 컨트랙트)란? Ownable 컨트랙트는 컨트랙트의 소유자를 지정하고 그 소유자만이 특정 기능을 수행할 수 있도록 하는 기능을 제공한다. 즉, Own..
이더리움에서 스테이킹이란 이더리움 코어 소프트웨어의 검증 기능을 실행하기 위해 이뤄지는 행위이다. 하지만 많은 사람들이 스테이킹을 단순히 장시간 코인을 예치하고 수익을 얻는 것으로 알고있다. 물론 스테이킹을 함으로써 수익을 얻게되는 것은 검증 과정 중 하나이기에 틀린 말은 아니다. 수익을 얻을 수 있다고해서 스테이킹에 대해서 자세히 알아보지 않는 것은 위험하다. 스테이킹은 반드시 수익을 보장한다고 할 수 없으며 위험성도 존재하기 때문이다. 그리하여 투자를 하기전에 스테이킹이 무엇인지 어떤 과정과 어떤 종류로 스테이킹이 이뤄지는지 알아볼 필요성이 있다. 지분 증명(PoS)과 스테이킹 기존의 작업증명(PoW, Proof-of-Work) 알고리즘을 사용하던 이더리움 블록체인은 작업증명의 비효율성에 대한 불만이..
메타마스크에 세폴리아 테스트넷이 없을 경우 수동으로 추가하는 법은 아래와 같다. Infura API 키 얻기 1. Infura에 로그인을 한다. Ethereum API | IPFS API & Gateway | ETH Nodes as a Service Infura's development suite provides instant, scalable API access to the Ethereum and IPFS networks. Connect your app to Ethereum and IPFS now, for free! infura.io 2. 메인 페이지(대쉬보드)화면의 오른쪽 제일 상단의 [CREATE NEW KEY]를 눌러 Infura 어플리케이션을 생성한다. 3. 기본 이더리움 Web3 API를 선택..
이더리움 재단에서 Ethereum 1.0(Eth1), Ethereum 2.0(Eth2)의 용어 사용을 자제해달라고 공지했다. 이더리움은 계속해서 변화를 하고있고, 개발과 업그레이드를 넘어 Eth1, Eth2 용어로 구분짓는 단계를 폐지하려는 시도도 하고있다. 그럼 이를 대체할 단어는 무엇인가? Eth1 → Execution Layer Eth2 → Consensus Layer Execution Layer + Consensus Layer = Ethereum 바로 Execution Layer(EL, 실행 계층)과 Consensus Layer(CL, 합의 계층)이라고 한다. 실행 계층과 합의 계층에 관하여 알고싶으면 아래 링크를 참고하길 바란다. [Ethereum] 이더리움 실행 계층(EL)과 합의 계층(CL)..
이더리움 세폴리아(Sepolia) 테스트넷에서 이더 얻는 방법을 소개한다. 방법 1 현재 이 방법은 막혔다. 따라서 사용 불가하다. 아래 방법2를 확인하길 바란다. Sepolia FaucETH faucet.sepolia.dev 세폴리아 수도꼭지 웹 페이지로 작성일 기준 1시간 마다 0.05 ETH 테스트 이더를 받을 수 있다. 세폴리아 수도꼭지 페이지에 접속하면 아래와 같은 화면이 나타난다. 입력창에 이더리움 지갑주소를 넣는다. 사람인지 확인하는 캡처 도구를 통과해주고 아래와 같이 고양이가 열심히 달리고 완료됐다는 화면이 뜨면 이더가 내 지갑으로 들어온다. 확실히 규모가 작은 테스트넷이라서 그런지 엄청나게 빠른 속도로 들어오는 것을 확인할 수 있다. 하지만 오전 시간에는 한시간 넘게 기다려야 ETH가 들..