@@ -54,36 +54,39 @@ public class ChannelManagerConstructor: NativeTypeWrapper {
54
54
private let chain_monitor : ChainMonitor
55
55
56
56
57
- public init ( channel_manager_serialized: [ UInt8 ] , channel_monitors_serialized: [ [ UInt8 ] ] , keys_interface: KeysInterface , fee_estimator: FeeEstimator , chain_monitor: ChainMonitor , filter: Filter ? , net_graph_serialized: [ UInt8 ] ? , tx_broadcaster: BroadcasterInterface , logger: Logger ) throws {
57
+ public init ( channel_manager_serialized: [ UInt8 ] , channel_monitors_serialized: [ [ UInt8 ] ] , keys_interface: KeysInterface , fee_estimator: FeeEstimator , chain_monitor: ChainMonitor , filter: Filter ? , net_graph_serialized: [ UInt8 ] ? , tx_broadcaster: BroadcasterInterface , logger: Logger , enableP2PGossip : Bool = false ) throws {
58
58
59
59
var monitors : [ LDKChannelMonitor ] = [ ]
60
60
self . channel_monitors = [ ]
61
61
62
- var monitorFundingSet = Set < [ UInt8 ] > ( )
62
+ var monitorFundingSet = Set < String > ( )
63
63
64
64
for currentSerializedChannelMonitor in channel_monitors_serialized {
65
65
let channelMonitorResult : Result_C2Tuple_BlockHashChannelMonitorZDecodeErrorZ = UtilMethods . constructor_BlockHashChannelMonitorZ_read ( ser: currentSerializedChannelMonitor, arg: keys_interface)
66
66
if channelMonitorResult. cOpaqueStruct? . result_ok != true {
67
67
throw InvalidSerializedDataError . invalidSerializedChannelMonitor
68
68
}
69
- // res
70
69
71
70
let value : LDKCResult_C2Tuple_BlockHashChannelMonitorZDecodeErrorZPtr = channelMonitorResult. cOpaqueStruct!. contents
72
71
let a : LDKThirtyTwoBytes = value. result!. pointee. a
73
72
let b : LDKChannelMonitor = value. result!. pointee. b
74
73
75
- let nativeA = Bindings . LDKThirtyTwoBytes_to_array ( nativeType: a) ;
76
- if monitorFundingSet. contains ( nativeA) {
77
- throw InvalidSerializedDataError . duplicateSerializedChannelMonitor
78
- }
79
- monitorFundingSet. insert ( nativeA)
80
-
74
+ let blockHash = Bindings . LDKThirtyTwoBytes_to_array ( nativeType: a) ;
81
75
let clonedChannelMonitor = ChannelMonitor ( pointer: b) . dangle ( ) . clone ( )
82
- // var clonedChannelMonitor = currentChannelMonitor.clone(orig: currentChannelMonitor)
76
+
77
+ if let channelFundingOutpoint = clonedChannelMonitor. get_funding_txo ( ) . getA ( ) {
78
+ let fundingOutpointHash = " \( channelFundingOutpoint. get_txid ( ) ) : \( channelFundingOutpoint. get_index ( ) ) "
79
+ if monitorFundingSet. contains ( fundingOutpointHash) {
80
+ Bindings . print ( " Duplicate channel monitor funding txo: \( fundingOutpointHash) " , severity: . ERROR)
81
+ throw InvalidSerializedDataError . duplicateSerializedChannelMonitor
82
+ }
83
+ monitorFundingSet. insert ( fundingOutpointHash)
84
+ }
85
+
83
86
clonedChannelMonitor. cOpaqueStruct? . is_owned = false // is_owned should never have to be modified
84
87
85
88
monitors. append ( clonedChannelMonitor. cOpaqueStruct!)
86
- self . channel_monitors. append ( ( clonedChannelMonitor, nativeA ) )
89
+ self . channel_monitors. append ( ( clonedChannelMonitor, blockHash ) )
87
90
}
88
91
89
92
print ( " Collected channel monitors, reading channel manager " )
@@ -119,13 +122,11 @@ public class ChannelManagerConstructor: NativeTypeWrapper {
119
122
120
123
let noCustomMessages = IgnoringMessageHandler ( )
121
124
var messageHandler : MessageHandler !
122
- if let netGraph = net_graph {
123
- // TODO: fix
124
- // self.graph_msg_handler = NetGraphMsgHandler(network_graph: netGraph, chain_access: Option_AccessZ.none(), logger: logger)
125
-
126
- // messageHandler = MessageHandler(chan_handler_arg: channelManager.as_ChannelMessageHandler(), route_handler_arg: self.graph_msg_handler!.as_RoutingMessageHandler())
127
- // temporarily disable handling routing messages by the peer manager to avoid excessive memory growth
128
- messageHandler = MessageHandler ( chan_handler_arg: channelManager. as_ChannelMessageHandler ( ) , route_handler_arg: noCustomMessages. as_RoutingMessageHandler ( ) )
125
+ if let netGraph = net_graph, enableP2PGossip {
126
+ let noneOption = Option_AccessZ . none ( )
127
+ let p2pGossipSync = P2PGossipSync ( network_graph: netGraph, chain_access: Option_AccessZ . none ( ) , logger: logger)
128
+ self . graph_msg_handler = GossipSync . p2_p ( a: p2pGossipSync)
129
+ messageHandler = MessageHandler ( chan_handler_arg: channelManager. as_ChannelMessageHandler ( ) , route_handler_arg: p2pGossipSync. as_RoutingMessageHandler ( ) )
129
130
} else {
130
131
messageHandler = MessageHandler ( chan_handler_arg: channelManager. as_ChannelMessageHandler ( ) , route_handler_arg: noCustomMessages. as_RoutingMessageHandler ( ) )
131
132
}
@@ -151,7 +152,7 @@ public class ChannelManagerConstructor: NativeTypeWrapper {
151
152
/**
152
153
* Constructs a channel manager from the given interface implementations
153
154
*/
154
- public init ( network: LDKNetwork , config: UserConfig , current_blockchain_tip_hash: [ UInt8 ] , current_blockchain_tip_height: UInt32 , keys_interface: KeysInterface , fee_estimator: FeeEstimator , chain_monitor: ChainMonitor , net_graph: NetworkGraph ? , tx_broadcaster: BroadcasterInterface , logger: Logger ) {
155
+ public init ( network: LDKNetwork , config: UserConfig , current_blockchain_tip_hash: [ UInt8 ] , current_blockchain_tip_height: UInt32 , keys_interface: KeysInterface , fee_estimator: FeeEstimator , chain_monitor: ChainMonitor , net_graph: NetworkGraph ? , tx_broadcaster: BroadcasterInterface , logger: Logger , enableP2PGossip : Bool = false ) {
155
156
156
157
self . channel_monitors = [ ]
157
158
self . channel_manager_latest_block_hash = nil
@@ -167,16 +168,11 @@ public class ChannelManagerConstructor: NativeTypeWrapper {
167
168
self . net_graph = net_graph
168
169
let noCustomMessages = IgnoringMessageHandler ( )
169
170
var messageHandler : MessageHandler !
170
- if let netGraph = net_graph {
171
+ if let netGraph = net_graph, enableP2PGossip {
171
172
let noneOption = Option_AccessZ . none ( )
172
-
173
- // TODO: fix
174
- // self.graph_msg_handler = NetGraphMsgHandler(network_graph: netGraph, chain_access: noneOption, logger: logger)
175
-
176
-
177
- // messageHandler = MessageHandler(chan_handler_arg: channelManager.as_ChannelMessageHandler(), route_handler_arg: self.graph_msg_handler!.as_RoutingMessageHandler())
178
- // temporarily disable handling routing messages by the peer manager to avoid excessive memory growth
179
- messageHandler = MessageHandler ( chan_handler_arg: channelManager. as_ChannelMessageHandler ( ) , route_handler_arg: noCustomMessages. as_RoutingMessageHandler ( ) )
173
+ let p2pGossipSync = P2PGossipSync ( network_graph: netGraph, chain_access: Option_AccessZ . none ( ) , logger: logger)
174
+ self . graph_msg_handler = GossipSync . p2_p ( a: p2pGossipSync)
175
+ messageHandler = MessageHandler ( chan_handler_arg: channelManager. as_ChannelMessageHandler ( ) , route_handler_arg: p2pGossipSync. as_RoutingMessageHandler ( ) )
180
176
} else {
181
177
messageHandler = MessageHandler ( chan_handler_arg: channelManager. as_ChannelMessageHandler ( ) , route_handler_arg: noCustomMessages. as_RoutingMessageHandler ( ) )
182
178
}
0 commit comments