일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 웹
- 리액트
- node.js
- CSS
- 파이썬
- next.js
- 클라우드
- 타입스크립트
- docker
- HTML
- 쿠버네티스
- 블록체인
- 프론트엔드
- TypeScript
- AWS
- 이슈
- 이더리움
- 가상화
- 백엔드
- es6
- kubernetes
- react
- k8s
- 컴퓨터공학
- 백준
- 자바스크립트
- 솔리디티
- BFS
- 알고리즘
- JavaScript
- Today
- Total
목록💬 언어/Solidity (10)
즐겁게, 코드
솔리디티를 활용해 다양한 방법으로 스마트 컨트랙트의 로직을 작성할 수 있음을 알고 계실 것입니다. 그런데 아마 처음 컨트랙트를 작성하게 되면 막막한 점이 한둘이 아닐 것입니다. pragma solidity >= 0.7.0 < 0.8.0; contract CMToken { // 어... 뭐부터 써야 할까... } 토큰의 필수 요소이 누락되는 것을 막고 토큰들이 이더리움 생태계에서 *호환될 수 있도록 하기 위해 이더리움에는 여러 표준 인터페이스가 존재하는데요, 오늘은 그 중 가장 기본적인 ERC-20 인터페이스를 직접 구현해보도록 하겠습니다. (※ 예를 들어 ERC-20 기반으로 구현된 찬민토큰이 있다면, 같은 ERC-20 기반의 펀디엑스(NPXS)와도 호환될 수 있다는 의미입니다.) 1. ERC-20 인터..
1. 가스 - 이더리움 DApp이 사용하는 연료 솔리디티에서는 DApp의 함수를 실행할 때마다 가스라고 불리는 화폐를 지불해야 하는데요, 사용자는 이더(ETH, 이더리움의 화폐)를 이용해서 가스를 사기 때문에 결국 이더를 소모해야만 합니다. 함수를 실행하는 데에 얼마나 많은 가스가 필요한지는 함수가 얼마나 복잡한지에 따라 달라집니다. 각각의 연산은 소모되는 가스 비용(gas cost)이 있고 그 연산을 수행하는 데에 소모되는 컴퓨팅 자원의 양이 비용을 결정하는데요, 예를 들어 storage에 값을 쓰는 것은 두 개의 정수를 더하는 것보다 비용이 높으며 함수의 전체 가스 비용은 함수를 구성하는 개별 연산들의 가스 비용을 모두 합친 것과 같습니다. 이더리움에서 함수를 실행하는 것은 사용자들에게 실제 돈을 쓰..
1. 컨트랙트의 소유권 pragma solidity "^0.4.19"; contract myContract { function sendEther(address _address, uint _amount) external { send(_address, _amount); } } 이더(돈)를 보내는 sendEther 라는 함수가 컨트랙트에 존재하는 상태입니다. 다만 sendEther는 external 로 선언되어 누구나 호출할 수 있는 상태인데요, 컨트랙트의 소유자만 특정 함수에 접근할 수 있도록 하기 위해 Ownable 이라는 라이브러리를 활용합니다. [Ownable.sol 라이브러리 코드 전문] /** * @title Ownable * @dev The Ownable contract has an owner a..
솔리디티는 "계약 지향 프로그래밍 언어" 인데요, 사실 배우다 보면 객체지향 프로그래밍과도 유사한 점이 많습니다. 상속을 통해 "고양이는 동물이다" 처럼 부분집합 관계에 있는 컨트랙트의 논리적 계층구조를 표현할 수 있으며, 동일한 로직을 다수의 클래스로 분할해서 단순히 코드를 정리할 때도 활용할 수 있습니다. 1. 상속 솔리디티에서는 is 키워드를 통해 컨트랙트를 상속받을 수 있습니다. contract Doge { function catchphrase() public returns (string) { return "So Wow CryptoDoge"; } } contract BabyDoge is Doge { function anotherCatchphrase() public returns (string) {..
솔리디티에는 변수를 저장할 수 있는 Storage와 Memory 라는 공간이 존재합니다. Storage는 블록체인 상에 영구적으로 저장되며, Memory는 임시적으로 저장되는 변수로 함수의 외부 호출이 일어날 때마다 초기화됩니다. (비유하자면 Storage는 하드 디스크, Memory는 RAM에 저장되는 것을 의미합니다.) 대부분의 경우에는 솔리디티가 알아서 메모리 영역을 구분해 주는데요, 상태 변수(함수 외부에 선언된 변수)는 storage로 선언되어 블록체인에 영구적으로 저장되는 반면, 함수 내에 선언된 변수는 memory로 선언되어 함수 호출이 종료되면 사라지게 됩니다. 1. storage storage와 memory 키워드는 구조체와 배열을 선언할 때 명시적으로 선언되어야 합니다. contract..
1. 매핑 매핑(mapping) 은 "키 - 값" 구조로 데이터를 저장할 때 활용되는 타입입니다. (자바스크립트의 Object 나 파이썬의 딕셔너리를 생각하시면 됩니다) // key: uint 형, value: address 형 mapping(uint => address) public zombieToOwner; // key: address 형, value: uint 형 mapping(address => uint) ownerZombieCount; 매핑값을 읽고 쓰기 위해서는 (매핑 이름)[키] 의 형태로 접근할 수 있습니다. mapping(uint => address) public zombieToOwner; // uint형 키 0에 호출한 사람의 주소(address)가 할당된 모습입니다. zombieToO..
솔리디티는 DAPP(탈중앙화 어플리케이션)의 로직을 담당하는데요, 어떻게 트랜잭션 내역과 계약 내용을 화면에 보여줄까요? 맞습니다! 바로 프론트엔드단이 별도로 필요한데요, 프론트엔드에 데이터를 넘겨주기 위해 이벤트를 활용합니다. 이벤트는 event 키워드로 선언할 수 있으며, 이벤트는 자바의 인터페이스처럼 본문을 구현하지 않습니다. [솔리디티 예시 코드] // onNewTransaction 이라는 이벤트를 정의합니다. event onNewTransaction(uint id, uint data); function add(uint id, uint data) public returns (uint) { // add 함수가 실행되면 onNewTransaction 이벤트가 호출됩니다. onNewTransaction..