+ All Categories
Home > Documents > New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리,...

New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리,...

Date post: 13-Oct-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
29
묶음 강좌명 : 블록체인 13. 솔리디티 문법 이해와 프로그래밍 13-3. 솔리디티 프로그래밍 소개 블록체인응용과 실습
Transcript
Page 1: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

묶음 강좌명 : 블록체인

13. 솔리디티 문법 이해와 프로그래밍13-3. 솔리디티 프로그래밍 소개

블록체인응용과 실습

Page 2: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

1. 솔리디티의 이벤트, 라이브러리, 임포트

2. Web3.js 와 DApp 개발

블록체인 플랫폼에서 스마트계약서를

작성할 수 있다.

스마트계약 작성을 위한 솔리디티 문법의

특징을 설명할 수 있다.

Page 3: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

1. 솔리디티의이벤트, 라이브러리, 임포트

Page 4: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

상속의 Super 키워드

출처 조수현, 이더리움베이직, JPub

최종 상속 체인에서 다음 컨트랙트를 가리키기 위해서 사용됨

Page 5: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

이벤트(Event)

컨트랙트에서 함수가 실행되는 중간에 이벤트를 발생시킴

• 어떤 변수가 현재 어떤 값인지 로그를 남겨, 외부 Dapp에서이를 추적할 수 있도록 함

값이 바뀔 때 마다 이를 감지하여, Dapp에서 callback 함수를 실행함

• 실시간으로 정보를 업데이트하거나 대응이 가능함

Page 6: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

라이브러리

주요 목적

• 컨트랙트와 유사하지만, 특정 주소에 한 번 배포되고 코드가다양한 컨트랙트에서 재사용되는 것이 목적임

• 솔리디티 라이브러리가 블록체인에 배포되면, 주소를 알고있고 소스코드를 가지고 있다면 누구도 사용이 가능함

Page 7: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

라이브러리

다른 컨트랙트의 함수를 호출할 경우

• 호출되는 컨트랙트로 실행 컨텍스트 변경

라이브러리 함수를 호출할 경우

• 실행 컨텍스트 변동 없이, 호출하는 컨트랙트 내부에서 함수가실행됨

Page 8: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

라이브러리

• 라이브러리 내부에서this를 통해라이브러리를 호출한컨텍스트의상태변수를 접근 가능

• 단, 상태변수를정의하거나, 상속, 이더전송은 불가능

Page 9: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

임포트

다른솔리디티소스파일가져오기

소스파일이다른소스파일을가려오는것을허용함

출처 나라얀프루스티, 천민욱, 이더리움활용한블록체인프로젝트구축, 에이콘

Page 10: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

전역으로사용가능한변수

• 블록 및 트랜잭션 속성• block.blockhash(uint blockNumber) returns (bytes32)

// 해당 블록의 해쉬, 가장 최신 256 block에 대해서만 동작함• block.coinbase(address) // 현재 블록 채굴자의 주소• block.difficulty (uint) // 현재 블록 난이도• block.gaslimit(uint) // 현재 블록 가스 한도• block.number (uint) // 현재 블록 번호• block.timestamp (uint) // 현재 블록 타임스탬프• msg.data (bytes) // 트랜잭션이 호출한 함수 및 인자의 전체

적인 호출 데이터 저장• msg.gas(uint) // 잔여가스• msg.sender(address) // 메시지송신자(현재호출)

Page 11: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

다수의값리턴

솔리디티는함수가다수의값을리턴하는것을허용함

Page 12: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

2. Web3.js와 DApp 개발

Page 13: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

web3.js 활용

Web3.js

• JSON RPC API 를 자바스크립트로 래핑(wrapping)하여이더리움과 통신할 수 있도록 라이브러리화한 것

• JSON RPC와 함께 이더리움 표준 인터페이스로 제공

• 이더리움 dapp 개발 시 매우 유용함, npm install web3

출처 박재현, 코어이더리움프로그래밍, JPub

로컬 호스트

JSON RPC API 활용

Page 14: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

Web3 API 콜백예제

web3.eth.getBlock(48, function(err, res) {If (err)

console.error(err)else

console.log(res);})

Page 15: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

Web3 API 콜백예제

Page 16: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

// local geth 서버인경우

var web3 = new Web3(new web3.providers.HttpProvider("http://127.0.0.1:8545"));

