예습 내용 들으면서 공부한 내용 정리
# 스마트 컨트랙트란?
스마트 컨트랙트는 이더리움의 창시자인 비탈릭 부테린(Vitalik Buterin)이 이더리움에서 스마트 컨트랙트를 구현하면서 본격적으로 사용되기 시작했다고 한다. 이더리움은 아래와 같이 스마트 컨트랙트를 설명하고 있다.
ethereum.org에 따르면, 스마트 컨트랙트는 간단하게 말해서 이더리움 블록체인 위에서 실행되는 프로그램이다. 이더리움 블록체인 상의 특정한 주소에 있는 함수와 상태들의 모음이다.
스마트 컨트랙트는 이더리움 계정의 한 종류이다. 다시 말해, 스마트 컨트랙트는 잔고도 있고, 거래의 타겟이 될 수 도 있다는 뜻이다. 하지만 이것은 사용자에 의해 이루어지는 것이 아니라, 네트워크에 배포되고 프로그램된 대로 실행된다. 사용자 계정은 이 스마트 컨트랙트에 정의된 함수를 실행하는 거래를 제출해서 스마트 컨트랙트와 상호작용 할 수 있다. 스마트 콘트랙트는 다른 보통의 거래들과 같이 규칙을 정하고, 코드로 그것들을 강제한다. 스마트 컨트랙트는 기본적으로 삭제될 수 없고, 거래들은 되돌릴 수 없다.
출처: https://ethereum.org/en/developers/docs/smart-contracts/
국내 기관인 업비트는 아래와 같이 설명해두었다.
업비트 투자자보호센터에 따르면, 스마트 컨트랙트는 블록체인 기술을 활용해 제3의 인증기관 없이 개인 간 계약이 이루어질 수 있도록 하는 기술이다.
출처: https://m.upbitcare.com/academy/education/blockchain/70
내가 이해한 대로 설명해보자면, 계약 내용을 블록체인 상에 기록해두고 - 해당 계약 내용대로 디지털 자산이 자동으로 거래되도록 해둔 프로그램이라고 생각해볼 수 있을 것 같다. 다시 말해, 스마트 컨트랙트는 디지털 자산 계약서 쯤으로 보면 될거같다.
이러한 스마트 컨트랙트는 아래 네 가지 성질이 있다고 한다.
1. 관측 가능성(observability): 스마트 계약은 서로의 계약 이행 가능성을 관찰하거나 성과를 입증할 수 있어야 함
2. 검증 가능성(verifiability): 계약을 이행 또는 위반할 경우 계약 당사자들이 이를 알 수 있어야 함
3. 프라이버시(privity): 계약 내용은 계약에 필요한 당사자들만이 알 수 있어야 함
4. 강제 가능성(enforceability): 계약이 이뤄질 수 있도록 구속력이 있어야 함
# 솔리디티란?
솔리디티는 스마트 컨트랙트를 구현하는 데에 사용되는 프로그래밍 언어이다. 이더리움 핵심 기여자들이 개발하였고, 객체지향 언어로 JavaScript, C++, Python 등에 영향을 받았다고 한다.
정적 타입 프로그래밍 언어로, 사용자가 직접 변수 타입들을 선언해줘야 한다. 상속, 라이브러리, 사용자 정의형 타입 등을 지원한다. EVM(Ethereum Virtual Machine) 위에서 동작하며, 웹 브라우저에서 동작하는 Remix IDE 를 사용해서 빌드할 수 있다.
# MetaMask 지갑 사용법
암호화폐를 주고받을 수 있는 지갑. 블록체인 거래 시 필요한 key를 생성해준다.
1. 크롬 웹 스토어에서 Meta Mask를 검색해서 Install 한다.
2. Get Started 누르고 Create a wallet을 해준다.
3. Secret Recovery Phrase 를 잘 저장해둔다.
4. 사용할 네트워크를 설정한다.
BNB Smart Chain 네트워크를 사용할 건데, 해당 내용은 아래 binance academy에 잘 나와있다.
* Test Net을 설정할 때는, 통화기호를 BNB 동일하게 설정할 수 없기 때문에 tBNB로 설정해준다.
https://academy.binance.com/en/articles/connecting-metamask-to-binance-smart-chain
5. 개발 시에 gas fee가 필요하기 때문에 faucet 을 활용해서 코인을 받는다.
https://testnet.binance.org/faucet-smart
위 링크에 접속해서 Meta Mask 에서 발급받은 지갑 주소를 입력하고, Give me BNB 버튼을 누른다.
그러면 지갑에 0.5 TBNB가 들어오게 되고, 이를 이용해서 개발을 진행할 수 있다.
# remix IDE 사용법
설치 없이 브라우져에서 개발 및 배포를 진행할 수 있다.
좌측의 네비게이터의 첫번째 탭은 파일 탐색기이다. 워크스페이스의 파일들을 볼 수 있다.
세 번째 탭에서 AutoCompile 을 체크하면 자동으로 컴파일이 된다.
Solidity File -> compile -> Ethereum Bytecode -> BlockChain
네번째 탭에서 컴파일 결과를 확인할 수 있고, 실행시켜 볼 수 있다.
아래 사진에서 deploy 버튼을 누르면 배포가 되고, 아래에 deployed Contracts 에서 배포 내역을 확인하고, 직접 실행시켜 볼 수 있다.
추가로, private 로 선언한 것들은 화면에 나타나지 않고, public 으로 선언한 것들만 나타난다.
주황색으로 나타난 건 실행시켰을 때 gas fee 가 드는 것이고, 파랑색은 들지 않는 것이라고 한다.
# 간단한 컨트랙트 구현
파일 이미지를 클릭해서 .sol 확장자 파일을 생성한다.
1. 먼저 라이센스 표기해주기
// SPDX-License-Identifier: MIT
2. 솔리디티 버전 표기하기
pragma solidity ^0.8.7;
3. contract 작성
contract FirstContract { }
위 컨트렉트 안에 변수랑 함수로 컨트렉트를 작성해주면 된다. brace 를 쓰는게 C++이랑 비슷한거 같기도 하다 ㅎㅎ 자료형도 int, uint, string, bool 등이 사용된다. private 와 public 키워드를 사용해보았고, function 을 작성해보았다.
단순히 변수를 get 하는 함수는 view 키워드를 사용해서 gas fee를 사용하지 않도록 해줄 수 있다.
contract FirstContract{
int private number;
function getNumber() public view returns(int) {
return number;
}
}
+ 솔리디티 문법 관련 자료
https://docs.soliditylang.org/en/develop/
https://ggs134.gitbooks.io/solidityguide/content/
'CHALLENGER : BNB 체인 해커톤' 카테고리의 다른 글
5회차 해시립스 (hashlips) 사용해서 대량 이미지 만들기 (0) | 2022.11.27 |
---|---|
4회차 강의 정리 | NFT 메타데이터 추가 | NFT 민팅하기 | Pinata 사용하기 | IPFS 란 (2) | 2022.11.16 |
3회차 강의 정리 | NFT 스탠다드 | BEP-721이란? | OpenZeppelin 사용하기 | 민팅 구현하기 | 민팅해보고 OpenSea에서 확인하기 (0) | 2022.11.11 |
BNB 해커톤 1주차 후기 (0) | 2022.11.09 |
[온라인] CHALLENGER : BNB 체인 해커톤 합격 후기 (0) | 2022.11.08 |