5. Wallet

Building a basic wallet module

간단한 지갑 모듈을 만들건데 블록체인과는 분리해서 만들고 다음 강좌에서 합치려고 한다.

현재는 지갑의 생성, 추가가 모두 간단하게 이루어지고 그 자체로는 의미가 없다.

지갑에서 public key, private key 의 생성, Address를 만드는 과정 등에 집중해서 살펴보자.

공개키 암호화

  • 앨리스는 개인키와 공개키를 생성하고 공개키를 밥에게 전달해야 한다.

  • 밥은 앨리스의 공개키로 메시지를 암호화 하고 앨리스에게 보낸다.

  • 암호화된 메시지를 받은 앨리스는 자신의 개인키로 메시지를 해독한다.

  • 공개키에서는 개인키를 만들 수 없으므로, 앨리스의 공개키로 암호화된 메시지를 읽을 수 있는 것은 대응되는 개인키를 가진 앨리스뿐이다.

  • ECDSA(Elliptic Curve Digital Signature Algorithm) 타원곡선암호는 비트코인, 이더리움 드에서 거래 시 정당한 소유주만이 자금을 쓸 수 있도록 하는 암호 알고리즘이다.

wallet.go

  • 위의 그림처럼 Private key로부터 Public key를 뽑아내고 그들로부터 Address가 나온다.

address를 만드는 과정
  • address는 위 3개의 그림과 같이 public key부터 많은 과정을 거쳐서 만들어진다.

  • 최종적으로는 version, checksum, public key hash 를 합쳐서 base 58로 인코딩해서 만들어진다.

  • 아래 코드는 지갑의 키페어 생성, 주소 생성 등의 메소드를 구현해놓았다.

wallets.go

  • 지갑을 map의 형태로 badgerDB에 저장한다. key : address, value : Wallet의 주소값

  • 지갑의 생성, 추가, 저장 등의 메소드를 구현했다.

utils.go

  • Address 만들 때 사용되는 Base58 인코딩, 디코딩 함수이다.

Result

  • 간단하게 지갑을 3개 생성하고 지갑들의 모든 주소를 출력하는 예제이다.

Last updated

Was this helpful?