Skip to content

Instantly share code, notes, and snippets.

@Nharu

Nharu/project.md Secret

Last active September 14, 2019 12:27
Show Gist options
  • Save Nharu/1edd8b3bc7df80c16d8e7435d649be9d to your computer and use it in GitHub Desktop.
Save Nharu/1edd8b3bc7df80c16d8e7435d649be9d to your computer and use it in GitHub Desktop.
Klaytn study 3주차

Klaytn Wallet & 계정관리

인프런의 강좌와 같이 실제 계정을 생성해보았습니다. Keystore 파일과 password, 그로인하여 생긴 private key 를 모두 보관하여, 추후 저장된 Keystore 파일과 password 조합, 또는 private key 를 이용하여 baobab klaytn wallet 에서 account 를 아래와 같이 확인할 수 있습니다.

myaccount

위와 같이 account info 에서는 address 와 private key, klaytn wallet key 를 확인할 수 있습니다. Address 는 추후에 설명할 address 의 여러 종류 중 EOA (Externally Owned Account) 의 지갑 주소이고, private key 는 transaction signing 을 할 때 쓰이는 매우 중요한 key 이며, Klaytn Wallet Key 는 private key + type + address 로 이루어진, 계정에 로그인 할 때만 쓰이는 키이다. 참고로 type 에는 항상 0x00 이 들어가야 한다고 되어있다. Klaytn Wallet Key 의 format이 잘 이해가 되지 않을 것 같아 다음과 같이 그려보았다.

klaytnwalletkey

Klaytn Wallet 은 다음과 같이 구성이 되어있다. EOA (Externally Owned Account) / SCA (Smart Contract Account) EOA 는 실제 사람들이 가진 계정이라고 생각하면 되고, type(0x1)과 nonce(transaction 생성 개수), balance(잔액), humanReadable(사람이 읽기 쉬운 address), key(트랜잭션 서명 확인용) 으로 구성되어 있다. SCA 는 smart contract 가 배포되었을 때, 해당 contract 의 address 이고, type(0x2) 및 EOA 와 같은 요소들로 구성이 되어있고, 또한 codeHash(smart contract 의 code 를 hash 한 것), storageRoot(계정의 변수 값들을 보관하는 Merkle Patricia Trie의 root hash), codeFormat(code형식) 이 추가되어 있다.

Klaytn IDE & Smart Contract

Klaytn 의 Smart Contract 는 solidity 로 작성이 된다고 하였고, Klaytn IDE 가 Solidity 를 지원하며 Klaytn 에 배포를 지원해주기 때문에 기존 solidity ide 중 가장 유명한 Remix (Ethereum IDE) 와 구성을 비교해보았다.

idecompare

이전 버전의 Remix 와 거의 같은 UI 로 이루어졌음을 알 수 있다. 기존의 Remix 를 쓰던 사람들이 쓰기에 편하고, 또한 버튼 등의 간격 이 Remix 보다 떨어져 있어 사용하기 좋았다는 생각이다. Klaytn 는 Klay 와 Peb 이라는 화폐단위로 이루어져 있고, 또한 아래의 사이트를 참고하니 계산이 쉬웠다.

pebconverter

Smart Contract 배포

Baobab 에 Visual Studio Code 를 이용하여 Smart Contract를 배포하기 위해서는 다음과 같은 환경을 설치해야 한다.

  1. Node.js 설치
  2. 트러플 프레임워크 설치
  3. 비쥬얼 스튜디오 설치 나머지는 어려운 것이 없었지만, 트러플 프레임 워크에서 이슈가 있어 이부분에 관련해서만 언급하려고 한다. Power shell 에서 npm 을 이용하여 truffle 을 설치하고, 버전을 확인하기 위해 실행해보면 다음과 같은 오류가 떴었다.

truffleerror 해당 오류에 대해서 한참 찾아보다가 power shell 의 보안 정책에 의해 신뢰하는 스크립트로 지정된 것 이외의 스크립트는 실행을 방지해 놓은 것이다. 따라서 다음과 같이 “set-executionpolicy unrestricted“ 명령어를 통하여 해결할 수 있었다.

solve

Smart Contract 프론트엔드를 같이 만들어서 배포하고 싶다면, 가장 편리한 방법은 trufflebox (https://www.trufflesuite.com/boxes) 에서 template을 다운 받으면 된다. Web pack 기준을 이용하여 프로젝트의 폴더의 구성 보면 다음과 같다.

template

“build” 폴더는 contract 배포를 하게 되면 자동으로 생성되는 폴더이고, 각 contract 에 대한 정보가 담긴다. “contracts” 폴더에는 배포하고자 하는 smart contract 코드를 담으면 된다. “migrations” 폴더에는 배포 시 원하는 동작에 대해 정의를 내린 코드를 js 형태로 담을 수 있다. “src” 폴더에는 실제 프론트엔드 코드가 들어가게 된다. 기타 package.json 은 node 의 동작과 관련된 코드가, truffle.js 에는 truffle 명령어가 수행할 동작을 정의한다고 보면 된다. 다음과 같은 방식으로 배포를 할 수 있다.

  1. Smart contract 및 프론트엔드 작성
  2. Deploy 방식 및 truffle.js 설정
  3. “node install” 명령어로 필요한 패키지 설치
  4. “truffle deploy –network [truffle.js 에서 정의한 네트워크 이름]” 명령어로 배포

자체 Smart Contract 작성 실습

Smart Contract 코드 짠 것으로 서로의 코드를 비교해보았다. 대표적인 것으로 투표와 홀짝 게임이 있었다. 투표 코드는 스마트계약 소유자가 열고 닫을 수 있으며 modifier를 잘 활용하여 투표 시작 시점과 끝 시점의 기간 설정과 중복 투표를 잘 방지하였고, 언제든지 투표현황을 볼 수 있게 하였다.

vote

홀짝 게임은 홀짝을 맞추면 넣은 금액의 2배의 클레이를 보상해 주는 코드였다. block number가 짝수면 false, 홀수면 true를 넣어야 맞추는 게임이었고 user 가 한 번에 수많은 트랜잭션을 발생시켜 돈을 왕창 따가는 것을 막고 tx.origin을 사용하여 proxy 스마트 계약을 통해 트랜잭션을 보내서 block number를 알아내 무조건 당첨되게 하는 코드를 막기 위한 방지책을 세웠다.

gamble

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment