Skip to content

BROKEN message when dual-funding flow is interrupted #8902

@rustyrussell

Description

@rustyrussell

Was reworking test_inflight_dbload (it used @ in dev-disconnect, which was removed in 2022), and it now triggers a BROKEN message:

lightningd-2 2026-02-16T00:50:21.715Z DEBUG   038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b-dualopend-chan#2: billboard: channel open: commitment received, sending to lightningd to save
lightningd-2 2026-02-16T00:50:21.716Z INFO    038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b-chan#2: State changed from DUALOPEND_OPEN_COMMIT_READY to DUALOPEND_OPEN_COMMITTED
lightningd-2 2026-02-16T00:50:21.717Z TRACE   lightningd: Calling openchannel2_sign hook of plugin funder
lightningd-2 2026-02-16T00:50:21.717Z DEBUG   plugin-funder: Cleaning up inflights for peer id 038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b
lightningd-2 2026-02-16T00:50:21.717Z DEBUG   plugin-funder: Calling `unreserveinputs` for channel 44defb4040f1b237b4fed72f15076c3b65bc1d7e78df7979fc96140ea759a70e
lightningd-2 2026-02-16T00:50:21.717Z DEBUG   plugin-funder: `unreserveinputs` for channel 44defb4040f1b237b4fed72f15076c3b65bc1d7e78df7979fc96140ea759a70e completed. {"reservations":[{"txid":"126cac6292ec360c3394ac3cb8c66e28d8846e1f80855ae1948257519fd3c53b","vout":1,"was_reserved":true,"reserved":false}]}
lightningd-2 2026-02-16T00:50:21.718Z DEBUG   plugin-funder: nothing to sign for channel 44defb4040f1b237b4fed72f15076c3b65bc1d7e78df7979fc96140ea759a70e
lightningd-2 2026-02-16T00:50:21.718Z TRACE   lightningd: Plugin funder returned from openchannel2_sign hook call
lightningd-2 2026-02-16T00:50:21.721Z **BROKEN** 038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b-chan#2: Plugin must return a 'psbt' with signatures for their inputs cHNidP8BAgQCAAAAAQMEZwAAAAEEAQIBBQEDAQYBAwH7BAIAAAAAAQBxAgAAAAEL1Wn4sjOuH+DTw33elYaLvUE/8wwIuIm2LrZ6FR8/WAEAAAAA/f///wLmlqMnAQAAABYAFEWf/Y/GqJj7OoixC3C6M44aqgkrAC0xAQAAAAAWABQiCFcgs0wFJCdRgvOrU0Xh4eFgKEYAAAABAR8ALTEBAAAAABYAFCIIVyCzTAUkJ1GC86tTReHh4WAoAQ4gO8XTn1FXgpThWoWAH26E2Chuxrg8rJQzDDbskmKsbBIBDwQBAAAAARAE/f///wz8CWxpZ2h0bmluZwICAAEM/AlsaWdodG5pbmcBCAtEFzJSAqyVAAEAcQIAAAABzPjMrKIPQHfgpxUKOpEogGgR6P7d94ogI7Of4/Y0PAMAAAAAAP3///8CAC0xAQAAAAAWABTiR1/vOKdPfmxe7PFjWeVXM/PEanPE1CgBAAAAFgAUItLA1XGRFGE6IBPRIg2fW8lXUEtlAAAAAQ4gC9Vp+LIzrh/g08N93pWGi71BP/MMCLiJti62ehUfP1gBDwQAAAAAARAE/f///wz8CWxpZ2h0bmluZwEIIY8qQOKnIsAAAQMIvFoPAAAAAAABBCIAID61PUnjNkRJ+/ajERdRze7iVno67iMXoAjkLMr2cRaVDPwJbGlnaHRuaW5nAQg3GPz+LlL80AABAwhCbikBAAAAAAEEIlEgn6TSTp2kPFv4/A2XNtTkRSOKzXFNBoEW31Fl0Hkduh0M/AlsaWdodG5pbmcBCEpMDd2j8U7KAAEDCGKIKQEAAAAAAQQiUSCa/c4YhltjFE+XtgR8pjjuQZE0uEoS8CY9w1eCJfHZ8wz8CWxpZ2h0bmluZwEIX9ajIp8fqXMA
lightningd-2 2026-02-16T00:50:21.721Z **BROKEN** 038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b-dualopend-chan#2: STATUS_FAIL_MASTER_IO: Error parsing 7011: 1b5b50656572206572726f7220776974682050534254207369676e6174757265732e00

Here's the modified test:

@pytest.mark.openchannel('v2')
def test_inflight_dbload(node_factory, bitcoind):
    """Bad db field access breaks Postgresql on startup with opening leases"""
    disconnects = ["+WIRE_COMMITMENT_SIGNED"]

    opts = [{'experimental-dual-fund': None, 'dev-no-reconnect': None,
             'may_reconnect': True, 'disconnect': disconnects},
            {'experimental-dual-fund': None, 'dev-no-reconnect': None,
             'may_reconnect': True, 'funder-policy': 'match',
             'funder-policy-mod': 100, 'lease-fee-base-sat': '100sat',
             'lease-fee-basis': 100}]

    l1, l2 = node_factory.get_nodes(2, opts=opts)

    feerate = 2000
    amount = 500000
    l1.fundwallet(20000000)
    l2.fundwallet(20000000)

    # l1 leases a channel from l2
    l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
    rates = l1.rpc.dev_queryrates(l2.info['id'], amount, amount)
    l1.rpc.fundchannel(l2.info['id'], amount, request_amt=amount,
                       feerate='{}perkw'.format(feerate),
                       compact_lease=rates['compact_lease'])
    l1.daemon.wait_for_log(r'dev_disconnect: .WIRE_COMMITMENT_SIGNED')

    l1.restart()


Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions