Skip to content

Commit e8cb217

Browse files
committed
Add a test for mainnet graph sync.
1 parent 888e290 commit e8cb217

File tree

4 files changed

+119
-1
lines changed

4 files changed

+119
-1
lines changed

ci/LDKSwift/Tests/LDKSwiftTests/LDKSwiftTest.swift

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,64 @@ class LDKSwiftTest: XCTestCase {
9292
print("restored invoice string: \(regeneratedInvoiceString)")
9393
}
9494

95+
func testMainnetGraphSync() async throws {
96+
let reversedGenesisHashHex = "6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000"
97+
let reversedGenesisHash = Self.hexStringToBytes(hexString: reversedGenesisHashHex)!
98+
99+
let seed: [UInt8] = [UInt8](Data(base64Encoded: "//////////////////////////////////////////8=")!)
100+
let timestamp_seconds = UInt64(NSDate().timeIntervalSince1970)
101+
let timestamp_nanos = UInt32(truncating: NSNumber(value: timestamp_seconds * 1000 * 1000))
102+
let keysManager = KeysManager(seed: seed, starting_time_secs: timestamp_seconds, starting_time_nanos: timestamp_nanos)
103+
let keysInterface = keysManager.as_KeysInterface()
104+
105+
let config = UserConfig()
106+
let lightningNetwork = LDKNetwork_Bitcoin
107+
let networkGraph = NetworkGraph(genesis_hash: reversedGenesisHash)
108+
109+
let scoringParams = ProbabilisticScoringParameters()
110+
let probabalisticScorer = ProbabilisticScorer(params: scoringParams, network_graph: networkGraph)
111+
let score = probabalisticScorer.as_Score()
112+
let multiThreadedScorer = MultiThreadedLockableScore(score: score)
113+
114+
let feeEstimator = TestFeeEstimator()
115+
let broadcaster = TestBroadcasterInterface()
116+
let logger = TestLogger()
117+
let channelMonitorPersister = TestPersister()
118+
let chainMonitor = ChainMonitor(chain_source: Option_FilterZ(value: nil), broadcaster: broadcaster, logger: logger, feeest: feeEstimator, persister: channelMonitorPersister)
119+
120+
let channelManagerConstructor = ChannelManagerConstructor(network: lightningNetwork, config: config, current_blockchain_tip_hash: reversedGenesisHash, current_blockchain_tip_height: 0, keys_interface: keysInterface, fee_estimator: feeEstimator, chain_monitor: chainMonitor, net_graph: networkGraph, tx_broadcaster: broadcaster, logger: logger)
121+
let channelManager = channelManagerConstructor.channelManager
122+
let peerManager = channelManagerConstructor.peerManager
123+
let tcpPeerHandler = channelManagerConstructor.getTCPPeerHandler()
124+
if let netGraph = channelManagerConstructor.net_graph {
125+
print("net graph available!")
126+
}
127+
128+
// bitrefill
129+
tcpPeerHandler.connect(address: "52.50.244.44", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "030c3f19d742ca294a55c00376b3b355c3c90d61c6b6b39554dbc7ac19b141c14f")!)
130+
131+
// River
132+
tcpPeerHandler.connect(address: "104.196.249.140", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "03037dc08e9ac63b82581f79b662a4d0ceca8a8ca162b1af3551595b8f2d97b70a")!)
133+
134+
// Acinq
135+
tcpPeerHandler.connect(address: "3.33.236.230", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f")!)
136+
137+
// Kraken
138+
tcpPeerHandler.connect(address: "52.13.118.208", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "02f1a8c87607f415c8f22c00593002775941dea48869ce23096af27b0cfdcc0b69")!)
139+
140+
// Matt
141+
tcpPeerHandler.connect(address: "69.59.18.80", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "03db10aa09ff04d3568b0621750794063df401e6853c79a21a83e1a3f3b5bfb0c8")!)
142+
143+
let channelManagerAndNetworkGraphPersisterAndEventHandler = TestChannelManagerPersister(channelManager: channelManager)
144+
channelManagerConstructor.chain_sync_completed(persister: channelManagerAndNetworkGraphPersisterAndEventHandler, scorer: multiThreadedScorer)
145+
146+
// run this for one minute
147+
for _ in 0..<600 {
148+
// sleep for 100ms
149+
try! await Task.sleep(nanoseconds: 0_100_000_000)
150+
}
151+
}
152+
95153
func testRouteConstruction() throws {
96154

97155
let destPubkeyHex = "03c2abfa93eacec04721c019644584424aab2ba4dff3ac9bdab4e9c97007491dda"

ci/run_tests.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,4 @@ pushd LDKSwift/
3333
#swift test
3434
swift test -Xswiftc -suppress-warnings
3535
#swift test --filter 'testInvoiceSerialization' -Xswiftc -suppress-warnings
36+
#swift test --filter 'testMainnetGraphSync' -Xswiftc -suppress-warnings

xcode/DirectBindingsApp/DirectBindingsAppTests/DirectBindingsAppTests.swift

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,65 @@ class DirectBindingsAppTests: XCTestCase {
224224
print("restored invoice string: \(regeneratedInvoiceString)")
225225
}
226226

227+
func testMainnetGraphSync() async throws {
228+
let reversedGenesisHashHex = "6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000"
229+
let reversedGenesisHash = Self.hexStringToBytes(hexString: reversedGenesisHashHex)!
230+
231+
let seed: [UInt8] = [UInt8](Data(base64Encoded: "//////////////////////////////////////////8=")!)
232+
let timestamp_seconds = UInt64(NSDate().timeIntervalSince1970)
233+
let timestamp_nanos = UInt32(truncating: NSNumber(value: timestamp_seconds * 1000 * 1000))
234+
235+
let keysManager = KeysManager(seed: seed, starting_time_secs: timestamp_seconds, starting_time_nanos: timestamp_nanos)
236+
let keysInterface = keysManager.as_KeysInterface()
237+
238+
let config = UserConfig()
239+
let lightningNetwork = LDKNetwork_Bitcoin
240+
let networkGraph = NetworkGraph(genesis_hash: reversedGenesisHash)
241+
242+
let scoringParams = ProbabilisticScoringParameters()
243+
let probabalisticScorer = ProbabilisticScorer(params: scoringParams, network_graph: networkGraph)
244+
let score = probabalisticScorer.as_Score()
245+
let multiThreadedScorer = MultiThreadedLockableScore(score: score)
246+
247+
let feeEstimator = TestFeeEstimator()
248+
let broadcaster = TestBroadcasterInterface()
249+
let logger = TestLogger()
250+
let channelMonitorPersister = TestPersister()
251+
let chainMonitor = ChainMonitor(chain_source: Option_FilterZ(value: nil), broadcaster: broadcaster, logger: logger, feeest: feeEstimator, persister: channelMonitorPersister)
252+
253+
let channelManagerConstructor = ChannelManagerConstructor(network: lightningNetwork, config: config, current_blockchain_tip_hash: reversedGenesisHash, current_blockchain_tip_height: 0, keys_interface: keysInterface, fee_estimator: feeEstimator, chain_monitor: chainMonitor, net_graph: networkGraph, tx_broadcaster: broadcaster, logger: logger)
254+
let channelManager = channelManagerConstructor.channelManager
255+
let peerManager = channelManagerConstructor.peerManager
256+
let tcpPeerHandler = channelManagerConstructor.getTCPPeerHandler()
257+
if let netGraph = channelManagerConstructor.net_graph {
258+
print("net graph available!")
259+
}
260+
261+
// bitrefill
262+
tcpPeerHandler.connect(address: "52.50.244.44", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "030c3f19d742ca294a55c00376b3b355c3c90d61c6b6b39554dbc7ac19b141c14f")!)
263+
264+
// River
265+
tcpPeerHandler.connect(address: "104.196.249.140", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "03037dc08e9ac63b82581f79b662a4d0ceca8a8ca162b1af3551595b8f2d97b70a")!)
266+
267+
// Acinq
268+
tcpPeerHandler.connect(address: "3.33.236.230", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f")!)
269+
270+
// Kraken
271+
tcpPeerHandler.connect(address: "52.13.118.208", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "02f1a8c87607f415c8f22c00593002775941dea48869ce23096af27b0cfdcc0b69")!)
272+
273+
// Matt
274+
tcpPeerHandler.connect(address: "69.59.18.80", port: 9735, theirNodeId: Self.hexStringToBytes(hexString: "03db10aa09ff04d3568b0621750794063df401e6853c79a21a83e1a3f3b5bfb0c8")!)
275+
276+
let channelManagerAndNetworkGraphPersisterAndEventHandler = TestChannelManagerPersister(channelManager: channelManager)
277+
channelManagerConstructor.chain_sync_completed(persister: channelManagerAndNetworkGraphPersisterAndEventHandler, scorer: multiThreadedScorer)
278+
279+
// run this for one minute
280+
for _ in 0..<600 {
281+
// sleep for 100ms
282+
try! await Task.sleep(nanoseconds: 0_100_000_000)
283+
}
284+
}
285+
227286
func testPeerGraphConnectivity() async throws {
228287
let instance = HumanObjectPeerTestInstance(nice_close: true, use_km_wrapper: false, use_manual_watch: false, reload_peers: false, break_cross_peer_refs: false, use_nio_peer_handler: true, use_filter: false, use_chan_manager_constructor: true)
229288
await instance.test_multiple_peer_connections()

xcode/DirectBindingsApp/DirectBindingsAppTests/test-batteries/TestLogger.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
class TestLogger: Logger {
99

1010
override func log(record: Record) {
11-
print("\nRLLogger (\(record.get_level())): \(record.get_file()):\(record.get_line()):\n> \(record.get_args())\n")
11+
print("\nRLTestLogger (\(record.get_level())): \(record.get_file()):\(record.get_line()):\n> \(record.get_args())\n")
1212
}
1313

1414
}

0 commit comments

Comments
 (0)