[ 이더리움 - 기본개념 ]

오미희·2021년 10월 13일
0

blockchain

목록 보기
2/13

블록체인


완전한 탈중앙이 이루어진다면 =>

// 서버를 거치거나 하지않고 바로 브라우저와 데몬간 연결되게 됨.

이더리움

: 블록체인 기술 기반으로 스마트계약 기능을 구현하기 위한 분산 컴퓨팅 플랫폼.

솔리디티 언어로 작성된 스마트 컨트랙트는 EVM 바이트 코드로 컴파일 된 후 컨트랙트 배포 트랜잭션에 추가된다.  
컨트랙트는 로컬 이더리움 노드로 푸시되고 네트워크 전체로 전파된다. 그런 다음 채굴되어 블록체인에 추가된다.
 - 출처 : 이더리움 디앱 개발 (책) -

스마트컨트랙트(smart contract)

: 특정한 조건이 충족되는 경우 자동으로 사전에 설정해둔 이벤트가 발생하도록 프로그래밍된 것으로 1994년에 암호학자인 닉 사보가 제시.

스마트컨트랙트 전체적 흐름 느낌...

1) 가장 먼저 데몬 즉 가나쉬 필요
2) 가나쉬에 있는 블럭에서 블럭에 어떻게 데이터를 저장하는지에 대한 내용 필요
ex) 특정 변수에 대한 데이터 버튼 클릭시 숫자를 카운팅하는 기능 등
-> 이를 솔리디티 언어로 블럭안에 작성
4) 솔리디티에 작성한 내용을 빌드후 블럭에 저장
5) 가나쉬에는 특정 블록에 우리가 저장한 내용을 담고 있음
6) 이제 우리가 블록에 가진 내용을 프론트에 전달하거나 하는 코드를 작성
-- web3 라이브러리 이용
-- abi주소값에 대한 내용 가져오는 등….
-- 블럭에서 프론트로 가져온 데이터를 내용으로 해서 화면과 기능을 구현.
// 솔리디티에서 컴파일을 하면 블럭에 내용이 채워짐
// 이후에는 body에 내용이 추가됨(내용이 수정되는 것이 아님)

DAPP (Decentralizaed Applicaion/디앱)

smart contract를 통해 작성된, 탈중앙화 분산애플리케이션, 이더리움으로 구동되는 애플리케이션을 의미한다.

🧩 GAS(가스)
: 스마트 컨트랙트 이행 과정에서 발생하는 수수료의 단위
--> 트랜잭션을 위해 지불하는 이더의 양 
** 스마트계약을 배포하는 것도 트랜잭션에 포함 -> 즉 가스 지불
-- 각 트랜잭션에 대한 이더의 양 즉 가스는 아직 구체적으로 정해져 있지 않음
> 특이점!!
--> 가스 가격이 정해져 있지 않다 -> 트랜잭션 생성자가 가스 가격 설정 가능
==> 코드상 gasPrice으로 설정하는 부분!!
// 높은 gasPrice을 설정한 트랜잭션일수록 더욱 빠르게 처리됨. 
// gasLimit => 지불가능한 가스의 한도를 설정해두는 것.


🧩 solidity (솔리디티)
: 스마트 컨트랙트를 작성하는 자바스크립트와 비슷한 객체지향 기반의 프로그래밍 언어.
-- 솔리디티 코드는 이더리움 블록체인에 배포되는 EVM 바이트코드로 컴파일됨.
-- 솔리디티의 기본 확장자 : .sol
//https://cryptozombies.io/ko/  -> 솔리디티 언어 재밌게 배우기 좋은 크립토좀비사이트
 
🧩 truffle (트러플)
: 스마트 컨트랙트를 작성한 솔리디티 파일을 컴파일하고 배포하는 일련의 과정을 더욱 쉽게 할 수 있도록 구성된 프레임워크
 -- dapp을 만들기위해 쓰는 프레임 워크
 ** 트러플 사이트 https://www.trufflesuite.com/docs/truffle/testing/writing-tests-in-solidity

