packagewalletimport ("log""github.com/mr-tron/base58")// 0 O l I + /// Base58 은 64에서 헷갈리는 6개의 단어를 빼고 58개로 이루어진 인코딩 기법이다.// Wallet 주소를 헷갈려서 잘못 입력하면 원하는 곳으로 코인이나 데이터를 이동시키지 못 한다.// Base58Encode : Base58로 인코딩funcBase58Encode(input []byte) []byte { encode := base58.Encode(input)return []byte(encode)}// Base58Decode : Base58로 디코딩funcBase58Decode(input []byte) []byte { decode, err := base58.Decode(string(input[:]))if err !=nil { log.Panic(err) }return decode}
Result
// pub key의 길이가 가장 길고 pub hash, address로 갈수록 길이가 짧아진다.
// 인코딩을 거쳐 점점 길이가 짧아지는 것 (sha256 -> rmpemd160 -> base58)
// address는 버젼을 1로 설정했기 때문에 맨 앞 숫자가 1이다.
pub key: a5b803c0fc1895a82e9a6a82e4a5a21f5deee034dec81ddd4ccc3f024b11c2a4f4e28b3aef57b6ccca878e70f9d5dfac2b647795d718b666414732b3019ca2b3
pub hash: 0a14615357ecba8bb69bbbffb63e1fca03480ab7
address: 1vJAxZMhEzno17nrUJhUfZqxD82XRVRic
간단하게 지갑을 3개 생성하고 지갑들의 모든 주소를 출력하는 예제이다.
❯ go run main.go createwallet
pub key: 864d6ef68552034f420b6c001d5fa2b866f40f3e59e2c773bea40fddebe5b7036e13a4eee923be836cd3d96448163fe15b516c4ac66ad78426c1c848f5907afb
pub hash: 28b5bae6078d089e8cbefc1b6ef1da283493fe3f
address: 14iFjW13yc8pGhbEfkAEpEAgiB6mW4PH8Y
New address is: 14iFjW13yc8pGhbEfkAEpEAgiB6mW4PH8Y
❯ go run main.go listaddresses
14iFjW13yc8pGhbEfkAEpEAgiB6mW4PH8Y
❯ go run main.go createwallet
pub key: a707acaccc3ff6bab6007c6527b4cfd0f4aad6255dfa0035e1b839ed98bd450e2de0a3f1fc4fbb4f6df7c738513f0723dd92667c97466e472d0a767578bd2bea
pub hash: 02eebb0e91cdd3a7012f866b4c03171b6a7ac402
address: 1GWLgcBJ23bvcXHDrFn2eHHDbHsqaZTXj
New address is: 1GWLgcBJ23bvcXHDrFn2eHHDbHsqaZTXj
❯ go run main.go createwallet
pub key: 32e175364ef5fce20b3c882284ec9f3c37fc3c64476280f0e8ceccdd520dc6c3611c6ec817894c674e776964252d6699038094026ff1fd2294c6bd21653e943a
pub hash: 61d4514f939deca6414a2f72ce20db2aa9294cff
address: 19vGthH7Mu9d5UBLjiijrrPdqoh8QMhwGA
New address is: 19vGthH7Mu9d5UBLjiijrrPdqoh8QMhwGA
❯ go run main.go listaddresses
1GWLgcBJ23bvcXHDrFn2eHHDbHsqaZTXj
19vGthH7Mu9d5UBLjiijrrPdqoh8QMhwGA
14iFjW13yc8pGhbEfkAEpEAgiB6mW4PH8Y