This repository has been archived by the owner on Aug 27, 2022. It is now read-only.
/
api.go
69 lines (61 loc) · 1.6 KB
/
api.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// Copyright (c) 2017-2018 The qitmeer developers
package address
import (
"github.com/Qitmeer/qitmeer/common/encode/base58"
"github.com/Qitmeer/qitmeer/config"
"github.com/Qitmeer/qitmeer/params"
"github.com/Qitmeer/qitmeer/rpc"
"github.com/Qitmeer/qitmeer/rpc/client/cmds"
"sync"
)
type AddressApi struct {
sync.Mutex
params *params.Params
config *config.Config
}
type PublicAddressAPI struct {
addressApi *AddressApi
}
func NewAddressApi(cfg *config.Config, par *params.Params) *AddressApi {
return &AddressApi{
config: cfg,
params: par,
}
}
func NewPublicAddressAPI(ai *AddressApi) *PublicAddressAPI {
pmAPI := &PublicAddressAPI{addressApi: ai}
return pmAPI
}
func (c *AddressApi) APIs() []rpc.API {
return []rpc.API{
{
NameSpace: cmds.DefaultServiceNameSpace,
Service: NewPublicAddressAPI(c),
Public: true,
},
}
}
func (api *PublicAddressAPI) CheckAddress(address string, network string) (interface{}, error) {
_, ver, err := base58.QitmeerCheckDecode(address)
if err != nil {
return false, rpc.RpcInvalidError("Invalid address :" + err.Error())
}
var p *params.Params
switch network {
case "privnet":
p = ¶ms.PrivNetParams
case "testnet":
p = ¶ms.TestNetParams
case "mainnet":
p = ¶ms.MainNetParams
case "mixnet":
p = ¶ms.MixNetParams
default:
return false, rpc.RpcInvalidError("Invalid network : privnet | testnet | mainnet | mixnet")
}
if p.PubKeyHashAddrID != ver {
return false, rpc.RpcRuleError("address prefix error , need %s , actual: %s,network not match,please check it",
p.NetworkAddressPrefix, address[0:1])
}
return true, nil
}