Skip to content

Commit d197a8a

Browse files
committed
Create test to reproduce wrapper signer issue.
1 parent 2ca0b8e commit d197a8a

File tree

2 files changed

+149
-0
lines changed

2 files changed

+149
-0
lines changed
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
//
2+
// LDK
3+
//
4+
// Created by Arik Sosman on 7/27/23.
5+
//
6+
7+
#if SWIFT_PACKAGE
8+
import LDKSwift
9+
import LDKHeaders
10+
#endif
11+
import XCTest
12+
13+
class WrappedSignerProviderTests: XCTestCase {
14+
15+
override func setUpWithError() throws {
16+
// Put setup code here. This method is called before the invocation of each test method in the class.
17+
Bindings.setLogThreshold(severity: .DEBUG)
18+
}
19+
20+
override func tearDownWithError() throws {
21+
// Put teardown code here. This method is called after the invocation of each test method in the class.
22+
}
23+
24+
func testChannelManagerConstruction() {
25+
let feeEstimator = TestFeeEstimator()
26+
let logger = TestLogger()
27+
let broadcaster = TestBroadcasterInterface()
28+
let persister = TestPersister()
29+
let filter = TestFilter()
30+
31+
let chainMonitor = ChainMonitor(chainSource: filter, broadcaster: broadcaster, logger: logger, feeest: feeEstimator, persister: persister)
32+
33+
let seed = [UInt8](Data(base64Encoded: "//////////////////////////////////////////8=")!)
34+
let timestampSeconds = UInt64(NSDate().timeIntervalSince1970)
35+
let timestampNanos = UInt32.init(truncating: NSNumber(value: timestampSeconds * 1000 * 1000))
36+
let myKeysManager = MyKeysManager(seed: seed, startingTimeSecs: timestampSeconds, startingTimeNanos: timestampNanos)
37+
38+
let handshakeConfig = ChannelHandshakeConfig.initWithDefault()
39+
handshakeConfig.setMinimumDepth(val: 1)
40+
handshakeConfig.setAnnouncedChannel(val: false)
41+
42+
let handshakeLimits = ChannelHandshakeLimits.initWithDefault()
43+
handshakeLimits.setForceAnnouncedChannelPreference(val: false)
44+
45+
let userConfig = UserConfig.initWithDefault()
46+
userConfig.setChannelHandshakeConfig(val: handshakeConfig)
47+
userConfig.setChannelHandshakeLimits(val: handshakeLimits)
48+
userConfig.setAcceptInboundChannels(val: true)
49+
50+
let network = Network.Testnet
51+
let netGraph = NetworkGraph(network: network, logger: logger)
52+
53+
let params = ProbabilisticScoringParameters.initWithDefault()
54+
let probabilisticScorer = ProbabilisticScorer(params: params, networkGraph: netGraph, logger: logger)
55+
let score = probabilisticScorer.asScore()
56+
let scorer = MultiThreadedLockableScore(score: score)
57+
58+
let channelManagerConstructionParameters = ChannelManagerConstructionParameters(config: userConfig, entropySource: myKeysManager.entropySource, nodeSigner: myKeysManager.nodeSigner, signerProvider: myKeysManager.signerProvider, feeEstimator: feeEstimator, chainMonitor: chainMonitor, txBroadcaster: broadcaster, logger: logger, enableP2PGossip: true, scorer: scorer)
59+
60+
let reversedGenesisHashHex = "6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000"
61+
let reversedGenesisHash = LDKSwiftTests.hexStringToBytes(hexString: reversedGenesisHashHex)!
62+
let latestBlockHash = reversedGenesisHash
63+
let channelManager = ChannelManagerConstructor(network: network, currentBlockchainTipHash: latestBlockHash, currentBlockchainTipHeight: 0, netGraph: netGraph, params: channelManagerConstructionParameters)
64+
}
65+
66+
class MyKeysManager {
67+
let keysManager: KeysManager
68+
let nodeSigner: MyNodeSigner
69+
let entropySource: MyEntropySource
70+
let signerProvider: MySignerProvider
71+
72+
init(seed: [UInt8], startingTimeSecs: UInt64, startingTimeNanos: UInt32) {
73+
self.keysManager = KeysManager(seed: seed, startingTimeSecs: startingTimeSecs, startingTimeNanos: startingTimeNanos)
74+
nodeSigner = MyNodeSigner()
75+
entropySource = MyEntropySource()
76+
signerProvider = MySignerProvider()
77+
nodeSigner.myKeysManager = self
78+
entropySource.myKeysManager = self
79+
signerProvider.myKeysManager = self
80+
}
81+
}
82+
83+
class MyNodeSigner: NodeSigner {
84+
var myKeysManager: MyKeysManager?
85+
override func ecdh(recipient: Bindings.Recipient, otherKey: [UInt8], tweak: [UInt8]?) -> Bindings.Result_SharedSecretNoneZ {
86+
print("Getting ecdh")
87+
return myKeysManager!.keysManager.asNodeSigner().ecdh(recipient: recipient, otherKey: otherKey, tweak: tweak)
88+
}
89+
90+
override func getNodeId(recipient: Bindings.Recipient) -> Bindings.Result_PublicKeyNoneZ {
91+
print("Getting getNodeId")
92+
let nodeIdOption = myKeysManager!.keysManager.asNodeSigner().getNodeId(recipient: recipient)
93+
let nodeId = nodeIdOption.getValue()!
94+
return .initWithOk(o: nodeId)
95+
}
96+
97+
override func getInboundPaymentKeyMaterial() -> [UInt8] {
98+
print("Getting getInboundPaymentKeyMaterial")
99+
return myKeysManager!.keysManager.asNodeSigner().getInboundPaymentKeyMaterial()
100+
}
101+
102+
override func signGossipMessage(msg: Bindings.UnsignedGossipMessage) -> Bindings.Result_SignatureNoneZ {
103+
print("Getting signGossipMessage")
104+
return myKeysManager!.keysManager.asNodeSigner().signGossipMessage(msg: msg)
105+
}
106+
107+
override func signInvoice(hrpBytes: [UInt8], invoiceData: [UInt8], recipient: Bindings.Recipient) -> Bindings.Result_RecoverableSignatureNoneZ {
108+
print("Getting signInvoice")
109+
return myKeysManager!.keysManager.asNodeSigner().signInvoice(hrpBytes: hrpBytes, invoiceData: invoiceData, recipient: recipient)
110+
}
111+
}
112+
113+
class MyEntropySource: EntropySource {
114+
var myKeysManager: MyKeysManager?
115+
override func getSecureRandomBytes() -> [UInt8] {
116+
print("Getting getSecureRandomBytes")
117+
return myKeysManager!.keysManager.asEntropySource().getSecureRandomBytes()
118+
}
119+
}
120+
121+
class MySignerProvider: SignerProvider {
122+
var myKeysManager: MyKeysManager?
123+
override func deriveChannelSigner(channelValueSatoshis: UInt64, channelKeysId: [UInt8]) -> Bindings.WriteableEcdsaChannelSigner {
124+
return myKeysManager!.keysManager.asSignerProvider().deriveChannelSigner(channelValueSatoshis: channelValueSatoshis, channelKeysId: channelKeysId)
125+
}
126+
127+
override func generateChannelKeysId(inbound: Bool, channelValueSatoshis: UInt64, userChannelId: [UInt8]) -> [UInt8] {
128+
return myKeysManager!.keysManager.asSignerProvider().generateChannelKeysId(inbound: inbound, channelValueSatoshis: channelValueSatoshis, userChannelId: userChannelId)
129+
}
130+
131+
override func readChanSigner(reader: [UInt8]) -> Bindings.Result_WriteableEcdsaChannelSignerDecodeErrorZ {
132+
return myKeysManager!.keysManager.asSignerProvider().readChanSigner(reader: reader)
133+
}
134+
135+
override func getDestinationScript() -> [UInt8] {
136+
return myKeysManager!.keysManager.asSignerProvider().getDestinationScript()
137+
}
138+
139+
override func getShutdownScriptpubkey() -> Bindings.ShutdownScript {return myKeysManager!.keysManager.asSignerProvider().getShutdownScriptpubkey()
140+
}
141+
}
142+
143+
}