🧩 Ganache (가나시)
: 가상의 이더리움 네트워크를 생성해서 스마트 컨트랙트를 실행할 수 있도록 해주는 프로그램
즉 testRPC
// 메인넷 테스트넷 빌려쓰지 않고 로컬pc 가볍게 데몬 구현( 블록의 정보를 local에서 저장)
// 가나쉬에서 생성되는 10개의 계정 -> 공개키와 개인키   (metamask는 가나시의 개인키를 요구)
🧩 web3
: RPC통신을 쉽게 구현할 수 있게 도와주는 라이브러리
-- 프론트와 연결하여 이벤트에 대해 특정한 결과를 출력

🧩 리믹스 
: 비쥬얼스튜디오같은 편집기툴로써 온라인에 존재하는 것. 자체적으로 EVM실행(즉 언어해석)
** 리믹스 이용 https://remix.ethereum.org

🧩 EVM(Ethereum Virual Machine)
: 이더리움 가상 머신  // 네트워크의 모든 스마트 계약을 실행하는 런타임 환경
-- node.js같은 언어해석기, 솔리디티 언어를 해석해줌(ex) java -> jvm)
-- 256비트 가상머신
-- geth, parity 등의 이더리움 클라이언트 설치하고 실행하면 EVM이 시작되어, EVM이 트랜잭션의 동기화, 유효성 검사 및 실행을 시작.

🧩 metamask
: 웹 브라우저에서 DApp을 사용할 수 있게 해주는 확장 프로그램으로, 가나시와 함께 사용하여 테스트 가능.
🧩
## 컨트랙트예제
// 솔리디티 언어는 반드시 ;으로 끝마추어야 함.

pragma solidity ^0.4.0;
// 버전 명시
// 솔리디티는 버전업이 빨라서 컴파일시에 오류가 발생하지 않도록 처음에 반드시 해당 버전 명시

contract SimpleStorage{
// 프로그래밍 코드는 모두 contract{}블록 안에 존재
    event NewItem(string name, uint qty, uint amout);
    // 이벤트 선언

    uint storedData;
    // 반드시 자료형을 함께 명시해두어야함
    
    struct item {
    // 구조체 : 각각 다른 유형의 변수를 묶는 사용자 정의 유형
    	string name;
        uint qty;
    }
    
    item[] public items;
    // item 구조체를 배열에 담고 이를 items로 이름지음
    // public은 해당 컨트랙트가 아닌 곳에서도 사용 가능함.
    // []안에 아무런 값도 주지 않은 동적 변수로 크기가 자유롭다. 
    // 반면 [2]이와 같은 경우 정적 변수로 2개의배열만 갖을 수 있다. 대신 메모리 최적화
    
    function buyitem(string name, uint qnt, uint cost){
    	uint amount = cost * qnt;
        NewItem(name, qnt, amount);
        // 실질적인 이벤트의 실행
        
    }
    
    function set(uint x) public{
    	storedData = x;
    }
    
    function _secret(uint x) private pure{
    	// private 함수로 선언한 경우 함수명은 _으로 시작하는 것이 관례
    }
 
    function get() public view returns (uint retval){
    // view : 함수의 제어자로 기존의 데이터를 그대로 출력만 가능 변형 불가.
    // pure : 함수의 제어자로 다른 데이터에 대한 접급없이 인자값만을 받아 이용.
    // 반환값이 있는 경우 반드시 returns로
    	return storedData;
    }
}

** 프론트앤드에서 특정한 조건이 충족되어 이벤트가 실행될때

mycontract.NewItem(function(error,result)=>{
	// 사전에 명시된 조건이 충족된 경우 프론트에서 발생한 내용
})

참고사이트 https://ethereum.org/en/
참고사이트2 https://kr.zastrin.com/courses/kr-ethereum-primer/lessons/1-1

profile
안녕하세요

0개의 댓글