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는 위 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?