솔리디티에서는 변수가 저장되는 데이터 영역으로 크게 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는 스마트 계약 보안을 유지하기 위해 매우 중요하..
OpenZepplin은 오픈소스 블록체인 프레임워크 및 라이브러리로, 이더리움 및 다른 블록체인 플랫폼에서 스마트 컨트랙트를 구축하는데 사용되고 있다. OpenZepplin은 강력한 보안 기능과 높은 수준의 코드 재사용성을 제공하는 것으로 유명하다. (OpenZepplin의 오픈소스들은 보안측면에서 검증받은 코드들이기에, DApp 개발에 신뢰하고 사용할 수 있다.) OpenZepplin은 다양한 프로그래밍 언어로 기본적인 컨트랙트들을 제공하는데, 그 중 우리는 솔리디티 기반의 Ownable 컨트랙트에 대해서 알아볼 것이다. Ownable 컨트랙트(소유 가능한 컨트랙트)란? Ownable 컨트랙트는 컨트랙트의 소유자를 지정하고 그 소유자만이 특정 기능을 수행할 수 있도록 하는 기능을 제공한다. 즉, Own..
오픈씨의 수수료 분배 코드를 참고해서 코드를 작성해보았다. ERC-1155 기반의 수수료를 관리자에게 떼어주고, 수수료를 제외한 나머지 금액과 NFT를 구매자에게 transfer하는 contract를 만들어보자. 예외처리 부분을 모두 제외한 오직 수수료 분배 부분만 작성되어 있으니, 예외처리 로직은 입맛에 맞게 추가하길 바란다. 사용 IDE : Remix IDE 0.24.0 ver Compile version : 0.8.6+commit.11564f7e Solidity version : 0.8.0 이상 코드설명 //수수료율 uint private _feePercent = 25;// 수수료 : 2.5 % 솔리디티에서 소수점을 나타낼 수 있는 타입은 없기에 수수료를 uint 타입으로 설정 오픈씨와 같은 2.5..