This repository has been archived by the owner on Mar 7, 2023. It is now read-only.
/
plugin.go
84 lines (70 loc) · 2.06 KB
/
plugin.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package development
import (
"crypto/sha256"
"fmt"
"time"
"github.com/leonardochaia/vendopunkto/plugin"
"github.com/rs/xid"
"github.com/shopspring/decimal"
)
type fakeAddress struct {
address string
creationTime time.Time
}
type fakeWalletPlugin struct {
symbol string
name string
qrCodeTemplate string
addresses []fakeAddress
}
func (p *fakeWalletPlugin) GenerateNewAddress(invoiceID string) (string, error) {
h := sha256.Sum256([]byte(p.symbol + "-fake-" + xid.New().String()))
addr := fakeAddress{
address: fmt.Sprintf("%x", h),
creationTime: time.Now(),
}
p.addresses = append(p.addresses, addr)
return addr.address, nil
}
func (p *fakeWalletPlugin) GetWalletInfo() (plugin.WalletPluginInfo, error) {
return plugin.WalletPluginInfo{
Currency: plugin.WalletPluginCurrency{
Name: p.name,
Symbol: p.symbol,
QRCodeTemplate: p.qrCodeTemplate,
},
}, nil
}
func (p *fakeWalletPlugin) GetPluginInfo() (plugin.PluginInfo, error) {
return plugin.PluginInfo{
Name: p.name + " Fake Wallet",
ID: p.symbol + "-fake-wallet",
Type: plugin.PluginTypeWallet,
}, nil
}
func (p *fakeWalletPlugin) GetIncomingTransfers(params plugin.WalletPluginIncomingTransferParams) (
[]plugin.WalletPluginIncomingTransferResult, error) {
output := []plugin.WalletPluginIncomingTransferResult{}
now := time.Now()
for _, addr := range p.addresses {
confTime := addr.creationTime.Add(30 * time.Second)
confirmations := uint64(0)
if confTime.Before(now) {
confirmations = uint64(now.Unix()) - uint64(addr.creationTime.Unix())
}
memPoolTime := addr.creationTime.Add(10 * time.Second)
height := uint64(memPoolTime.Unix())
if memPoolTime.Before(now) {
h := sha256.Sum256([]byte(fmt.Sprintf("fake-tx-hash-%d", height)))
tx := plugin.WalletPluginIncomingTransferResult{
TxHash: fmt.Sprintf("%x", h),
Address: addr.address,
BlockHeight: height,
Amount: decimal.NewFromInt(1),
Confirmations: confirmations,
}
output = append(output, tx)
}
}
return output, nil
}