@@ -2,104 +2,105 @@ part of 'package:bitcoin_base/src/bitcoin/address/address.dart';
2
2
3
3
/// An abstract class representing a forked address for a specific network.
4
4
abstract class BitcoinNetworkAddress <T extends BasedUtxoNetwork > {
5
- const BitcoinNetworkAddress ();
5
+ const BitcoinNetworkAddress ._(
6
+ {required this .address,
7
+ required this .network,
8
+ required this .baseAddress});
6
9
7
10
/// The underlying Bitcoin base address.
8
- abstract final BitcoinBaseAddress baseAddress;
11
+ final BitcoinBaseAddress baseAddress;
9
12
10
13
/// Converts the address to a string representation for the specified network [T] .
11
- String toAddress ([T ? network]) {
12
- return network == null ? address : baseAddress.toAddress (network);
14
+ String toAddress ([T ? updateNetwork]) {
15
+ return updateNetwork == null
16
+ ? address
17
+ : baseAddress.toAddress (updateNetwork);
13
18
}
14
19
15
20
/// The type of the Bitcoin address.
16
21
BitcoinAddressType get type => baseAddress.type;
17
22
18
23
/// The string representation of the address.
19
- abstract final String address;
24
+ final String address;
25
+
26
+ final T network;
20
27
}
21
28
22
29
/// A concrete implementation of [BitcoinNetworkAddress] for Bitcoin network.
23
30
class BitcoinAddress extends BitcoinNetworkAddress <BitcoinNetwork > {
24
- const BitcoinAddress ._(this .baseAddress, this .address);
31
+ const BitcoinAddress ._(
32
+ BitcoinBaseAddress baseAddress, String address, BitcoinNetwork network)
33
+ : super ._(address: address, baseAddress: baseAddress, network: network);
25
34
factory BitcoinAddress (String address,
26
35
{BitcoinNetwork network = BitcoinNetwork .mainnet}) {
27
36
return BitcoinAddress ._(
28
- _BitcoinAddressUtils .decodeAddress (address, network), address);
37
+ _BitcoinAddressUtils .decodeAddress (address, network), address, network );
29
38
}
30
39
factory BitcoinAddress .fromBaseAddress (BitcoinBaseAddress address,
31
- {DashNetwork network = DashNetwork .mainnet}) {
40
+ {BitcoinNetwork network = BitcoinNetwork .mainnet}) {
32
41
final baseAddress = _BitcoinAddressUtils .validateAddress (address, network);
33
- return BitcoinAddress ._(baseAddress, baseAddress.toAddress (network));
42
+ return BitcoinAddress ._(
43
+ baseAddress, baseAddress.toAddress (network), network);
34
44
}
35
- @override
36
- final BitcoinBaseAddress baseAddress;
37
- @override
38
- final String address;
39
45
}
40
46
41
47
/// A concrete implementation of [BitcoinNetworkAddress] for Doge network.
42
48
class DogeAddress extends BitcoinNetworkAddress <DogecoinNetwork > {
43
- const DogeAddress ._(this .baseAddress, this .address);
49
+ const DogeAddress ._(
50
+ BitcoinBaseAddress baseAddress, String address, DogecoinNetwork network)
51
+ : super ._(address: address, baseAddress: baseAddress, network: network);
44
52
factory DogeAddress (String address,
45
53
{DogecoinNetwork network = DogecoinNetwork .mainnet}) {
46
54
return DogeAddress ._(
47
- _BitcoinAddressUtils .decodeAddress (address, network), address);
55
+ _BitcoinAddressUtils .decodeAddress (address, network), address, network );
48
56
}
49
57
factory DogeAddress .fromBaseAddress (BitcoinBaseAddress address,
50
58
{DogecoinNetwork network = DogecoinNetwork .mainnet}) {
51
59
final baseAddress = _BitcoinAddressUtils .validateAddress (address, network);
52
- return DogeAddress ._(baseAddress, baseAddress.toAddress (network));
60
+ return DogeAddress ._(baseAddress, baseAddress.toAddress (network), network );
53
61
}
54
- @override
55
- final BitcoinBaseAddress baseAddress;
56
-
57
- @override
58
- final String address;
59
62
}
60
63
61
64
/// A concrete implementation of [BitcoinNetworkAddress] for Pepecoin network.
62
65
class PepeAddress extends BitcoinNetworkAddress <PepeNetwork > {
63
- const PepeAddress ._(this .baseAddress, this .address);
66
+ const PepeAddress ._(
67
+ BitcoinBaseAddress baseAddress, String address, PepeNetwork network)
68
+ : super ._(address: address, network: network, baseAddress: baseAddress);
64
69
factory PepeAddress (String address,
65
70
{PepeNetwork network = PepeNetwork .mainnet}) {
66
71
return PepeAddress ._(
67
- _BitcoinAddressUtils .decodeAddress (address, network), address);
72
+ _BitcoinAddressUtils .decodeAddress (address, network), address, network );
68
73
}
69
74
factory PepeAddress .fromBaseAddress (BitcoinBaseAddress address,
70
75
{PepeNetwork network = PepeNetwork .mainnet}) {
71
76
final baseAddress = _BitcoinAddressUtils .validateAddress (address, network);
72
- return PepeAddress ._(baseAddress, baseAddress.toAddress (network));
77
+ return PepeAddress ._(baseAddress, baseAddress.toAddress (network), network );
73
78
}
74
- @override
75
- final BitcoinBaseAddress baseAddress;
76
-
77
- @override
78
- final String address;
79
79
}
80
80
81
81
/// A concrete implementation of [BitcoinNetworkAddress] for Litecoin network.
82
82
class LitecoinAddress extends BitcoinNetworkAddress <LitecoinNetwork > {
83
- LitecoinAddress ._(this .baseAddress, this .address);
83
+ const LitecoinAddress ._(
84
+ BitcoinBaseAddress baseAddress, String address, LitecoinNetwork network)
85
+ : super ._(address: address, baseAddress: baseAddress, network: network);
84
86
factory LitecoinAddress (String address,
85
87
{LitecoinNetwork network = LitecoinNetwork .mainnet}) {
86
88
return LitecoinAddress ._(
87
- _BitcoinAddressUtils .decodeAddress (address, network), address);
89
+ _BitcoinAddressUtils .decodeAddress (address, network), address, network );
88
90
}
89
91
factory LitecoinAddress .fromBaseAddress (BitcoinBaseAddress address,
90
92
{LitecoinNetwork network = LitecoinNetwork .mainnet}) {
91
93
final baseAddress = _BitcoinAddressUtils .validateAddress (address, network);
92
- return LitecoinAddress ._(baseAddress, baseAddress.toAddress (network));
94
+ return LitecoinAddress ._(
95
+ baseAddress, baseAddress.toAddress (network), network);
93
96
}
94
- @override
95
- final BitcoinBaseAddress baseAddress;
96
- @override
97
- final String address;
98
97
}
99
98
100
99
/// A concrete implementation of [BitcoinNetworkAddress] for Bitcoin cash network.
101
100
class BitcoinCashAddress extends BitcoinNetworkAddress <BitcoinCashNetwork > {
102
- const BitcoinCashAddress ._(this .baseAddress, this .address);
101
+ const BitcoinCashAddress ._(BitcoinBaseAddress baseAddress, String address,
102
+ BitcoinCashNetwork network)
103
+ : super ._(address: address, baseAddress: baseAddress, network: network);
103
104
factory BitcoinCashAddress (String address,
104
105
{BitcoinCashNetwork network = BitcoinCashNetwork .mainnet,
105
106
bool validateNetworkPrefix = false }) {
@@ -109,61 +110,55 @@ class BitcoinCashAddress extends BitcoinNetworkAddress<BitcoinCashNetwork> {
109
110
if (decodeAddress == null ) {
110
111
throw DartBitcoinPluginException ("Invalid ${network .value } address." );
111
112
}
112
- return BitcoinCashAddress ._(decodeAddress, address);
113
+ return BitcoinCashAddress ._(decodeAddress, address, network );
113
114
}
114
115
factory BitcoinCashAddress .fromBaseAddress (BitcoinBaseAddress address,
115
116
{BitcoinCashNetwork network = BitcoinCashNetwork .mainnet}) {
116
117
final baseAddress = _BitcoinAddressUtils .validateAddress (address, network);
117
- return BitcoinCashAddress ._(baseAddress, baseAddress.toAddress (network));
118
+ return BitcoinCashAddress ._(
119
+ baseAddress, baseAddress.toAddress (network), network);
118
120
}
119
- @override
120
- final BitcoinBaseAddress baseAddress;
121
- @override
122
- final String address;
123
121
124
122
@override
125
- String toAddress ([BitcoinCashNetwork ? network , String ? prefix]) {
123
+ String toAddress ([BitcoinCashNetwork ? updateNetwork , String ? prefix]) {
126
124
if (prefix != null ) {
127
125
return BchAddrConverter .convert (address, prefix, null );
128
126
}
129
- return super .toAddress (network );
127
+ return super .toAddress (updateNetwork );
130
128
}
131
129
}
132
130
133
131
/// A concrete implementation of [BitcoinNetworkAddress] for Dash network.
134
132
class DashAddress extends BitcoinNetworkAddress <DashNetwork > {
135
- const DashAddress ._(this .baseAddress, this .address);
133
+ const DashAddress ._(
134
+ BitcoinBaseAddress baseAddress, String address, DashNetwork network)
135
+ : super ._(address: address, baseAddress: baseAddress, network: network);
136
136
factory DashAddress (String address,
137
137
{DashNetwork network = DashNetwork .mainnet}) {
138
138
return DashAddress ._(
139
- _BitcoinAddressUtils .decodeAddress (address, network), address);
139
+ _BitcoinAddressUtils .decodeAddress (address, network), address, network );
140
140
}
141
141
factory DashAddress .fromBaseAddress (BitcoinBaseAddress address,
142
142
{DashNetwork network = DashNetwork .mainnet}) {
143
143
final baseAddress = _BitcoinAddressUtils .validateAddress (address, network);
144
- return DashAddress ._(baseAddress, baseAddress.toAddress (network));
144
+ return DashAddress ._(baseAddress, baseAddress.toAddress (network), network );
145
145
}
146
- @override
147
- final BitcoinBaseAddress baseAddress;
148
- @override
149
- final String address;
150
146
}
151
147
152
148
/// A concrete implementation of [BitcoinNetworkAddress] for bitcoinSV network.
153
- class BitcoinSVAddress extends BitcoinNetworkAddress <DashNetwork > {
154
- const BitcoinSVAddress ._(this .baseAddress, this .address);
149
+ class BitcoinSVAddress extends BitcoinNetworkAddress <BitcoinSVNetwork > {
150
+ const BitcoinSVAddress ._(
151
+ BitcoinBaseAddress baseAddress, String address, BitcoinSVNetwork network)
152
+ : super ._(address: address, baseAddress: baseAddress, network: network);
155
153
factory BitcoinSVAddress (String address,
156
154
{BitcoinSVNetwork network = BitcoinSVNetwork .mainnet}) {
157
155
return BitcoinSVAddress ._(
158
- _BitcoinAddressUtils .decodeAddress (address, network), address);
156
+ _BitcoinAddressUtils .decodeAddress (address, network), address, network );
159
157
}
160
158
factory BitcoinSVAddress .fromBaseAddress (BitcoinBaseAddress address,
161
159
{BitcoinSVNetwork network = BitcoinSVNetwork .mainnet}) {
162
160
final baseAddress = _BitcoinAddressUtils .validateAddress (address, network);
163
- return BitcoinSVAddress ._(baseAddress, baseAddress.toAddress (network));
161
+ return BitcoinSVAddress ._(
162
+ baseAddress, baseAddress.toAddress (network), network);
164
163
}
165
- @override
166
- final BitcoinBaseAddress baseAddress;
167
- @override
168
- final String address;
169
164
}
0 commit comments