feat(pairing,ui): optional machine_npub + bunker_relay override + fee decimal-input UX
Some checks failed
ci.yml / feat(pairing,ui): optional machine_npub + bunker_relay override + fee decimal-input UX (pull_request) Failing after 0s
Some checks failed
ci.yml / feat(pairing,ui): optional machine_npub + bunker_relay override + fee decimal-input UX (pull_request) Failing after 0s
Three changes from the nsecbunkerd#27 bunker-pairing smoke (validated
end-to-end on the Sintra, 2026-06-21); intermingled per-file, so landed
together.
1. Optional machine_npub (model A1) — register UNPAIRED, bunker mints the
identity at pairing:
- machine_npub now nullable (migration m011 rebuilds dca_machines for
sqlite / ALTER ... DROP NOT NULL for postgres; UNIQUE stays, NULLs
don't collide so any number of unpaired machines coexist).
- CreateMachineData.machine_npub -> str | None; create skips the
collision-check + fee publish when blank; api_pair_machine now
publishes the fee config after minting, so an unpaired machine clears
its awaiting-fees gate once paired.
- Supplying an npub up front is the DEVELOPMENT self-key path (a machine
holding its own signing key) — available to anyone but the form field
is explicitly marked DEVELOPMENT ONLY.
- Frontend: npub field optional, required rule dropped, null-safe
display (shortNpub -> "unpaired", guarded slices), empty -> null.
2. bunker_relay override on POST /machines/{id}/pair: PairMachineData gains
bunker_relay; api_pair_machine threads it to pair_spire. Lets the seed's
bunker:// relay differ from the relay lnbits uses to reach the bunker
(internal docker host vs LAN/public) — needed for split-relay / dev
deploys. Without it the smoke had to mint via a script.
3. Fees are decimal fractions, not percents: relabel super + operator fee
inputs ("decimal fraction, 0-0.15") + a shared _assertFeesDecimal()
guard (super/add/edit submits) so a percent typo (3 instead of 0.03)
gets a clear toast, not a raw 400.
refs: nsecbunkerd#27/#36; aiolabs/bitspire#52; coordination smoke 2026-06-21
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
47b7efc53c
commit
73bd274979
5 changed files with 153 additions and 29 deletions
|
|
@ -792,13 +792,13 @@
|
|||
|
||||
<q-input
|
||||
v-model="addMachineDialog.data.machine_npub"
|
||||
label="Machine npub (hex or bech32)"
|
||||
hint="64-char hex pubkey or npub1... bech32 string"
|
||||
label="Machine npub — DEVELOPMENT ONLY (blank = normal bunker pairing)"
|
||||
hint="⚠ Leave blank for normal operation: the bunker mints this machine's key when you pair it (no nsec ever lands on the machine). Only fill this to register a machine that holds its OWN signing key — development / self-signing. Hex or npub1…"
|
||||
color="orange"
|
||||
class="q-mb-md"
|
||||
dense outlined
|
||||
:rules="[
|
||||
v => !!v || 'Required',
|
||||
v => (v && v.length >= 32) || 'Looks too short'
|
||||
v => !v || v.length >= 32 || 'Looks too short — use a full hex/npub, or leave blank'
|
||||
]"></q-input>
|
||||
|
||||
<q-select
|
||||
|
|
@ -819,7 +819,7 @@
|
|||
|
||||
<q-input
|
||||
v-model.number="addMachineDialog.data.operator_cash_in_fee_fraction"
|
||||
label="Operator cash-in fee % (decimal, 0..0.15)"
|
||||
label="Operator cash-in fee (decimal fraction, 0-0.15)"
|
||||
hint="Your per-machine cut on cash-in. Sits on top of the platform fee; cap is 15% total per direction."
|
||||
type="number" step="0.0001" min="0" max="0.15"
|
||||
class="q-mb-md"
|
||||
|
|
@ -827,7 +827,7 @@
|
|||
|
||||
<q-input
|
||||
v-model.number="addMachineDialog.data.operator_cash_out_fee_fraction"
|
||||
label="Operator cash-out fee % (decimal, 0..0.15)"
|
||||
label="Operator cash-out fee (decimal fraction, 0-0.15)"
|
||||
hint="Your per-machine cut on cash-out. Sits on top of the platform fee; cap is 15% total per direction."
|
||||
type="number" step="0.0001" min="0" max="0.15"
|
||||
class="q-mb-md"
|
||||
|
|
@ -1368,12 +1368,12 @@
|
|||
typically a wallet you (the super) own.
|
||||
</p>
|
||||
<q-input v-model.number="superFeeDialog.data.super_cash_in_fee_fraction"
|
||||
label="Cash-in fee % (decimal, 0..0.15)"
|
||||
label="Cash-in fee (decimal fraction, 0-0.15)"
|
||||
hint="0.03 = 3% of principal on cash-in transactions"
|
||||
type="number" step="0.0001" min="0" max="0.15"
|
||||
class="q-mb-md" dense outlined></q-input>
|
||||
<q-input v-model.number="superFeeDialog.data.super_cash_out_fee_fraction"
|
||||
label="Cash-out fee % (decimal, 0..0.15)"
|
||||
label="Cash-out fee (decimal fraction, 0-0.15)"
|
||||
hint="0.03 = 3% of principal on cash-out transactions"
|
||||
type="number" step="0.0001" min="0" max="0.15"
|
||||
class="q-mb-md" dense outlined></q-input>
|
||||
|
|
@ -1627,12 +1627,12 @@
|
|||
<q-input v-model="editMachineDialog.data.fiat_code"
|
||||
label="Fiat code" class="q-mb-md" dense outlined></q-input>
|
||||
<q-input v-model.number="editMachineDialog.data.operator_cash_in_fee_fraction"
|
||||
label="Operator cash-in fee % (decimal, 0..0.15)"
|
||||
label="Operator cash-in fee (decimal fraction, 0-0.15)"
|
||||
hint="Sits on top of the platform cash-in fee. Cap 15% total per direction."
|
||||
type="number" step="0.0001" min="0" max="0.15"
|
||||
class="q-mb-md" dense outlined></q-input>
|
||||
<q-input v-model.number="editMachineDialog.data.operator_cash_out_fee_fraction"
|
||||
label="Operator cash-out fee % (decimal, 0..0.15)"
|
||||
label="Operator cash-out fee (decimal fraction, 0-0.15)"
|
||||
hint="Sits on top of the platform cash-out fee. Cap 15% total per direction."
|
||||
type="number" step="0.0001" min="0" max="0.15"
|
||||
class="q-mb-md" dense outlined></q-input>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue