@@ -296,6 +296,13 @@ func (p *PrivacyMapper) checkers(db firewalldb.PrivacyMapDB,
296
296
handleClosedChannelsResponse (db , flags , p .randIntn ),
297
297
mid .PassThroughErrorHandler ,
298
298
),
299
+ "/lnrpc.Lightning/BatchOpenChannel" : mid .NewFullRewriter (
300
+ & lnrpc.BatchOpenChannelRequest {},
301
+ & lnrpc.BatchOpenChannelResponse {},
302
+ handleBatchOpenChannelRequest (db , flags ),
303
+ handleBatchOpenChannelResponse (db , flags ),
304
+ mid .PassThroughErrorHandler ,
305
+ ),
299
306
}
300
307
}
301
308
@@ -1106,6 +1113,127 @@ func handleClosedChannelsResponse(db firewalldb.PrivacyMapDB,
1106
1113
}
1107
1114
}
1108
1115
1116
+ func handleBatchOpenChannelRequest (db firewalldb.PrivacyMapDB ,
1117
+ flags session.PrivacyFlags ) func (ctx context.Context ,
1118
+ r * lnrpc.BatchOpenChannelRequest ) (proto.Message , error ) {
1119
+
1120
+ return func (_ context.Context , r * lnrpc.BatchOpenChannelRequest ) (
1121
+ proto.Message , error ) {
1122
+
1123
+ var reqs = make ([]* lnrpc.BatchOpenChannel , len (r .Channels ))
1124
+
1125
+ err := db .Update (func (tx firewalldb.PrivacyMapTx ) error {
1126
+ for i , c := range r .Channels {
1127
+ var err error
1128
+
1129
+ // Note, this only works if the obfuscated
1130
+ // pubkey was already created via other
1131
+ // calls, e.g. via ListChannels or
1132
+ // GetInfo or the like.
1133
+ nodePubkey := c .NodePubkey
1134
+ if ! flags .Contains (session .ClearPubkeys ) {
1135
+ nodePubkey , err = firewalldb .RevealBytes (
1136
+ tx , c .NodePubkey ,
1137
+ )
1138
+ if err != nil {
1139
+ return err
1140
+ }
1141
+ }
1142
+
1143
+ reqs [i ] = & lnrpc.BatchOpenChannel {
1144
+ // Obfuscated fields.
1145
+ NodePubkey : nodePubkey ,
1146
+
1147
+ // Non-obfuscated fields.
1148
+ LocalFundingAmount : c .LocalFundingAmount ,
1149
+ PushSat : c .PushSat ,
1150
+ Private : c .Private ,
1151
+ MinHtlcMsat : c .MinHtlcMsat ,
1152
+ RemoteCsvDelay : c .RemoteCsvDelay ,
1153
+ CloseAddress : c .CloseAddress ,
1154
+ PendingChanId : c .PendingChanId ,
1155
+ CommitmentType : c .CommitmentType ,
1156
+ RemoteMaxValueInFlightMsat : c .RemoteMaxValueInFlightMsat ,
1157
+ RemoteMaxHtlcs : c .RemoteMaxHtlcs ,
1158
+ MaxLocalCsv : c .MaxLocalCsv ,
1159
+ ZeroConf : c .ZeroConf ,
1160
+ ScidAlias : c .ScidAlias ,
1161
+ BaseFee : c .BaseFee ,
1162
+ FeeRate : c .FeeRate ,
1163
+ UseBaseFee : c .UseBaseFee ,
1164
+ UseFeeRate : c .UseFeeRate ,
1165
+ RemoteChanReserveSat : c .RemoteChanReserveSat ,
1166
+ Memo : c .Memo ,
1167
+ }
1168
+ }
1169
+
1170
+ return nil
1171
+ })
1172
+ if err != nil {
1173
+ return nil , err
1174
+ }
1175
+
1176
+ return & lnrpc.BatchOpenChannelRequest {
1177
+ Channels : reqs ,
1178
+ TargetConf : r .TargetConf ,
1179
+ SatPerVbyte : r .SatPerVbyte ,
1180
+ MinConfs : r .MinConfs ,
1181
+ SpendUnconfirmed : r .SpendUnconfirmed ,
1182
+ Label : r .Label ,
1183
+ }, nil
1184
+ }
1185
+ }
1186
+
1187
+ func handleBatchOpenChannelResponse (db firewalldb.PrivacyMapDB ,
1188
+ flags session.PrivacyFlags ) func (ctx context.Context ,
1189
+ r * lnrpc.BatchOpenChannelResponse ) (proto.Message , error ) {
1190
+
1191
+ return func (_ context.Context , r * lnrpc.BatchOpenChannelResponse ) (
1192
+ proto.Message , error ) {
1193
+
1194
+ resps := make ([]* lnrpc.PendingUpdate , len (r .PendingChannels ))
1195
+
1196
+ err := db .Update (func (tx firewalldb.PrivacyMapTx ) error {
1197
+ for i , p := range r .PendingChannels {
1198
+ var (
1199
+ txIdBytes = p .Txid
1200
+ outputIndex = p .OutputIndex
1201
+ )
1202
+
1203
+ if ! flags .Contains (session .ClearChanIDs ) {
1204
+ txIDStr := hex .EncodeToString (p .Txid )
1205
+ txID , outIdx , err := firewalldb .HideChanPoint (
1206
+ tx , txIDStr , p .OutputIndex ,
1207
+ )
1208
+ if err != nil {
1209
+ return err
1210
+ }
1211
+ outputIndex = outIdx
1212
+
1213
+ txIdBytes , err = hex .DecodeString (txID )
1214
+ if err != nil {
1215
+ return err
1216
+ }
1217
+ }
1218
+
1219
+ resps [i ] = & lnrpc.PendingUpdate {
1220
+ Txid : txIdBytes ,
1221
+ OutputIndex : outputIndex ,
1222
+ }
1223
+ }
1224
+
1225
+ return nil
1226
+ })
1227
+ if err != nil {
1228
+ return nil , err
1229
+ }
1230
+
1231
+ return & lnrpc.BatchOpenChannelResponse {
1232
+ PendingChannels : resps ,
1233
+ }, nil
1234
+ }
1235
+ }
1236
+
1109
1237
// maybeHideAmount hides an amount if the privacy flag is not set.
1110
1238
func maybeHideAmount (flags session.PrivacyFlags , randIntn func (int ) (int , error ),
1111
1239
a int64 ) (int64 , error ) {
0 commit comments