var balance = web3.eth.getBalance(‘0x782….’);var value = web3.fromWei(balance, 'ether’);console.log('balance : ' + value);

var Web3 = require('web3');

Page 17: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

// ropsten test network 인경우

var web3 = new Web3(new web3.providers.HttpProvider(https://ropsten.infura.io));var balance = web3.eth.getBalance(‘0x782….’);var value = web3.fromWei(balance, 'ether');console.log('balance : ' + value);

var Web3 = require('web3');

Page 18: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

web3.eth.personal.unlockAccount(web3.eth.accounts[0], "1", function(err, res) {

if (err)throw err; });

var txHash = web3.eth.sendTrasaction({from:web3.eth.coinbase,to:web3.eth.accounts[1],value: web3.toWei(1, "ether")}, function(err, res) {

if(err)return err;

else console.log('txHash : ' + res);return res; });

web3.js 활용

Page 19: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

web3.js 활용

API를자바스크립트로 wrapping 하여이더리움과통신할수있도로라이브러리화함

디렉토리구조

app.jspackage.jsonpublic

/cssfiles

/jsmain.js

/htmlindex.html

• 웹페이지 구성 HTML, CSS, Javascript

git clonehttps://github.com/PacktPublishing/Building-Blockchain-Projects.git

출처 조수현, 이더리움베이직, JPub

Page 20: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

web3.js 활용

npm install . // 의존성관계패키지설치

Node app.js 후 http://localhost:8080

<!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-6 offset-md-3 text-xs-center"> <br> <h3>Upload any file</h3> <br> <div> <div class="form-group"> <label class="custom-file text-xs-left"> <input type="file" id="file" class="custom-file-input"> <span class="custom-file-control"></span> </label> </div> <div class="form-group"> <label for="owner">Enter owner name</label> <input type="text" class="form-control" id="owner"> </div> <button onclick="submit()" class="btn btn-primary">Submit</button> <button onclick="getInfo()" class="btn btn-primary">Get Info</button> <br><br> <div class="alert alert-info" role="alert" id="message"> You can either submit file's details and get information about it. </div> </div> </div> </div> <div class="row"> <div class="col-md-6 offset-md-3 text-xs-center"> <br> <h3>Live Transactions Mined</h3> <br> <ol id="events_list">No Transaction Found</ol> </div> </div> </div> <script type="text/javascript" src="/js/sha1.min.js"></script> <script type="text/javascript" src="/js/jquery.min.js"></script> <script type="text/javascript" src="/js/socket.io.min.js"></script> <script type="text/javascript" src="/js/main.js"></script> </body> </html>

출처 https://opentutorials.org/course/2869/20681

Page 21: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

web3.js 활용

출처 https://opentutorials.org/course/2869/20681

Page 22: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

개발예제

Web3.js 로 ropsten smart contract 연계 Dapp 개발예제

출처 http://www.chaintalk.io/archive/lecture?sca=%EB%82%98%EB%8F%84+dApp+%EA%B0%9C%EB%B0%9C

pragma solidity ^0.4.0;contract SimpleStorage {

uint storedData;function set(uint x){

storedData = x;}function get() constant returns

(uint){

return storedData;}

}

Page 23: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

개발예제

Web3.js 로 ropsten smart contract 연계 Dapp 개발예제

Page 24: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

개발예제

Web3.js 로 ropsten smart contract 연계 Dapp 개발예제

Page 25: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

개발예제

Web3.js 로 ropsten smart contract 연계 Dapp 개발예제

Page 26: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

개발예제

Web3.js 로 ropsten smart contract 연계 Dapp 개발예제

Page 27: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를
Page 28: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

지금까지살펴본중요내용을토대로우리가실습시주의해야할사항은무엇일까요?

Summary

Page 29: New 블록체인응용과실습 · 2019. 8. 21. · 1. 솔리디티의이벤트, 라이브러리, 임포트 2. Web3.js 와DApp 개발 블록체인플랫폼에서스마트계약서를

교수님의견

Summary

솔리디티 문법, 형변환, 동적배열• 명시적 형변환과 암묵적 형변환

• 정적배열과 동적배열

이벤트, 라이브러리, 임포트Web3.js 활용한 DApp 개발 방법

지금까지살펴본중요내용을토대로우리가실습시주의해야할사항은무엇일까요?


Recommended