본문 바로가기
프로그래밍/Block Chain

[Block Chain] 그라운드X 클레이튼 강의 정리 3

by YuminK 2023. 11. 4.

21. 웹 프로그래밍 1 ~ 2 (javascript)
자바스크립트는 웹 페이지를 동적으로 제어하기 위해서 고안된 언어이다.

SPA 개념이 적용되어 페이지를 바꾸지 않고 현재 페이지 내에서 수정하는 패러다임
web2.0과 함께 활용도가 많아졌다. 


22. 응용 사례
비즈니스, 정산, 교환의 매개체, 자산의 역할

23. 공급망 관리
현대 사회에서는 공급망 관리가 필수적, 재료를 어디서 가져올지, 어디에서 가공할지 등등
월마트 Food Trust chain
이런 정보들을 블록체인으로 기록하고 검증.

24. 해외 송금/정산
중앙화된 시스템을 거쳐 갈 수 밖에 없음. 수수료, 즉시성 떨어짐
은행권에서 블록체인을 적용하여 처리

25. 지역 화폐
기업이 시스템적으로 돈을 아낄 수 있다면? 
이걸하면 얼마를 아끼고? 보다는 가심비, 가성비

실물화폐에서 전자화폐로 변화하는 사회
앱 결제 사용률 증가, 신용카드 사용 증가 

OO페이, 특정 지역을 활성화시키는 형태

블록체인을 실행활에 쓰기 어려운 이유: 가치가 변하기 때문이다. 
블록체인으로 변경했을 때 가능한지, 문제가 없는지. (현재는 지역화폐 정도는 문제 없이 쓰이는 상태)

26. NFT
Non-Fungible Token 
NFT를 사용하여 중앙화된 관리없이 각각이 유일한 한정 수량 상품을 개발
상품권, 증명서, 바우처, 수량이 제한되어 있는 게임 아이템 제작
=> 게임 회사들이 굉장히 관심이 많다. 

크립토 키티
블록체인을 빼고 게임성을 살리는 방식으로 포커싱

27. 컨트랙트 구조
컨트랙트는 한번 배포하고 수정이 안 된다.
그래서 완전히 새로 만들고 처리되는 로직을 변경하는 식으로 간다.

state variable: 상태 변수
external: 외부
public: 어디든
private: 개인
internal: 내부(protected와 유사)

payable: transfer, send 등의 처리 가능 여부
view: readonly
pure: 아예 접근 불가

modifier: 실행 조건
event: EVM로깅을 활용한 시스템, 클라이언트에서 이벤트 처리가 가능하게 한다.

자료형
address: 어카운트 주소를 표현
address payable: 명시적으로 분리하여 실수할 여지를 없앰

storage: stable variables, 레퍼런스로 받고 싶은 경우에 사용
memory: 휘발성 데이터, 값 자체를 복사하고 싶은 경우에 사용

array: storage로 선언한 array는 크기가 변하고 memory의 경우 크기가 변하지 않는다.
uint[5] arr;
 
push, length, delete

bytesN, bytes/string, byte[]
가능하면 bytes를 사용, byte[]는 배열 아이템간 31바이트 패딩이 추가된다.
bytesN은 길이가 정해진 경우에 선호

mapping: 해시맵

빌트인 값과 함수
blockhash(uint blockNumber) returns (bytes32): 블록해시 
block.number (uint): 현재 블록 번호
block.timestamp (uint): 현재 블록 타임스탬프
gasleft() returns (uint256): 남은 가스량
다른 컨트랙트 함수를 쓸 때 가스량 체크를 할 때가 있음


msg.sender (address payable): 현재 함수 실행 주체의 주소
msg.value (uint): 메시지와 전달된 klay의 양
not (uint): block.timestamp와 동일
tx.origin: 트랜잭션의 주체

require(bool condition): condition이 false인 경우 변경한 내역을 모두 이전 상태로 되돌림(외부 변수 검증에 사용)
require(bool condition, string memory message): 추가 메시지 전달 
keccak256(bytes memory) returns (bytes32): 주어진 값으로 Keccak-256 해시 생성, 가스 사용량이 커서 외부에서 변환후에 값을 가져오는 게 더 싸다.

sha256(bytes memory) returns (bytes32): 주어진 값으로 sha256 해시를 생성한다.

erecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) returns (address):
서명 (v, r, s)으로부터 어카운트 주소를 도출(서명 -> 공개키 -> 주소)

fallback 함수
컨트랙트는 기본적으로 돈을 못 받는다. fallback을 payable로 만들면 받을 수 있다.
function() external payable {}

28. 블록체인 UX의 문제
성능
1.한 블록이 담을 수 있는 트랜잭션 개수의 제한
2. 주기적인 블록 합의로 인해 발생하는 지연
클레이튼: tps 4000, 1초 블록 생성 주기

비용
1. 합의에 참여하기 위한 비용
2. 블록을 유지하기 위한 비용
클레이튼: 대기업 참여, KAS

불편함
1. 사용자가 가스비를 내야 하는 불편함
2. 사용자가 직접 키를 관리해야 하는 불편함
클레이튼: 가스비 대납 기능 구현, 키 관리 쳬계 구현

사용자가 어떻게 느끼는지, 쾌적하게 느끼는지 같은 부분들..

29. 가스비 개선
저장하는 비용이 더 많이 나간다.

문제점1
유저의 입장에서는 왜 내가 돈을 내는건지 이해X 
작은 금액이라도 민감하게 반응할 수 있다.

문제점2
내가 쓰는 코인은 OO인데 왜 수수료는 클레이로?
구매하는 과정이 복잡하다.

수수료를 대신 낼 수 있다면 UX를 개선할 수 있을텐데... 그거 내주고 유저 유입이 충분하다면 괜찮다.
클레이튼의 경우 수수료를 대납해주는 형태로 되어 있다.

장점: UX 향상, 불필요한 토큰 거래 최소화, 사용자 층 확대, 트랜잭션 규모 확대
단점: 플랫폼 성능 저하(여러 서명 검토), 서비스 개발 복잡도 증가, 서비스 관리 비용 증가

30. 키 관리 개선
키관리의 어려움: 잃어버릴 경우 복구 불가능, 분실/해킹의 위험, 외우기 어려움
서명을 다른 사람에게 위임하면 어떨까? 

Key Management System(KMS)
1. 키를 클라우드 서비스가 관리하는 아이디어
KMS는 키를 안전하게 보관하고 사용자는 KMS에 트랜잭션을 전송하여 서명을 요청
KMS는 사용자에게 서명된 트랜잭션을 전달

2. 키를 분실할 위험을 방지
키는 이중으로 암호화되어 보관
복호화된 키는 KMS도 열람할 수 없는 장치를 구현

사용자가 비밀번호 등의 정보를 보내서 KMS에 요청을 보내면 그쪽에서 검증과정을 거치고
서명한 이후에 트랜잭션 정보를 전달

장점: UX 향상, 키 분실/해킹 위험 최소화, Seamless한 One Key
단점: 키 관리 주체가 중앙화, 키 관리 비용 발생, 키 분실 또는 훼손시 책임 발생

댓글