Klaytn 101 #2 Blockchain Application(BApp) 동작원리와 구성요소 이해하기
1. BApp 개요: BApp의 동작원리와 BApp을 구성하는 요소들에 대해 설명
2. Count BApp: Klaytn Docs에 소개된 Count BApp 튜토리얼을 step-by-step으로 따라가며, web 기반 BApp 구현방법에 대해 설명
* 54 페이지 두번째 줄의 함수명 callPlus은 callMius로 변경해 주세요.
블록체인 제품 생태계를 구성해보자
Ground X가 블록체인을 통해 세상에 기여하고 싶은 메세지가 있습니다. 그것을 이뤄내기 위해 어떤 제품들을 기획했고, 1년반동안 제품을 만들면서 PM/Designer/Data scientist/Engineer 들과 어떻게 협업을 하였는지 공유하고자 합니다. 그리고 메인넷을 출시한 다음에 어떤 제품로드맵과 방향을 가지고 있는지 공유할 예정입니다.
Klaytn API Service
Klaytn 플랫폼에서 BApp을 개발하기 위해서는 서비스 개발 회사들이 직접 Klaytn Node를 운영하는 것을 요구하게 됩니다. 이는 서비스 본질에 집중하고 싶은 개발사의 목적과 부합하지 않고 다소 전문적인 인력/기술이 필요하다는 문제가 발생할 수 있습니다. 이러한 문제점을 해결하기 위해 Ground X가 개발중인 Klaytn API Service에 대해 소개합니다.
Klaytn 플랫폼 및 SDK 소개
Ground X가 주도하여 개발한 Public Blockchain 플랫폼인 Klaytn의 아키텍처와 SDK에 대해 소개합니다. Klaytn은 엔터프라이즈와 서비스를 지향하는 블록체인 플랫폼으로 1초의 블록 생성 및 확정 시간과 4000 TPS의 성능을 달성한 고성능의 블록체인 플랫폼입니다. 본 발표에서는 Klaytn의 네트워크 구조와 블록 생성 및 검증을 담당하는 Governance Council, 그리고 플랫폼의 전반적인 아키텍처에 대해서 설명합니다. 그리고 Klaytn에서 블록체인 애플리케이션을 개발할 때 사용할 수 있는 SDK인 caver-js와 caver-java에 대해서도 소개합니다. 마지막으로 Klaytn을 개발하고 메인넷 Cypress를 런칭하기까지의 개발 후기에 대해서도 공유할 예정입니다.
Klaytn을 이용한 블록체인 서비스/DX 개발기
블록체인 서비스와 블록체인 개발툴에 대한 개발기에 대해서 이야기합니다. Klaytn을 이용한 암호화폐 기반 커뮤니티인 BLASQ를 개발하면서 글 데이터를 블록체인에 올리기 위해 고려한 설계와 유저가 아닌 서비스 제공자가 트랜잭션 수수료를 낼 수 있도록 만든 대납 구조를 설명하고 Klaytn의 핵심 기능인 ‘대납 트랜잭션’에 대해 설명합니다. 그리고 Klaytn 블록체인 익스플로러인 Klaytnscope의 아키텍처와 4000TPS의 부하에서도 실시간성을 최대한 보장하기 위한 노력과 경험을 공유합니다.
Klaytn 성능 향상 대장정 - 1000만 account 극복기
블록체인은 네트워크 상에서 상태가 합의를 이루고 복제되어야하는 제한 조건 때문에 전통적인 데이터베이스에 비해 떨어지는 성능을 보인다. 또한 Klaytn에서는 각 어카운트의 정보를 저장하기 위해 Merkle Partricia Trie를 사용하는데, Merkle Partricia Trie의 성능은 전체 어카운트 개수가 늘어날수록 떨어진다. 1000만개 이상의 어카운트가 존재할 때에도 성능 저하를 최소화 하기 위해 1) 일반적인 성능 향상과 더불어 2) 어카운트 개수 증가에 의한 성능 저하를 최소화하는 작업을 동시에 진행하였다. 본 세션에서는 블록체인의 성능 병목 구간에 대한 설명과 더불어 1) Consensus Layer, 2) In-memory Layer, 3) Persistent Layer 의 각 레이어 별로 적용한 최적화 기법들, 그리고 그 사이에 마주친 문제들에 대해 공유하는 시간을 갖는다.
TXGX 2019_Andy_Klaytn's Network Architecture and ConsensusKlaytn
Klaytn’s Network Architecture and Consensus
Klaytn에서는 기존 플랫폼들이 가지고 있던 성능에 대한 문제들을 해결하기 위해 네트워크의 구조를 계층화하여 재설계했습니다. 또한 서비스 운영에 필수적인 Finality를 확보하기 위해 PBFT 기반의 컨센서스 알고리즘을 사용하고 있습니다. 이 발표에서는 CN / PN / EN 으로 구성되는 네트워크 구성과 Klaytn의 컨센서스 알고리즘의 특징을 설명합니다.
Klaytn 101 #3 Fee Delegation(대납) 구조와 대납 기능을 사용하는 Android BApp 구현해보기
1. 대납 구조 이해: Klaytn이 지원하는 Fee Delegation이 어떻게 동작하는지 설명
2. 대납을 사용하는 Android BApp: 대납 기능을 사용하는 Android BApp의 구현을 설명(mobile native 구현방법 소개(caver-java), Count BApp의 Android 구현, Fee Delegation example에서 보여준 node.js 서버 구현 등)
Data Layer Architecture & Optimizations
Klaytn에서 스토리지 레이어는 트랜잭션, 블록, 어카운트, 스테이트 등의 모든 데이터를 저장하는 영역으로 구조와 구현이 성능, 확장성, 비용 등에 큰 영향을 미치게 됩니다. 이 발표에서는 Klaytn의 스토리지 영역의 디자인에 대한 전반적인 소개와 더불어 메인넷 버전 개발과정에서 발견된 문제 및 이를 해결하기 위해 적용된 최적화 기법들을 소개합니다. 또한 늘어나기만 하는 블록체인 데이터를 비롯한 Klaytn이 현재 당면한 문제들을 소개하고 이를 해결할 수 있는 청사진도 소개합니다.
블록체인 제품 생태계를 구성해보자
Ground X가 블록체인을 통해 세상에 기여하고 싶은 메세지가 있습니다. 그것을 이뤄내기 위해 어떤 제품들을 기획했고, 1년반동안 제품을 만들면서 PM/Designer/Data scientist/Engineer 들과 어떻게 협업을 하였는지 공유하고자 합니다. 그리고 메인넷을 출시한 다음에 어떤 제품로드맵과 방향을 가지고 있는지 공유할 예정입니다.
Klaytn API Service
Klaytn 플랫폼에서 BApp을 개발하기 위해서는 서비스 개발 회사들이 직접 Klaytn Node를 운영하는 것을 요구하게 됩니다. 이는 서비스 본질에 집중하고 싶은 개발사의 목적과 부합하지 않고 다소 전문적인 인력/기술이 필요하다는 문제가 발생할 수 있습니다. 이러한 문제점을 해결하기 위해 Ground X가 개발중인 Klaytn API Service에 대해 소개합니다.
Klaytn 플랫폼 및 SDK 소개
Ground X가 주도하여 개발한 Public Blockchain 플랫폼인 Klaytn의 아키텍처와 SDK에 대해 소개합니다. Klaytn은 엔터프라이즈와 서비스를 지향하는 블록체인 플랫폼으로 1초의 블록 생성 및 확정 시간과 4000 TPS의 성능을 달성한 고성능의 블록체인 플랫폼입니다. 본 발표에서는 Klaytn의 네트워크 구조와 블록 생성 및 검증을 담당하는 Governance Council, 그리고 플랫폼의 전반적인 아키텍처에 대해서 설명합니다. 그리고 Klaytn에서 블록체인 애플리케이션을 개발할 때 사용할 수 있는 SDK인 caver-js와 caver-java에 대해서도 소개합니다. 마지막으로 Klaytn을 개발하고 메인넷 Cypress를 런칭하기까지의 개발 후기에 대해서도 공유할 예정입니다.
Klaytn을 이용한 블록체인 서비스/DX 개발기
블록체인 서비스와 블록체인 개발툴에 대한 개발기에 대해서 이야기합니다. Klaytn을 이용한 암호화폐 기반 커뮤니티인 BLASQ를 개발하면서 글 데이터를 블록체인에 올리기 위해 고려한 설계와 유저가 아닌 서비스 제공자가 트랜잭션 수수료를 낼 수 있도록 만든 대납 구조를 설명하고 Klaytn의 핵심 기능인 ‘대납 트랜잭션’에 대해 설명합니다. 그리고 Klaytn 블록체인 익스플로러인 Klaytnscope의 아키텍처와 4000TPS의 부하에서도 실시간성을 최대한 보장하기 위한 노력과 경험을 공유합니다.
Klaytn 성능 향상 대장정 - 1000만 account 극복기
블록체인은 네트워크 상에서 상태가 합의를 이루고 복제되어야하는 제한 조건 때문에 전통적인 데이터베이스에 비해 떨어지는 성능을 보인다. 또한 Klaytn에서는 각 어카운트의 정보를 저장하기 위해 Merkle Partricia Trie를 사용하는데, Merkle Partricia Trie의 성능은 전체 어카운트 개수가 늘어날수록 떨어진다. 1000만개 이상의 어카운트가 존재할 때에도 성능 저하를 최소화 하기 위해 1) 일반적인 성능 향상과 더불어 2) 어카운트 개수 증가에 의한 성능 저하를 최소화하는 작업을 동시에 진행하였다. 본 세션에서는 블록체인의 성능 병목 구간에 대한 설명과 더불어 1) Consensus Layer, 2) In-memory Layer, 3) Persistent Layer 의 각 레이어 별로 적용한 최적화 기법들, 그리고 그 사이에 마주친 문제들에 대해 공유하는 시간을 갖는다.
TXGX 2019_Andy_Klaytn's Network Architecture and ConsensusKlaytn
Klaytn’s Network Architecture and Consensus
Klaytn에서는 기존 플랫폼들이 가지고 있던 성능에 대한 문제들을 해결하기 위해 네트워크의 구조를 계층화하여 재설계했습니다. 또한 서비스 운영에 필수적인 Finality를 확보하기 위해 PBFT 기반의 컨센서스 알고리즘을 사용하고 있습니다. 이 발표에서는 CN / PN / EN 으로 구성되는 네트워크 구성과 Klaytn의 컨센서스 알고리즘의 특징을 설명합니다.
Klaytn 101 #3 Fee Delegation(대납) 구조와 대납 기능을 사용하는 Android BApp 구현해보기
1. 대납 구조 이해: Klaytn이 지원하는 Fee Delegation이 어떻게 동작하는지 설명
2. 대납을 사용하는 Android BApp: 대납 기능을 사용하는 Android BApp의 구현을 설명(mobile native 구현방법 소개(caver-java), Count BApp의 Android 구현, Fee Delegation example에서 보여준 node.js 서버 구현 등)
Data Layer Architecture & Optimizations
Klaytn에서 스토리지 레이어는 트랜잭션, 블록, 어카운트, 스테이트 등의 모든 데이터를 저장하는 영역으로 구조와 구현이 성능, 확장성, 비용 등에 큰 영향을 미치게 됩니다. 이 발표에서는 Klaytn의 스토리지 영역의 디자인에 대한 전반적인 소개와 더불어 메인넷 버전 개발과정에서 발견된 문제 및 이를 해결하기 위해 적용된 최적화 기법들을 소개합니다. 또한 늘어나기만 하는 블록체인 데이터를 비롯한 Klaytn이 현재 당면한 문제들을 소개하고 이를 해결할 수 있는 청사진도 소개합니다.
오늘날 빅데이터 분석, 처리부터 모든 개발 플랫폼을 연결해주는 카프카의 등장 배경과 의미를 살펴보고, 실무에서 적용한 경험을 바탕으로 적절한 카프카 사용 사례를 정비해 보겠습니다. 또한 카프카의 내부 구동 방식에 대하여 소개하는 시간을 갖겠습니다. 마지막으로 실무에서 카프카를 운영하면서 경험한 구성, 운영 및 모니터링 등 경험을 공유하는 시간입니다. (by. 카카오 고승범)
* 본 세션은 “입문자/초급자/중급자” 분들께 두루 적합한 세션입니다.
Block chain architecture and hyperledger fabric overview병준 김
블록체인에 대한 기본 개념과 블록 체인 기술 구성에 대해서 알아본다. 기술 구성에는 P2P네트워크, Smart Contract, 전자서명과 해시, 합의 알고리즘이 있다. 각 구성 요소들이 하는 역할과 목적, 어떻게 작동하는 지에 대해서 알아본다. 그리고 Hyperledger Fabric의 개요에 대해서 살펴본다.
This presentation start from basic concept such as container and container orchestration
And then go through Kubernetes internal especially Master Node components and Work Node components and show and explain core mechanism with codes.
오늘날 빅데이터 분석, 처리부터 모든 개발 플랫폼을 연결해주는 카프카의 등장 배경과 의미를 살펴보고, 실무에서 적용한 경험을 바탕으로 적절한 카프카 사용 사례를 정비해 보겠습니다. 또한 카프카의 내부 구동 방식에 대하여 소개하는 시간을 갖겠습니다. 마지막으로 실무에서 카프카를 운영하면서 경험한 구성, 운영 및 모니터링 등 경험을 공유하는 시간입니다. (by. 카카오 고승범)
* 본 세션은 “입문자/초급자/중급자” 분들께 두루 적합한 세션입니다.
Block chain architecture and hyperledger fabric overview병준 김
블록체인에 대한 기본 개념과 블록 체인 기술 구성에 대해서 알아본다. 기술 구성에는 P2P네트워크, Smart Contract, 전자서명과 해시, 합의 알고리즘이 있다. 각 구성 요소들이 하는 역할과 목적, 어떻게 작동하는 지에 대해서 알아본다. 그리고 Hyperledger Fabric의 개요에 대해서 살펴본다.
This presentation start from basic concept such as container and container orchestration
And then go through Kubernetes internal especially Master Node components and Work Node components and show and explain core mechanism with codes.
본 장표는 인프콘 2022 / 코틀린 멀티플랫폼, 미지와의 조우 세션에 대한 강연 자료입니다.
코틀린은 멀티플랫폼을 지원하는 언어로 Server-side와 Android뿐만이 아니라 JavaScript 엔진이 있는 브라우저나 Node.js도 지원하며, Native 등 다양한 플랫폼에서 쓸 수 있습니다. 이를 이용해 코틀린 코드를 공유하는 단일 코드베이스로 모바일부터 웹과 데스크톱, 서버에 이르기까지 다중 플랫폼 애플리케이션을 작성할 수 있습니다.
본 핸즈온 세션을 통해 코틀린 멀티플랫폼과 함께 리액트, 스프링부트로 웹 애플리케이션의 프론트엔드부터 백엔드까지 직접 개발하며 친해져 보는 시간을 가져보세요. 참가자는 코틀린 멀티플랫폼 프로젝트를 이해하고, 더 나아가 프론트엔드와 백엔드 간의 공유 로직 작성, Kotlin/JS 기반 리액트 및 스프링 웹 프로그래밍을 경험할 수 있습니다.
https://github.com/arawn/building-fullstack-webapp-with-kotlin-multiplatform
https://infcon.day/speaker/박용권-김지헌-코틀린-멀티플랫폼/
.NET을 처음 접한 프로그래머가 P2P 네트워킹 기능을 구현하면서 마주쳤던 문제와 해결 방법등 개발 경험 전반에 걸쳐서 이야기 해 보려 합니다. 또한 C# 8.0에 추가되는 비동기 스트림을 미리 써볼 수 있는 AsyncEnumerable과 비동기 잠금(lock) 등의 편리한 기능을 갖춘 AsyncEx등의 라이브러리들도 소개합니다.
오픈스택 커뮤니티 - 제1회 공개 SW 커뮤니티데이 (2017년 9월 정기 세미나 대체)
- 일시: 9월 22일 금요일
- 발표자: 장태희 (운영진, 스터디 매니저)
- 행사 정보: https://www.facebook.com/groups/openstack.kr/permalink/1826976907316452/
Meetup tools for-cloud_native_apps_meetup20180510-vsminseok kim
마이크로서비스로 시스템을 구성하면 서비스간에 연관관계가 줄어들면서 서비스 릴리즈 속도가 높아지고 유연하게 대처할 수 있지만, 관리포인트가 늘어나게 되어 운영상에 많은 어려움을 마주치게 됩니다. 배포 될 때마다 생성되고 소멸되는 마이크로서비스를 다른 마이크로서비스가 쉽게 참조하게 하고 마이크로서비스들의 설정 정보를 일관되게 관리하는 일은 쉬운일이 아닙니다. 이러한 문제를 해결하기 위해 Spring Cloud 프로젝트와 같은 도구를 비롯하여 Pivotal Cloud Foundry와 같은 클라우드 플랫폼등이 있습니다. 이번 밋업에서는 마이크로서비스를 운영할 때의 어려운점과 도움을 주는 다양한 도구들에 대해 알아보도록 하겠습니다.
CyberConnect2에서는 2013년부터 DirectX11세대용 멀티플랫폼엔진 개발을 시작하였으며, 제작 시 발생하였던 문제점을 DirectX9와의 차이점을 바탕으로 공유하고자 합니다.
이 세션은 DirectX11의 개발이 처음이거나 관심 있으신 분을 대상으로 합니다. Tessellation 이나 OIT와 같은 최신기술은 다루지 않으므로 주의하시기 바랍니다.
Klaytn Blockchain Application(BApp) Development
Klaytn을 접해보지 않은 개발자가 Klaytn에서 BApp(Blockchain Application) 개발시 알아야 할 내용을 설명합니다. 기본적으로 필요한 Developer Experience 툴들을 소개하고 Baobab testnet에서 개발 과정과 Cypress mainnet에 온보딩 하기위한 프로세스를 소개합니다. 또한 Klaytn에서 사용성 개선을 위해 추가된 기능들(role-based key, fee delegation, multisig)이 BApp serivce에서 어떠한 방식으로 활용될 수 있는지에 대해서도 이야기할 예정입니다.
TXGX 2019_Albert_High Availability Architecture of Klaytn Service ChainKlaytn
High Availability Architecture of Klaytn Service Chain
Klaytn의 확장성 솔루션인 Service Chain은 Main Chain과의 연결을 위해서 bridge node를 활용하고 있습니다. 이 bridge node를 통해 체인 간 value transfer 및 anchoring 기능을 지원합니다. 하지만 bridge node는 정해진 노드간 통신이기 때문에 장애가 발생하는 경우 single point of failure가 될 수 있습니다. 이 발표에서는 일부 bride node에 장애가 발생하더라도 무중단 서비스가 가능한 아키텍처의 설계 및 구현에 대해서 소개합니다.
TXGX 2019_Ethan_Horizontal Scaling through Service Chain in KlaytnKlaytn
Horizontal Scaling through Service Chain in Klaytn
Klaytn의 확장성 솔루션인 Service Chain에 대해서 소개합니다. 어떠한 블록체인이라도 Mainnet 자체의 성능적인 한계가 존재하며 이를 확장하기 위한 다양한 시도가 이뤄지고 있습니다. Klaytn에서는 블록체인을 이용한 서비스를 하고 싶지만 Mainnet을 직접 사용하지 못하는 Service Provider를 위해 자체 블록체인인 서비스체인을 원하는 구성으로 운용하면서 Anchroing/Value Transfer 기능을 통해 서비스 구축 할 수 있도록 서비스체인을 개발했습니다. 이 발표에서는 서비스체인의 개발 동기, 기능, 향후 계획 등을 다룰 예정입니다.
TXGX 2019_Colin_Account and Transaction Model in KlaytnKlaytn
Account and Transaction Model in Klaytn
Klaytn에서는 기존의 블록체인 플랫폼들이 가지고 있던 성능/사용성에 관련된 다양한 문제들을 해결하고 있습니다. 그 중 사용성 개선을 위해 다양한 기능(변경 가능한 개인 키, 멀티시그 지원, role-based 키 지원, account/transaction type지원, 트랜잭션 수수료 대납)을 추가하였고, 이 기능추가를 위해 Account/Transaction Model을 재설계했습니다. 이 발표에서는 기존의 블록체인 플랫폼들이 가지고 있는 사용성의 문제는 무엇이었으며, Klaytn에서 그것을 개선하기 위해 어떻게 Account/Transaction Model을 재설계하였는지 소개합니다.
TXGX 2019_Sam_Challenges for Blockchain Mass AdoptionKlaytn
Challenges for Blockchain Mass Adoption
블록체인은 세상에 큰 변화를 이끌 새로운 기술로써 각광받고 있지만, 아직 블록체인이 대중화되기까지는 시간이 더 걸릴 것으로 보입니다. 이 발표에서는 블록체인 대중화에 있어 우리가 마주하고 있는 다양한 어려움들(challenges)을 기술적인 측면과 비기술적인 측면으로 나누어 얘기해봅니다. 그리고 Ground X와 Klaytn이 블록체인 대중화를 위한 문제들을 해결하고자 어떠한 노력들을 하고 있는지도 소개합니다.
7. Blockchain Application (BApp)
● 블록체인 어플리케이션(BApp)은 블록체인을 사용하는 어플리케이션
○ 기존의 기술로 풀기 어려운 문제들을 블록체인의 특성을 활용하여 풀어내는 것이 목적
● 불변성과 투명성이 대표적인 블록체인의 특성
○ 한번 기록된 정보는 변경할 수 없으며
○ 정해진 규칙(e.g., 블록체인 프로토콜, 컨트랙트에 구현된 로직)에 따라 상태를 변경
○ 기록의 내역이 블록에 공개되어 있으므로 누구든지 정보의 진실여부를 확인 가능
7
8. BApp의 동작원리
● 쓰기 (Write)
○ 블록체인에 데이터를 쓰는 모든 행위는 트랜잭션(TX)으로 표현
○ e.g., 어카운트 간 KLAY의 전송
○ e.g., 스마트 컨트랙트 배포
○ e.g., 스마트 컨트랙트의 상태를 변경하는 함수를 호출
● 읽기 (Read)
○ 누구든지 블록 정보를 가지고 있다면 쓰여진 데이터를 확인 가능
○ e.g., TX 확인
○ e.g., 스마트 컨트랙트 상태 확인
8
10. BApp 개발 형태
1. Fully decentralized
○ 사용자(클라이언트)가 직접 블록체인과 통신
2. Semi-decentralized with (centralized) proxy
○ 클라이언트가 블록체인과 통신하기 위해 중개 서버와 통신
○ 블록체인 기반으로 만들어진 서비스가 있고 그 서비스를 사용자들이 사용하는 형태
○ 클라이언트 ⇔ 중개서버 ⇔ 블록체인
10
11. BApp 개발 형태: Fully Decentralized
● 장점:
○ 높은 투명성, 신뢰형성에 필요한 추가 비용 없음
○ 사용자의 익명성 보장 가능
○ (설치형 BApp의 경우) 관리 비용 낮음
● 단점:
○ 사용자 책임 증가, 어려운 UX
○ 로직 변경 어려움
○ 사용자가 블록체인에 상시 접속할 필요 및 블록을 복제할 필요 있음
11
12. BApp 개발 형태: Semi-Decentralized with Proxy
● 장점:
○ (기존의 서비스들과 동일한) 높은 수준의 UX
○ 사용자가 블록체인과 직접 통신할 필요 없음
○ 로직 변경 비교적 쉬움
● 단점:
○ 신뢰비용 발생
○ 일부 중앙화 ⇒ 서비스가 Single Point of Failure (SPoF)가 됨
○ 관리 비용 높음
12
14. BApp 개발 구분
● 프론트엔드(Frontend)
○ 사용자가 직접 사용하는 프로그램 (e.g., mobile app, web page/app)
○ 키관리, TX 생성, 서명, 전송 등을 프론트엔드에서 처리
● 백엔드(Backend)
○ 사용자에 눈에 보이지 않는 상시 동작하는 서비스
○ 프론트엔드가 사용자 요청을 전달하면 백엔드가 처리하는 구조
○ 블록체인 동기화 등 컴퓨팅 리소스가 많이 필요한 일을 처리하는데 적합
○ 블록체인 동기화, 블록 파싱(parsing), TX 전달, 가스비 대납 등을 백엔드에서 처리
14
15. 개발 형태 별 BApp 개발 조합
● Fully decentralized = Frontend + Blockchain
○ e.g., Web/Android/Windows + Klaytn
● Semi-decentralized = Frontend + Backend + Blockchain
○ e.g., Web + Java Server on AWS + Klaytn
○ e.g., Android + Node.js Server on Azure + Klaytn
15
16. 프론트엔드 개발
● BApp이 실행되는 환경에 따라 개발방법이 달라짐
○ 실행환경: Web, Mobile (Android, iOS), Native (Windows, Linux, macOS)
○ 어느 환경에서 개발하느냐에 따라 개발 언어와 UI/UX 디자인, 사용 SDK가 달라짐
○ Klaytn은 Javascript, Java (Android, Native) SDK를 제공
● 프론트엔드 개발에 영향을 끼치는 실행환경 중 하나가 지갑
○ 지갑의 존재유무, 지갑의 선택에 따라 개발방법이 변경될 수 있음
○ 특정 지갑을 사용할 경우 해당 지갑이 제공하는 라이브러리를 사용
16
17. 지갑 (Wallet)
● TX를 서명하려면 키가 필요
○ 키 → 어카운트; 서로 다른 키는 다른 어카운트에 매핑
○ 하나의 어카운트로 여러 BApp을 사용하려는 사용자의 니즈가 존재
● 지갑 = 키를 관리하는 프로그램
○ 키를 보관하고 BApp이 요청할 때마다 보관 중인 키로 TX를 서명
○ 여러 유형의 지갑이 존재
○ e.g., 브라우저 플러그인, Dapp 브라우저 내장 지갑, 클라우드 지갑, 디바이스 지갑
17
18. 지갑을 고려한 BApp 개발
● 어떤 지갑을 사용하느냐에 따라 사용자 환경이 변화
○ 어떤 형태로 BApp을 만들 것인지? 웹앱? 모바일 웹? 모바일 네이티브? 데스크탑?
○ BApp에 지갑을 내장할 것인지 아니면 외부 지갑을 사용할 것인지
○ 외부 지갑을 쓸 경우 개발하려는 BApp 형태와 맞는 지갑이 어떤 것인지?
○ e.g., 웹앱의 경우 Metamask를 사용 가능 (Ethereum)
○ e.g., 모바일 웹 또는 모바일 네이티브의 경우 삼성 블록체인 키스토어를 사용 가능 (Klaytn)
BApp의 목적 및 타겟 사용자를 분석하여 어느 형태로 키를 관리할지 결정
18
19. 백엔드
● 블록체인 프로토콜 이외의 정보를 관리할 경우 필요
○ UX 향상 및 서비스 구현을 위해 TX 외 다른 정보가 필요할 경우 백엔드를 운영
● 서비스 제공자가 실행환경을 결정
○ 개발방법 선택이 비교적 자유로운편이나 대부분의 경우 플랫폼 SDK 존재유무에 따라 방향을 결정
19
21. Count BApp
블록체인에 숫자를 기록하는 BApp
● Count BApp 사용자는 다음을 할 수 있어야 합니다.
○ 가장 마지막 블록 높이를 확인
○ 블록체인에 기록된 숫자를 확인
○ 자신의 어카운트 비밀키를 입력하여 어카운트 주소를 확인
○ (자신의 어카운트 비밀키를 사용하여) 숫자를 1 더할 수 있음
○ (자신의 어카운트 비밀키를 사용하여) 숫자를 1 뺄 수 있음
22. Count BApp 화면구성예시
Private Key Enter user key here Set
Address 0xADDRESS_OF_THE_PROVIDED_KEY
Block# #########
#########Count
+
-
Last
Participant
0xADDRESS_OF_THE_LAST_PARTICIPANT
Result https://baobab.scope.klaytn.com/tx/...
23. Count 스마트 컨트랙트 (Count.sol)
pragma solidity ^0.5.6;
contract Count {
uint public count = 0;
address public lastParticipant;
function plus() public {
count++;
lastParticipant = msg.sender;
}
function minus() public {
count--;
lastParticipant = msg.sender;
}
}
24. Count 스마트 컨트랙트 with Comments
pragma solidity ^0.5.6;
contract Count {
uint public count = 0;
address public lastParticipant;
function plus() public {
count++;
lastParticipant = msg.sender;
}
function minus() public {
count--;
lastParticipant = msg.sender;
}
}
숫자를 기록하는 상태를 만듭니다.
마지막에 숫자를 변경한 사람의 주소를
기록하는 상태를 만듭니다.
숫자를 1 증가시키고 변경한 사람의
주소를 기록합니다.
숫자를 1 감소시키고 변경한 사람의
주소를 기록합니다.
25. Count BApp 실행예시
count.sol @ 0xCONTRACT
---
plus()
minus()
---
uint count
address lastParticipant
User A @ 0xADDR1
User B @ 0xADDR2
User C @ 0xADDR2
0xADDR1 → plus() // count = 1
0xADDR2 → count() → 1
0xADDR3 → minus() // count = 0
0xADDR1 → plus() // count = 1
0xADDR1 → count() → 1
26. 개발 스택
다음 소프트웨어 및 라이브러리를 사용하여 Count BApp을 개발합니다
항목 선택
개발 언어 Javascript
소프트웨어 플랫폼 Node.js
사용자 인터페이스 React*
Klaytn SDK caver-js
27. 개발 순서
1. Baobab에서 어카운트 만들기
2. KLAY Faucet에서 테스트 KLAY 받기
3. IDE로 Count.sol 작성, 배포, 테스트 실행하기
4. caver-js + React로 프론트엔드 만들기
28. 1. Baobab 어카운트 생성
● Klaytn Wallet을 사용 -
baobab.wallet.klaytn.com
50. 4-4. Count 1/7
// import statements and ABI
class Count extends React.Component {
constructor() {
super();
// assume .env file contains REACT_APP_CONTRACT_ADDRESS variable
this.countContract = process.env.REACT_APP_CONTRACT_ADDRESS && ABI &&
new caver.klay.Contract(ABI, process.env.REACT_APP_CONTRACT_ADDRESS);
this.state = { count: '', lastParticipant: '', privateKey: '' };
this.wallet = caver.klay.accounts.wallet;
}
// more on next slide
}
export default Count
51. 4-4. Count 2/7
class Count extends React.Component {
// exposed function allowing anyone with the right reference can call this function
setPrivateKey(key) {
this.wallet.clear();
if (key) {
this.wallet.add(key);
}
this.setState({
privateKey: key
});
}
// more on next slide
}
export default Count
52. 4-4. Count 3/7
class Count extends React.Component {
getCount = async () => {
const count = await this.countContract.methods.count().call();
const lastParticipant = await this.countContract.methods.lastParticipant().call();
this.setState({
count,
lastParticipant,
});
}
// more on next slide
}
export default Count