xcode/LDKFramework/LDK.xcodeproj/project.pbxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
07012EA2287753D000148346 /* ldk_ver.h in Headers */ = {isa = PBXBuildFile; fileRef = 07012E9C287753D000148346 /* ldk_ver.h */; settings = {ATTRIBUTES = (Public, ); }; };
1414
07012EA3287753D000148346 /* ldk_rust_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 07012E9D287753D000148346 /* ldk_rust_types.h */; settings = {ATTRIBUTES = (Public, ); }; };
1515
07012EA4287753D000148346 /* lightning.h in Headers */ = {isa = PBXBuildFile; fileRef = 07012E9E287753D000148346 /* lightning.h */; settings = {ATTRIBUTES = (Public, ); }; };
16+
071223672A74FA1200DFEF2E /* WrappedSignerProviderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071223662A74FA1200DFEF2E /* WrappedSignerProviderTests.swift */; };
17+
071223682A74FA1200DFEF2E /* WrappedSignerProviderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 071223662A74FA1200DFEF2E /* WrappedSignerProviderTests.swift */; };
1618
072B062D2941CFF80007BC53 /* ChannelManagerConstructor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07DF14AF29412AF900531169 /* ChannelManagerConstructor.swift */; };
1719
072B063129431EA50007BC53 /* libldk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 072B063029431EA00007BC53 /* libldk.a */; };
1820
072B063229431EAA0007BC53 /* libldk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 072B063029431EA00007BC53 /* libldk.a */; };
@@ -2126,6 +2128,7 @@
21262128
07012E9C287753D000148346 /* ldk_ver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ldk_ver.h; path = headers/ldk_ver.h; sourceTree = SOURCE_ROOT; };
21272129
07012E9D287753D000148346 /* ldk_rust_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ldk_rust_types.h; path = headers/ldk_rust_types.h; sourceTree = SOURCE_ROOT; };
21282130
07012E9E287753D000148346 /* lightning.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lightning.h; path = headers/lightning.h; sourceTree = SOURCE_ROOT; };
2131+
071223662A74FA1200DFEF2E /* WrappedSignerProviderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = WrappedSignerProviderTests.swift; path = ../../../ci/LDKSwift/Tests/LDKSwiftTests/WrappedSignerProviderTests.swift; sourceTree = "<group>"; };
21292132
072B063029431EA00007BC53 /* libldk.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libldk.a; path = binary/libldk.a; sourceTree = "<group>"; };
21302133
07344C54264277EC001CD90E /* LightningDevKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LightningDevKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
21312134
07344C57264277ED001CD90E /* Framework.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Framework.h; path = Framework/Framework.h; sourceTree = SOURCE_ROOT; };
@@ -3440,6 +3443,7 @@
34403443
07CE1EA528E767DB00BB37E4 /* TestFilter.swift */,
34413444
07CE1EA428E767DB00BB37E4 /* TestLogger.swift */,
34423445
07CE1EA228E767DA00BB37E4 /* TestPersister.swift */,
3446+
071223662A74FA1200DFEF2E /* WrappedSignerProviderTests.swift */,
34433447
);
34443448
path = DirectlyLinkedBindingsAppTests;
34453449
sourceTree = "<group>";
@@ -4247,6 +4251,7 @@
42474251
078AAB212A06C7BA00838F50 /* RapidGossipSync.swift in Sources */,
42484252
078AAA112A06C7B900838F50 /* Result_u32GraphSyncErrorZ.swift in Sources */,
42494253
078AAB452A06C7BA00838F50 /* Sleeper.swift in Sources */,
4254+
071223672A74FA1200DFEF2E /* WrappedSignerProviderTests.swift in Sources */,
42504255
078AAA812A06C7B900838F50 /* Result_COption_HTLCDestinationZDecodeErrorZ.swift in Sources */,
42514256
078AA6212A06C7B600838F50 /* Logger.swift in Sources */,
42524257
078AAB152A06C7BA00838F50 /* WarningMessage.swift in Sources */,
@@ -5489,6 +5494,7 @@
54895494
078AA7672A06C7B700838F50 /* Secp256k1Error.swift in Sources */,
54905495
078AA5932A06C7B600838F50 /* TwelveBytes.swift in Sources */,
54915496
078AA80B2A06C7B700838F50 /* Vec_MonitorEventZ.swift in Sources */,
5497+
071223682A74FA1200DFEF2E /* WrappedSignerProviderTests.swift in Sources */,
54925498
078AAB632A06C7BA00838F50 /* UpdateFulfillHTLC.swift in Sources */,
54935499
078AAC2B2A06C7BB00838F50 /* ExpiryTime.swift in Sources */,
54945500
078AAB8F2A06C7BA00838F50 /* Quantity.swift in Sources */,

0 commit comments

Comments
 (0)