-
Notifications
You must be signed in to change notification settings - Fork 18
/
transfer_payload.go
123 lines (102 loc) · 2.63 KB
/
transfer_payload.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package model
import (
"github.com/nervosnetwork/ckb-sdk-go/mercury/model/common"
"github.com/nervosnetwork/ckb-sdk-go/mercury/model/mode"
"github.com/nervosnetwork/ckb-sdk-go/mercury/model/source"
)
type TransferPayload struct {
AssetInfo *common.AssetInfo `json:"asset_info,omitempty"`
From *From `json:"from"`
To *To `json:"to"`
PayFee string `json:"pay_fee,omitempty"`
Change string `json:"change,omitempty"`
FeeRate uint `json:"fee_rate"`
Since *SinceConfig `json:"since,omitempty"`
}
type From struct {
Items []interface{} `json:"items"`
Source source.Source `json:"source"`
}
type ToInfo struct {
Address string `json:"address"`
Amount *U128 `json:"amount"`
}
type To struct {
ToInfos []*ToInfo `json:"to_infos"`
Mode mode.Mode `json:"mode"`
}
func NewToInfo(address string, amount *U128) *ToInfo {
return &ToInfo{
Address: address,
Amount: amount,
}
}
type SinceConfig struct {
Flag SinceFlag `json:"flag"`
Type SinceType `json:"type_"`
Value uint64 `json:"value"`
}
type SinceFlag string
const (
Relative SinceFlag = "Relative"
Absolute SinceFlag = "Absolute"
)
type SinceType string
const (
BlockNumber SinceType = "BlockNumber"
EpochNumber SinceType = "EpochNumber"
Timestamp SinceType = "Timestamp"
)
type transferBuilder struct {
AssetInfo *common.AssetInfo
From *From
To *To
PayFee string
Change string
FeeRate uint
Since *SinceConfig
}
func (builder *transferBuilder) AddAssetInfo(assetInfo *common.AssetInfo) {
builder.AssetInfo = assetInfo
}
func (builder *transferBuilder) AddFrom(source source.Source, items ...interface{}) {
builder.From = &From{
Items: items,
Source: source,
}
}
func (builder *transferBuilder) AddTo(mode mode.Mode, toInfos ...*ToInfo) {
builder.To = &To{
ToInfos: toInfos,
Mode: mode,
}
}
func (builder *transferBuilder) AddPayFee(address string) {
builder.PayFee = address
}
func (builder *transferBuilder) AddChange(address string) {
builder.Change = address
}
func (builder *transferBuilder) AddFeeRate(feeRate uint) {
builder.FeeRate = feeRate
}
func (builder *transferBuilder) AddSince(since *SinceConfig) {
builder.Since = since
}
func (builder *transferBuilder) Build() *TransferPayload {
return &TransferPayload{
AssetInfo: builder.AssetInfo,
From: builder.From,
To: builder.To,
PayFee: builder.PayFee,
Change: builder.Change,
FeeRate: builder.FeeRate,
Since: builder.Since,
}
}
func NewTransferBuilder() *transferBuilder {
// default fee rate
return &transferBuilder{
FeeRate: 1000,
}
}