-
Notifications
You must be signed in to change notification settings - Fork 15
/
collect_tx_fee.go
75 lines (64 loc) · 1.54 KB
/
collect_tx_fee.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
package operation
import (
"boscoin.io/sebak/lib/common"
"boscoin.io/sebak/lib/common/keypair"
"boscoin.io/sebak/lib/errors"
)
// OperationBodyTransactionFee is the operation to send the collected transacton
// fee to certain account. To prevent the hash duplication of transaction,
// OperationBodyTransactionFee has block related data.
type CollectTxFee struct {
Target string `json:"target"`
Amount common.Amount `json:"amount"`
Txs uint64 `json:"txs"`
Height uint64 `json:"block-height"`
BlockHash string `json:"block-hash"`
TotalTxs uint64 `json:"total-txs"`
TotalOps uint64 `json:"total-ops"`
}
func NewCollectTxFee(
target string,
amount common.Amount,
txs uint64,
blockHeight uint64,
blockHash string,
totalTxs uint64,
) CollectTxFee {
return CollectTxFee{
Target: target,
Amount: amount,
Txs: txs,
Height: blockHeight,
BlockHash: blockHash,
TotalTxs: totalTxs,
}
}
func (o CollectTxFee) IsWellFormed(common.Config) (err error) {
if _, err = keypair.Parse(o.Target); err != nil {
return
}
if len(o.BlockHash) < 1 {
err = errors.InvalidOperation
return
}
if int64(o.Txs) == 0 && int64(o.Amount) != 0 {
err = errors.OperationAmountOverflow
return
}
if o.Txs < 1 {
if o.Amount != 0 {
err = errors.InvalidOperation
return
}
}
return
}
func (o CollectTxFee) TargetAddress() string {
return o.Target
}
func (o CollectTxFee) GetAmount() common.Amount {
return o.Amount
}
func (o CollectTxFee) HasFee() bool {
return false
}