Skip to content

Commit 7edcd5b

Browse files
committed
added blockchain address
1 parent a660d08 commit 7edcd5b

File tree

4 files changed

+87
-4
lines changed

4 files changed

+87
-4
lines changed

go.mod

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
module goBlockchain
22

33
go 1.22.3
4+
5+
require (
6+
github.com/btcsuite/btcutil v1.0.2 // indirect
7+
golang.org/x/crypto v0.23.0 // indirect
8+
)

go.sum

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII=
2+
github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ=
3+
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA=
4+
github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg=
5+
github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts=
6+
github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts=
7+
github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg=
8+
github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY=
9+
github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc=
10+
github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY=
11+
github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs=
12+
github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
13+
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
14+
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
15+
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
16+
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
17+
github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ=
18+
github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4=
19+
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
20+
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
21+
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
22+
golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
23+
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
24+
golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
25+
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
26+
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
27+
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
28+
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
29+
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
30+
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
31+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
32+
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
33+
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
34+
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
35+
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
36+
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
37+
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

main.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package main
22

33
import (
44
"fmt"
5-
"log"
65
"goBlockchain/wallet"
6+
"log"
77
)
88

99
func init() {
@@ -16,4 +16,5 @@ func main() {
1616
fmt.Println(w.PublicKey())
1717
fmt.Println(w.PrivateKeyStr())
1818
fmt.Println(w.PublicKeyStr())
19+
fmt.Println(w.BlockChainAddress())
1920
}

wallet/wallet.go

+43-3
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,55 @@ import (
44
"crypto/ecdsa"
55
"crypto/elliptic"
66
"crypto/rand"
7+
"crypto/sha256"
78
"fmt"
9+
10+
"github.com/btcsuite/btcutil/base58"
11+
"golang.org/x/crypto/ripemd160"
812
)
913

1014
type Wallet struct {
11-
privateKey *ecdsa.PrivateKey
12-
publicKey *ecdsa.PublicKey
15+
privateKey *ecdsa.PrivateKey
16+
publicKey *ecdsa.PublicKey
17+
blockChainAddress string
1318
}
1419

1520
func NewWallet() *Wallet {
1621
w := new(Wallet)
1722
privateKey, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
1823
w.privateKey = privateKey
1924
w.publicKey = &w.privateKey.PublicKey
25+
// 2
26+
h2 := sha256.New()
27+
h2.Write(w.publicKey.X.Bytes())
28+
h2.Write(w.publicKey.Y.Bytes())
29+
digest2 := h2.Sum(nil)
30+
// 3
31+
h3 := ripemd160.New()
32+
h3.Write(digest2)
33+
digest3 := h3.Sum(nil)
34+
// 4
35+
vd4 := make([]byte, 21)
36+
vd4[0] = 0x00
37+
copy(vd4[1:], digest3[:])
38+
// 5
39+
h5 := sha256.New()
40+
h5.Write(vd4)
41+
digest5 := h5.Sum(nil)
42+
// 6
43+
h6 := sha256.New()
44+
h6.Write(digest5)
45+
digest6 := h6.Sum(nil)
46+
// 7
47+
chsum := digest6[:4]
48+
// 8
49+
dc8 := make([]byte, 25)
50+
copy(dc8[:21], vd4[:])
51+
copy(dc8[21:], chsum[:])
52+
// 9
53+
address := base58.Encode(dc8)
54+
w.blockChainAddress = address
55+
2056
return w
2157
}
2258

@@ -33,5 +69,9 @@ func (w *Wallet) PublicKey() *ecdsa.PublicKey {
3369
}
3470

3571
func (w *Wallet) PublicKeyStr() string {
36-
return fmt.Sprintf("%x%x", w.publicKey.Y.Bytes())
72+
return fmt.Sprintf("%x", w.publicKey.Y.Bytes())
73+
}
74+
75+
func (w *Wallet) BlockChainAddress() string {
76+
return w.blockChainAddress
3777
}

0 commit comments

Comments
 (0)