본 발표자료에서는 이더리움 플랫폼의 상세 아키텍쳐와 기반 기술, 그리고 스마트 컨트랙과 이를 기반한 Dapp의 개발 방안에 대해 소개한다. 이더리움은 블록체인 기반 기술하에 암호 화폐의 생성 , 전송 등 라이프사이클 관리외에 스마트 컨트랙을 지원한다. 스마트컨트랙은 서로 모르는 당사자간의 계약을 준수하도록 강제할 수 있는 응용 프로그램이다. 컨트랙 프로그램은 바이트코드로 컴파일된 후 블록체인을 통해 배포되고 , 로컬 로드상에서 실행되는 일종의 에이전트라 볼 수 있다. 이렇게 개바된 스마트컨트랙은 기존 웹 인터페이스를 통해 접근하고 활용할 수 있으며 이렇게 스마트 컨트랙 기반하에 개발된 응용 서비스를 Dapp이라 한다.
본 발표자료에서는 이더리움 플랫폼의 상세 아키텍쳐와 기반 기술, 그리고 스마트 컨트랙과 이를 기반한 Dapp의 개발 방안에 대해 소개한다. 이더리움은 블록체인 기반 기술하에 암호 화폐의 생성 , 전송 등 라이프사이클 관리외에 스마트 컨트랙을 지원한다. 스마트컨트랙은 서로 모르는 당사자간의 계약을 준수하도록 강제할 수 있는 응용 프로그램이다. 컨트랙 프로그램은 바이트코드로 컴파일된 후 블록체인을 통해 배포되고 , 로컬 로드상에서 실행되는 일종의 에이전트라 볼 수 있다. 이렇게 개바된 스마트컨트랙은 기존 웹 인터페이스를 통해 접근하고 활용할 수 있으며 이렇게 스마트 컨트랙 기반하에 개발된 응용 서비스를 Dapp이라 한다.
Blockchain technology is the backbone of the Bitcoin and it can be used in many other disciplines. This presentation will introduce with basics like transaction, hash, crypto scheme.
This presentation is for anyone who wants to know about overall picture of Blockchain technology.
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)Colin Chae
대상
- 이더리움이 어떻게 돌아가는지 알고 싶은 분들
- 이더리움 입출금 개발을 시작하시려는 분들
- Go-ethereum 소스코드 공부하시는 분들
개발스택
- 이더리움 노드 : 설치/운영 수고가 없는 infura.io 사용
- 개발 언어 + 라이브러리 : Go + Geth (as a RPC library)
Blockchain technology is the backbone of the Bitcoin and it can be used in many other disciplines. This presentation will introduce with basics like transaction, hash, crypto scheme.
This presentation is for anyone who wants to know about overall picture of Blockchain technology.
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)Colin Chae
대상
- 이더리움이 어떻게 돌아가는지 알고 싶은 분들
- 이더리움 입출금 개발을 시작하시려는 분들
- Go-ethereum 소스코드 공부하시는 분들
개발스택
- 이더리움 노드 : 설치/운영 수고가 없는 infura.io 사용
- 개발 언어 + 라이브러리 : Go + Geth (as a RPC library)
GStreamer-VAAPI: Hardware-accelerated encoding and decoding on Intel hardware...Igalia
By Víctor M. Jáquez.
Slides at https://github.com/01org/gstreamer-vaapi/tree/master/docs/slides/gstconf2015
GStreamer-VAAPI is a set of GStreamer elements (vaapidecode, vaapipostroc, vaapisink, and several encoders) and libgstvapi, a library that wraps libva under a GObject/GStreamer semantics.
This talk will be about VAAPI and its integration with GStreamer. We will show a general overview of VAAPI architecture, the role of libgstvaapi, and finally, the design of GStreamer elements. Afterwards we will show what is ahead in the development of GStreamer-VAAPI, and the current problems and challenges.
2016 아이펀팩토리 Dev Day 발표 자료
강연 제목 : Docker 로 Linux 없이 Linux 환경에서 개발하기
발표자 : 김진욱 CTO
<2016>
- 일시 : 2016년 9월 28 수요일 12:00~14:20
- 장소 : 넥슨 판교 사옥 지하 1층 교육실
오픈스택 커뮤니티 - 제1회 공개 SW 커뮤니티데이 (2017년 9월 정기 세미나 대체)
- 일시: 9월 22일 금요일
- 발표자: 장태희 (운영진, 스터디 매니저)
- 행사 정보: https://www.facebook.com/groups/openstack.kr/permalink/1826976907316452/
Klaytn API Service
Klaytn 플랫폼에서 BApp을 개발하기 위해서는 서비스 개발 회사들이 직접 Klaytn Node를 운영하는 것을 요구하게 됩니다. 이는 서비스 본질에 집중하고 싶은 개발사의 목적과 부합하지 않고 다소 전문적인 인력/기술이 필요하다는 문제가 발생할 수 있습니다. 이러한 문제점을 해결하기 위해 Ground X가 개발중인 Klaytn API Service에 대해 소개합니다.
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기 (박혜영 & 유다니엘, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Amazon Web Services Korea
AWS 기반 블록체인 (1부) - 블록체인 환경 구성하기
AWS에서 다양한 Blockchain Network를 직접 구축하고 배포하는 전체 과정을 설 AWS Kubernetes 서비스 자세히 살펴보기 명합니다. 이더리움 PoW, PoA, 텐더민트와 같은 다양한 메인넷을 AWS구동하고 Kubernetes와 CloudFormation으로 블록체인을 배포하는 방법을 시연합니다.
오픈 소스 Actor Framework 인 Akka.NET 을 통해 온라인 게임 서버를 어떻게 구현할 수 있는지를 설명합니다. Actor Model 에 대한 기본 이해부터 Scale-out 가능한 게임 서버 구축까지 전반적인 내용에 대해 알 수 있습니다. 설명을 위해 클라이언트는 Unity3D 를 사용할 예정입니다.
Do IoT Yourself! - 사물 간의 연결을 위한 Open APIHyunghun Cho
Do IoT Yourself 세미나의 세 번째 발표 자료 프리뷰입니다.
이번 세미나에서는 지난 세미나에서 개발한 아두이노 기반 온도 센서 정보를 RESTful Web API 형태의 Open API로 개발하는 과정을 다룹니다.
프리뷰 자료이기 때문에 이후 수정, 변경될 가능성이 있으니 양해 바랍니다.
node.js를 처음 접하는 개발자를 위한 스터디 자료입니다.
실습 위주로, 간단한 웹 페이지를 만들어 보는 것을 목표로 하며,
express를 활용하기에 앞서, node.js 기본 API만으로 GET/POST 처리 방식을 알아봅니다.
내용의 깊이가 있지는 않으며, 단지 node.js의 입문을 위한 가벼운 수준으로 내용이 구성되었습니다.
Hidden 서비스 소개 - 티스테이지강연(201061125 )Jay JH Park
필요할 때에 임시직을 섭외해 일을 맡기는 경제 형태를 Gig Economy 라고 한다. 미 대통령 후보인 클린턴의 그의 경제정책 발표에서 이렇게 말했다. "많은 미국인들은 남는 방을 빌려주거나, 웹사이트를 디자인하거나, 자신의 차를 운전함으로써 돈을 더 벌고 있다. Gig Economy라고 불리우는 경제가 활발한 기회와 혁신을 만들어 내고 있다. Uber, Lyft, Thumbtack, Verlocal 등 많은 업체들이 Gig Economy , 개인이 갖고 있는 자산이나 시간, 기술을 자유롭게 공유하고 매매하는 시장을 만들어 가고 있다. 4차 산업 혁명, 100세 시대, 1인 가구, 1인 창업, 주 4일 근무, 인공 지능 등 우리의 주변 환경 변화는 우리의 자아 실현을 위한 욕구를 더욱 강하게 만들고 있고 평생 직장이 아니라 평생 직업을 준비하도록 강요하고 있다. 자아실현을 하며 다르게 살 수 있는 기회. 이러한 것을 가능하게 해주는 플랫폼을 만들고 싶었다. 덕후,오따구,능력자들이 자유롭게 그 재능을 펼치고 다르게 살 수 있는 해주는 플랫폼, Hidden이다. Hidden을 티스테이지에서 소개한 자료.
필요할 때에 임시직을 섭외해 일을 맡기는 경제 형태를 Gig Economy 라고 한다. 미 대통령 후보인 클린턴의 그의 경제정책 발표에서 이렇게 말했다. "많은 미국인들은 남는 방을 빌려주거나, 웹사이트를 디자인하거나, 자신의 차를 운전함으로써 돈을 더 벌고 있다. Gig Economy라고 불리우는 경제가 활발한 기회와 혁신을 만들어 내고 있다. Uber, Lyft, Thumbtack, Verlocal 등 많은 업체들이 Gig Economy , 개인이 갖고 있는 자산이나 시간, 기술을 자유롭게 공유하고 매매하는 시장을 만들어 가고 있다. 4차 산업 혁명, 100세 시대, 1인 가구, 1인 창업, 주 4일 근무, 인공 지능 등 우리의 주변 환경 변화는 우리의 자아 실현을 위한 욕구를 더욱 강하게 만들고 있고 평생 직장이 아니라 평생 직업을 준비하도록 강요하고 있다. 자아실현을 하며 다르게 살 수 있는 기회. 이러한 것을 가능하게 해주는 플랫폼을 만들고 싶었다. 덕후,오따구,능력자들이 자유롭게 그 재능을 펼치고 다르게 살 수 있는 해주는 플랫폼, Hidden이다. Hidden에 대한 소개 자료.
3. 실습 시나리오 및 환경 설명
3
Geth 설치 부터 채굴까지 ~
Alice
Bob
Miner
: Bob 에게 5 이더 송금
: Alice 로부터 5 이더 수금
: 트랜잭션 확인(채굴)
ethereum 연구회
4. Geth & Eth
- 이더리움의 전체 기능을 사용할 수 있는 풀 클라이언트로서 다중 인터페이스 제공
: 커맨드라인 모드 의 부가 명령어로 대화형 자바스크립트 콘솔 과 JSON-RPC 서버
- Geth 커맨드라인 : geth [options] command [--command options] [arguments...]
$ geth --identity "JayChain" --rpc --rpcport "8800" --rpccorsdomain "*" --datadir "/Users/jay/privatechain" --port
"30303" --nodiscover --rpcapi "db,eth,net,web3" --networkid 2017 console
--identity "JayChain" // 내 프라이빗 노드 식별자.
--rpc // RPC 인터페이스 가능하게 함.
--rpcport "8800" // RPC 포트 지정
--rpccorsdomain "*" // 접속가능한 RPC 클라이언트 URL 지정 , 가능한 *(전체 허용) 보다는 URL을 지정하는 게 보안상 좋
음.
--datadir "/Users/jay/privatechain" // 커스텀 디렉토리 지정
--port "30303" // 네트웍 Listening Port 지정
--nodiscover // 같은 제네시스 블록과 네트웍ID에 있는 블록에 연결 방지
--rpcapi "db,eth,net,web3" // RPC에 의해서 접근을 허락할 API
--networkid 2017
console // 출력을 콘솔로 함. 4
이더리움 CLI 클라이언트
5. Geth & Eth
- 대화형 자바스크립트 옵션 ( console , attach , js )
- 이더리움은 자바스크립트 런타임 환경(JSRE)을 대화형 콘솔 또는 비대화형 스크립트 모드로 제공
$ geth console // 콘솔에서 커맨드 라인 모드로 JSRE 사용
$ geth attach [ipc:/some/custom/path | rpc:http://127:0.0.1:8545] // 작동중인 geth 노드의 콘솔에 연결 후 사용
$ geth console 2 >> /dev/null // 화면에 log를 출력하지 않는다.
$ geth js demo.js 2 >> geth.log // 비대화형 모드 , demo.js 파일을실행한다.
- 커맨드라인 모드 : JSON-RPC 서버 옵션
- JSON-RPC는 경량 RPC 프로토콜을 통해 이더리움을 호출하고 그 결과를 JSON 포맷으로 받음.
- 이더리움 RPC 인터페이스를 제공하는 Web3.js 라이브러리를 사용하여 자바 스크립트 응용 프로그램내에서이더리
움 노드 호출
- 기본 JSON-RPC 기본 엔드포인트 : http://localhost:8545
- Geth 구동 : $ geth –rpc –rpcaddr <IP주소 > --rpcport <포트번호>
- Geth 콘솔: >> admin.startRPC(IP주소, 포트번호) 5
이더리움 CLI 클라이언트
6. Geth & Eth
1. 커스템 제네시스 파일 생성 , CustomGenesis.json
{
"config": {
"chainId": 2017,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "200000000",
"gasLimit": "2100000",
"alloc": {
"0x81162835c5164e390c714a6e213e64c6b4f00132": { "balance": "400000000000000000000" },
"0x29d5b5488fe14e36dba76f5d667448bc9e13312d": { "balance": "300000000000000000000" }
}
}
2. 네트워크 ID 지정 ( 메인넷 1번 )
geth --datadir /privatechain init CustomGenesis.json --networkid 2017
6
이더리움 CLI 클라이언트 – 개인 네트워크 구축
7. Geth & Eth
1. 어카운트 생성 - Alice , > personal.newAccount(“Alice”)
2. 어카운트의 목록 조회 , > eth.accounts
3. 마이닝 후 보상을 받을 이더베이스(etherbase)를 지정 - Alice어카운트.
> miner.setEtherbase(personal.listAccounts[0])
> miner.setEtherbase("0x81162835c5164e390c714a6e213e64c6b4f00132")
4. 마이닝 실행, 마이닝 후 리워드 보상은 앞서 지정한 Alice 어카운트로 보내짐
> miner.start()
> miner.start(2) // 마이닝 쓰레드를 2개로 지정
5. 계정 잔액 조회(Wei 단위로 표시되기 때문에 1/1018로 계산 )
> eth.getBalance(eth.accounts[0]) // eth.getBalance(eth.coinbase)
> web3.fromWei(eth.getBalance(eth.coinbase),"ether")
> web3.fromWei(eth.getBalance(eth.coinbase),"shannon")
6. 생성된 블록 수 조회.
> eth.blockNumber 7
Geth CLI 사용 – Alice가 Bob에게 5이더 송금하기.
8. Geth & Eth
7. > personal.newAccount("Bob") // 송금을 위해 Bob 라는 계정을 추가 생성
8. Alice -> Bob 로 이더 송금 (21,000 gas is the minimum for sending a transaction )
> eth.sendTransaction({from: eth.coinbase, to: "0x29d5b5488fe14e36dba76f5d667448bc9e13312d", value:
web3.toWei(5, "ether")})
> web3.eth.sendTransaction({from:'0x81162835c5164e390c714a6e213e64c6b4f00132' ,
to:'0x29d5b5488fe14e36dba76f5d667448bc9e13312d', value:web3.toWei(5,'ether'), gasLimit: 21000,
gasPrice: 20000000000}) //gasLimit: 21000, gasPrice: 20000000000} ->옵션 사항임.
> acct1 = web3.eth.accounts[0]
> acct2 = web3.eth.accounts[1]
> web3.eth.sendTransaction({from: acct1, to: acct2, value: web3.toWei(5, 'ether'), gasLimit: 21000,
gasPrice: 20000000000})
➔ 위의 트렌젝션을 실행하면 Alice 계정에서 돈을 옮겨야 하는 데 LOCK되어 있으니 Unlock 시키라고 함.
8
Geth CLI 사용 – Alice가 Bob에게 5이더 송금하기.
ethereum 연구회
9. Geth & Eth
9. Alice 계정을 UNLOCK을 시킴
> personal.listWallets[0].status // 어카운트의 상태 확인”
> web3.personal.unlockAccount(eth.coinbase) // 어카운트 락 해제
> web3.personal.unlockAccount("0x81162835c5164e390c714a6e213e64c6b4f00132”)
> web3.personal.unlockAccount(eth.coinbase, 'Jay')
> personal.lockAccount(eth.coinbase) // 어카운트 락
➔ 패스워드에는 Alice 라고 계정 이름을 넣으면됨( 대소문자 구별함).
➔ 트렌젝션이 즉시 수행되지 않고 수행 대기 상태가 됨(pending). 마이닝 작업을 수행해야 함.
10. 수행대기중인 트랜잭션 확인
> eth.pendingTransactions // 수행대기중인 미확정 트렌젝션 조회
11. 마이닝 수행.
> miner.start()
> eth.pendingTransactions // 미확정 트렌젝션 재확인
> eth.getBalance(eth.accounts[1]) //다음으로 Bob의 Account에 Ether가 송금됨을 확인할 수 있음
9
Geth CLI 사용 – Alice가 Bob에게 5이더 송금하기.
ethereum 연구회
10. Geth 상태 모니터링 및 시각화
Metrics and Monitoring
ethereum 연구회
11. Metrics
Metrics 시스템의 목표는 로그와 비슷하지만, 코드 사이에 분석(카운터 변수, 공용 인터페이스, API, console hook, 기타 등)을
위한 복잡한 구조를 만들어야 할 필요 없이 임의의 Metric 모음을 추가하기만 하면 되는 것이다. 대신, 필요할 때 마다 Metric을
업데이트 해 주어야 하고, 자동으로 수집되어야 한다, API를 통해 드러나고, 질의가 가능해야 하며, 분석을 위해 시각화 할 수
있어야 한다.
11
Geth Metrics 시스템
•Meters : 물리적인 계량기(전기, 수도 등)와 비슷하게, 통과하는 무언가의 양과 속도를 측정
할 수 있다. Meter에는 특정 측정 단위(바이트, 블록, malloc 등)가 없으며, 임의의 이벤트만
센다 .
•Timers : 이벤트의 발생이 측정 될 뿐만 아니라, 기간도 수집되는 Meter의 확장. Meter와
마찬가지로 Timer도 임의의 이벤트를 측정 할 수 있지만 각각의 시간은 개별적으로
할당해야 한다.
Metrics 종류
Metrics : Geth 의 로깅 시스템
ethereum 연구회
12. Geth 모니터링
var (
headerInMeter =
metrics.NewMeter("eth/downloader/headers/in")
headerReqTimer =
metrics.NewTimer("eth/downloader/headers/req")
headerDropMeter =
metrics.NewMeter("eth/downloader/headers/drop")
headerTimeoutMeter =
metrics.NewMeter("eth/downloader/headers/timeout")
bodyInMeter = metrics.NewMeter("eth/downloader/bodies/in")
bodyReqTimer =
metrics.NewTimer("eth/downloader/bodies/req")
12
metrics.go
meter := metrics.NewMeter("system/memory/allocs")
timer := metrics.NewTimer("chain/inserts")
meter.Mark(n) // Record the occurrence of `n` events
timer.Update(duration) // Record an event that took `duration`
timer.UpdateSince(time) // Record an event that started at `time`
timer.Time(function) // Measure and record the execution of `function`
case packet := <-d.headerCh:
// Make sure the active peer is giving us the skeleton
headers
if packet.PeerId() != p.id {
log.Debug("Received skeleton from incorrect
peer", "peer", packet.PeerId())
break
}
headerReqTimer.UpdateSince(request)
timeout.Stop()