docs: public synchronized void provideRefundSignature(byte[] theirSignature, @Nullable KeyParameter userKey)
              throws SignatureDecodeException, VerificationException {
          checkNotNull(theirSignature);
          stateMachine.checkState(State.WAITING_FOR_SIGNED_REFUND);
          TransactionSignature theirSig = TransactionSignature.decodeFromBitcoin(theirSignature, true, false);
          if (theirSig.sigHashMode() != Transaction.SigHash.NONE || !theirSig.anyoneCanPay())
              throw new VerificationException("Refund signature was not SIGHASH_NONE|SIGHASH_ANYONECANPAY");
          // Sign the refund transaction ourselves.
          final TransactionOutput multisigContractOutput = multisigContract.getOutput(0);
          try {
              multisigScript = multisigContractOutput.getScriptPubKey();
          } catch (ScriptException e) {
              throw new RuntimeException(e);  // Cannot happen: we built this ourselves.
          }
          TransactionSignature ourSignature =
                  refundTx.calculateSignature(0, myKey.maybeDecrypt(userKey),
                          multisigScript, Transaction.SigHash.ALL, false);
          // Insert the signatures.
          Script scriptSig = ScriptBuilder.createMultiSigInputScript(ourSignature, theirSig);
          log.info("Refund scriptSig: {}", scriptSig);
          log.info("Multi-sig contract scriptPubKey: {}", multisigScript);
          TransactionInput refundInput = refundTx.getInput(0);
          refundInput.setScriptSig(scriptSig);
          refundInput.verify(multisigContractOutput);
          stateMachine.transition(State.SAVE_STATE_IN_WALLET);
      }