diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4a96cc82..f5332500 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,8 +25,8 @@ jobs: name: setup runs-on: ubuntu-latest outputs: - sdk-ref: ${{ inputs.sdk-ref || '0.4.0-rc1' }} - package-version: '0.4.0-rc1' + sdk-ref: ${{ inputs.sdk-ref || '0.4.0-rc5' }} + package-version: '0.4.0-rc5' steps: - run: echo "set pre-setup output variables" diff --git a/snippets/csharp/CommunicatingFees.cs b/snippets/csharp/CommunicatingFees.cs new file mode 100644 index 00000000..1be3f349 --- /dev/null +++ b/snippets/csharp/CommunicatingFees.cs @@ -0,0 +1,83 @@ +using Breez.Sdk; + +public class CommunicatingFeesSnippets +{ + public void getFeeInfoBeforeInvoiceCreated(BlockingBreezServices sdk) + { + // ANCHOR: get-fee-info-before-receiving-payment + try + { + var nodeInfo = sdk.NodeInfo(); + + var inboundLiquiditySat = nodeInfo?.inboundLiquidityMsats / 1_000; + + var openingFeeResponse = sdk.OpenChannelFee(new OpenChannelFeeRequest(null)); + var openingFees = openingFeeResponse?.feeParams; + if (openingFees != null) + { + var feePercentage = (openingFees.proportional * 100) / 1_000_000.0; + var minFeeSat = openingFees.minMsat / 1_000; + + if (inboundLiquiditySat == 0) + { + Console.WriteLine( + $"A setup fee of {feePercentage}% with a minimum of {minFeeSat} sats will be applied." + ); + } + else + { + Console.WriteLine( + $"A setup fee of {feePercentage}% with a minimum of {minFeeSat} sats will be applied " + + $"for receiving more than {inboundLiquiditySat} sats." + ); + } + } + } + catch (Exception) + { + // Handle error + } + // ANCHOR_END: get-fee-info-before-receiving-payment + } + + public void GetFeeInfoAfterInvoiceCreated(ReceivePaymentResponse receivePaymentResponse) + { + // ANCHOR: get-fee-info-after-invoice-created + var openingFeeSat = receivePaymentResponse.openingFeeMsat.GetValueOrDefault() / 1000; + Console.WriteLine($"A setup fee of {openingFeeSat} sats is applied to this invoice."); + // ANCHOR_END: get-fee-info-after-invoice-created + } + + public void getFeeInfoReceiveOnchain(BlockingBreezServices sdk) + { + // ANCHOR: get-fee-info-receive-onchain + try + { + var swapInfo = sdk.ReceiveOnchain(new ReceiveOnchainRequest()); + + var minDepositSat = swapInfo?.minAllowedDeposit; + var maxDepositSat = swapInfo?.maxAllowedDeposit; + + var nodeInfo = sdk.NodeInfo(); + var inboundLiquiditySat = nodeInfo?.inboundLiquidityMsats / 1_000; + + var swapOpeningFees = swapInfo?.channelOpeningFees; + if (swapOpeningFees != null) + { + var feePercentage = (swapOpeningFees.proportional * 100) / 1_000_000.0; + var minFeeSat = swapOpeningFees.minMsat / 1_000; + + Console.WriteLine( + $"Send more than {minDepositSat} sats and up to {maxDepositSat} sats to this address. " + + $"A setup fee of {feePercentage}% with a minimum of {minFeeSat} sats will be applied " + + $"for sending more than {inboundLiquiditySat} sats. This address can only be used once." + ); + } + } + catch (Exception) + { + // Handle error + } + // ANCHOR_END: get-fee-info-receive-onchain + } +} diff --git a/snippets/dart_snippets/lib/communicating_fees.dart b/snippets/dart_snippets/lib/communicating_fees.dart new file mode 100644 index 00000000..ebb2dbbc --- /dev/null +++ b/snippets/dart_snippets/lib/communicating_fees.dart @@ -0,0 +1,52 @@ +import 'package:breez_sdk/breez_sdk.dart'; +import 'package:breez_sdk/bridge_generated.dart'; + +Future getFeeInfoBeforeInvoiceCreated() async { + // ANCHOR: get-fee-info-before-receiving-payment + NodeState? nodeInfo = await BreezSDK().nodeInfo(); + if (nodeInfo != null) { + int inboundLiquiditySat = nodeInfo.inboundLiquidityMsats ~/ 1000; + + OpenChannelFeeResponse openingFeeResponse = await BreezSDK().openChannelFee(req: OpenChannelFeeRequest()); + + OpeningFeeParams openingFees = openingFeeResponse.feeParams; + double feePercentage = (openingFees.proportional * 100) / 1000000; + int minFeeSat = openingFees.minMsat ~/ 1000; + + if (inboundLiquiditySat == 0) { + print("A setup fee of $feePercentage% with a minimum of $minFeeSat sats will be applied."); + } else { + print("A setup fee of $feePercentage% with a minimum of $minFeeSat sats will be applied for receiving more than $inboundLiquiditySat sats."); + } + } + // ANCHOR_END: get-fee-info-before-receiving-payment +} + +Future getFeeInfoAfterInvoiceCreated({required ReceivePaymentResponse receivePaymentResponse}) async { + // ANCHOR: get-fee-info-after-invoice-created + int openingFeeSat = (receivePaymentResponse.openingFeeMsat ?? 0) / 1000 as int; + print("A setup fee of $openingFeeSat sats is applied to this invoice."); + // ANCHOR_END: get-fee-info-after-invoice-created +} + +Future getFeeInfoReceiveOnchain() async { + // ANCHOR: get-fee-info-receive-onchain + SwapInfo swapInfo = await BreezSDK().receiveOnchain(req: ReceiveOnchainRequest()); + + int minDepositSat = swapInfo.minAllowedDeposit; + int maxDepositSat = swapInfo.maxAllowedDeposit; + + NodeState? nodeInfo = await BreezSDK().nodeInfo(); + if (nodeInfo != null) { + int inboundLiquiditySat = nodeInfo.inboundLiquidityMsats ~/ 1000; + + OpeningFeeParams? swapOpeningFees = swapInfo.channelOpeningFees; + if (swapOpeningFees != null) { + double feePercentage = (swapOpeningFees.proportional * 100) / 1000000; + int minFeeSat = swapOpeningFees.minMsat ~/ 1000; + + print("Send more than $minDepositSat sats and up to $maxDepositSat sats to this address. A setup fee of $feePercentage% with a minimum of $minFeeSat sats will be applied for sending more than $inboundLiquiditySat sats. This address can only be used once."); + } + } + // ANCHOR_END: get-fee-info-receive-onchain +} diff --git a/snippets/dart_snippets/lib/receive_payment.dart b/snippets/dart_snippets/lib/receive_payment.dart index 144c3d13..da284605 100644 --- a/snippets/dart_snippets/lib/receive_payment.dart +++ b/snippets/dart_snippets/lib/receive_payment.dart @@ -11,5 +11,6 @@ Future receivePayment() async { print(receivePaymentResponse.lnInvoice); // ANCHOR_END: receive-payment + return receivePaymentResponse; } diff --git a/snippets/dart_snippets/pubspec.lock b/snippets/dart_snippets/pubspec.lock index f31fdf2c..219d2f72 100644 --- a/snippets/dart_snippets/pubspec.lock +++ b/snippets/dart_snippets/pubspec.lock @@ -55,7 +55,7 @@ packages: path: "packages/breez-sdk-flutter" relative: true source: path - version: "0.4.0-rc1" + version: "0.4.0-rc5" build: dependency: transitive description: diff --git a/snippets/go/buy_btc.go b/snippets/go/buy_btc.go index 4e2714dc..3e20a409 100644 --- a/snippets/go/buy_btc.go +++ b/snippets/go/buy_btc.go @@ -11,8 +11,11 @@ func BuyBitcoin() { buyBitcoinRequest := breez_sdk.BuyBitcoinRequest{ Provider: breez_sdk.BuyBitcoinProviderMoonpay, } - if buyBitcoinResponse, err := sdk.BuyBitcoin(buyBitcoinRequest); err == nil { - log.Printf("%#v", buyBitcoinResponse) + + buyBitcoinResponse, err := sdk.BuyBitcoin(buyBitcoinRequest) + if err != nil { + return err } + log.Printf("%#v", buyBitcoinResponse) // ANCHOR_END: buy-btc } diff --git a/snippets/go/closed_channel.go b/snippets/go/closed_channel.go index 2696ba37..d949ff08 100644 --- a/snippets/go/closed_channel.go +++ b/snippets/go/closed_channel.go @@ -11,17 +11,23 @@ func PrepareRedeemOnchainFunds(feeRate uint32) { satPerVbyte := feeRate destinationAddress := "bc1.." req := breez_sdk.PrepareRedeemOnchainFundsRequest{SatPerVbyte: satPerVbyte, ToAddress: destinationAddress} - if prepareRedeemOnchainFundsResponse, err := sdk.PrepareRedeemOnchainFunds(req); err == nil { - log.Printf("PrepareRedeemOnchainFundsRequest is %#v", prepareRedeemOnchainFundsResponse) + + prepareRedeemOnchainFundsResponse, err := sdk.PrepareRedeemOnchainFunds(req) + if err != nil { + return err } + log.Printf("PrepareRedeemOnchainFundsRequest is %#v", prepareRedeemOnchainFundsResponse) // ANCHOR_END: prepare-redeem-onchain-funds } func RedeemOnchainFunds(satPerVbyte uint32, toAddress string) { // ANCHOR: redeem-onchain-funds req := breez_sdk.RedeemOnchainFundsRequest{SatPerVbyte: satPerVbyte, ToAddress: toAddress} - if redeemOnchainFundsResponse, err := sdk.RedeemOnchainFunds(req); err == nil { - log.Printf("RedeemOnchainFunds error %#v", redeemOnchainFundsResponse) + + redeemOnchainFundsResponse, err := sdk.RedeemOnchainFunds(req) + if err != nil { + return err } + log.Printf("RedeemOnchainFunds error %#v", redeemOnchainFundsResponse) // ANCHOR_END: redeem-onchain-funds } diff --git a/snippets/go/communicating_fees.go b/snippets/go/communicating_fees.go new file mode 100644 index 00000000..2291b467 --- /dev/null +++ b/snippets/go/communicating_fees.go @@ -0,0 +1,78 @@ +package example + +import ( + "log" + + "github.com/breez/breez-sdk-go/breez_sdk" +) + +func getFeeInfoBeforeInvoiceCreated() { + // ANCHOR: get-fee-info-before-receiving-payment + nodeInfo, err := sdk.NodeInfo() + if err != null { + return err + } + + var inboundLiquiditySat = nodeInfo.InboundLiquidityMsats / 1_000 + + openingFeeResponse, err := sdk.OpenChannelFee(breez_sdk.OpenChannelFeeRequest{}) + if err != nil { + return err + } + + var openingFees = openingFeeResponse.FeeParams + var feePercentage = (openingFees.Proportional * 100) / 1_000_000.0 + var minFeeSat = openingFees.MinMsat / 1_000 + + if inboundLiquiditySat == 0 { + log.Printf( + "A setup fee of %v%% with a minimum of %v sats will be applied.", + feePercentage, minFeeSat) + } else { + log.Printf( + "A setup fee of %v%% with a minimum of %v sats will be applied"+ + "for receiving more than %v sats.", + feePercentage, minFeeSat, inboundLiquiditySat) + } + // ANCHOR_END: get-fee-info-before-receiving-payment +} + +func GetFeeInfoAfterInvoiceCreated(receivePaymentResponse breez_sdk.ReceivePaymentResponse) { + // ANCHOR: get-fee-info-after-invoice-created + var openingFeeSat int + openingFeeMsat := receivePaymentResponse.OpeningFeeMsat + if openingFeeMsat != nil { + openingFeeSat = int(*openingFeeMsat / 1_000) + } + log.Printf("A setup fee of %v sats is applied to this invoice.", openingFeeSat) + // ANCHOR_END: get-fee-info-after-invoice-created +} + +func getFeeInfoReceiveOnchain() { + // ANCHOR: get-fee-info-receive-onchain + swapInfo, err := sdk.ReceiveOnchain(breez_sdk.ReceiveOnchainRequest{}) + if err != nil { + return err + } + + var minDepositSat = swapInfo.MinAllowedDeposit + var maxDepositSat = swapInfo.MaxAllowedDeposit + + nodeInfo, err := sdk.NodeInfo() + if err != nil { + return err + } + + var inboundLiquiditySat = nodeInfo.InboundLiquidityMsats / 1_000 + + var swapOpeningFees = swapInfo.ChannelOpeningFees + var feePercentage = (swapOpeningFees.Proportional * 100) / 1_000_000.0 + var minFeeSat = swapOpeningFees.MinMsat / 1_000 + + log.Printf( + "Send more than %v sats and up to %v sats to this address. "+ + "A setup fee of %v%% with a minimum of %v sats will be applied "+ + "for sending more than %v sats. This address can only be used once.", + minDepositSat, maxDepositSat, feePercentage, minFeeSat, inboundLiquiditySat) + // ANCHOR_END: get-fee-info-receive-onchain +} diff --git a/snippets/go/connecting_lsp.go b/snippets/go/connecting_lsp.go index e9ccce32..10816ece 100644 --- a/snippets/go/connecting_lsp.go +++ b/snippets/go/connecting_lsp.go @@ -6,21 +6,29 @@ import ( func GetLspInfo() { // ANCHOR: get-lsp-info - if lspId, err := sdk.LspId(); lspId != nil && err == nil { + lspId, err := sdk.LspId() + if err != nil { + return err + } + if lspId != nil { log.Printf("%#v", *lspId) } - if lspInfo, err := sdk.LspInfo(); err == nil { - log.Printf("%#v", lspInfo) + lspInfo, err := sdk.LspInfo() + if err != nil { + return err } + log.Printf("%#v", lspInfo) // ANCHOR_END: get-lsp-info } func ListLsps() { // ANCHOR: list-lsps - if lspList, err := sdk.ListLsps(); err == nil { - log.Printf("%#v", lspList) + lspList, err := sdk.ListLsps() + if err != nil { + return err } + log.Printf("%#v", lspList) // ANCHOR_END: list-lsps } @@ -28,8 +36,9 @@ func ConnectLsp() { // ANCHOR: connect-lsp lspId := "your selected lsp id" - if err := sdk.ConnectLsp(lspId); err != nil { - log.Printf("%#v", err) + _, err := sdk.ConnectLsp(lspId) + if err != nil { + return err } // ANCHOR_END: connect-lsp } diff --git a/snippets/go/fiat_currencies.go b/snippets/go/fiat_currencies.go index 5e2ffe8d..98651322 100644 --- a/snippets/go/fiat_currencies.go +++ b/snippets/go/fiat_currencies.go @@ -6,16 +6,20 @@ import ( func ListFiatCurrencies() { // ANCHOR: list-fiat-currencies - if fiatCurrencies, err := sdk.ListFiatCurrencies(); err == nil { - log.Printf("%#v", fiatCurrencies) + fiatCurrencies, err := sdk.ListFiatCurrencies() + if err != nil { + return err } + log.Printf("%#v", fiatCurrencies) // ANCHOR_END: list-fiat-currencies } func FetchFiatRates() { // ANCHOR: fetch-fiat-rates - if fiatRates, err := sdk.FetchFiatRates(); err == nil { - log.Printf("%#v", fiatRates) + fiatRates, err := sdk.FetchFiatRates() + if err != nil { + return err } + log.Printf("%#v", fiatRates) // ANCHOR_END: fetch-fiat-rates } diff --git a/snippets/go/getting_started.go b/snippets/go/getting_started.go index 84b9816c..bdee3612 100644 --- a/snippets/go/getting_started.go +++ b/snippets/go/getting_started.go @@ -19,6 +19,7 @@ func GettingStarted() *breez_sdk.BlockingBreezServices { seed, err := breez_sdk.MnemonicToSeed("") if err != nil { log.Fatalf("MnemonicToSeed failed: %#v", err) + return err } inviteCode := "" @@ -38,11 +39,11 @@ func GettingStarted() *breez_sdk.BlockingBreezServices { sdk, err := breez_sdk.Connect(connectRequest, BreezListener{}) if err != nil { log.Fatalf("Connect failed: %#v", err) + return err } return sdk } - // ANCHOR_END: init-sdk func GettingStartedRestoreOnly(config breez_sdk.Config, seed []uint8) *breez_sdk.BlockingBreezServices { @@ -54,20 +55,23 @@ func GettingStartedRestoreOnly(config breez_sdk.Config, seed []uint8) *breez_sdk RestoreOnly: &restoreOnly, } sdk, err := breez_sdk.Connect(connectRequest, BreezListener{}) - // ANCHOR_END: init-sdk-restore-only if err != nil { log.Fatalf("Connect failed: %#v", err) + return err } + // ANCHOR_END: init-sdk-restore-only return sdk } func FetchBalance() { // ANCHOR: fetch-balance - if nodeInfo, err := sdk.NodeInfo(); err != nil { - lnBalance := nodeInfo.ChannelsBalanceMsat - onchainBalance := nodeInfo.OnchainBalanceMsat - - log.Printf("%#v %#v", lnBalance, onchainBalance) + nodeInfo, err := sdk.NodeInfo() + if err != nil { + return err } + + lnBalance := nodeInfo.ChannelsBalanceMsat + onchainBalance := nodeInfo.OnchainBalanceMsat + log.Printf("%#v %#v", lnBalance, onchainBalance) // ANCHOR_END: fetch-balance } diff --git a/snippets/go/go.mod b/snippets/go/go.mod index 158ad61b..ac903131 100644 --- a/snippets/go/go.mod +++ b/snippets/go/go.mod @@ -2,6 +2,6 @@ module main go 1.19 -require github.com/breez/breez-sdk-go v0.4.0-rc1 +require github.com/breez/breez-sdk-go v0.4.0-rc5 replace github.com/breez/breez-sdk-go => ./packages/breez-sdk-go diff --git a/snippets/go/list_payments.go b/snippets/go/list_payments.go index 858a561d..5b42abe5 100644 --- a/snippets/go/list_payments.go +++ b/snippets/go/list_payments.go @@ -8,9 +8,11 @@ import ( func ListPayments() { // ANCHOR: list-payments - if payments, err := sdk.ListPayments(breez_sdk.ListPaymentsRequest{}); err == nil { - log.Printf("%#v", payments) + payments, err := sdk.ListPayments(breez_sdk.ListPaymentsRequest{}) + if err != nil { + return err } + log.Printf("%#v", payments) // ANCHOR_END: list-payments } @@ -24,8 +26,11 @@ func ListPaymentsFiltered() { FromTimestamp: &fromTimestamp, IncludeFailures: &includeFailures, } - if payments, err := sdk.ListPayments(listPaymentsRequest); err == nil { - log.Printf("%#v", payments) + + payments, err := sdk.ListPayments(listPaymentsRequest) + if err != nil { + return err } + log.Printf("%#v", payments) // ANCHOR_END: list-payments-filtered } diff --git a/snippets/go/lnurl_auth.go b/snippets/go/lnurl_auth.go index 9ce0d840..f34e3da1 100644 --- a/snippets/go/lnurl_auth.go +++ b/snippets/go/lnurl_auth.go @@ -11,17 +11,23 @@ func LnurlAuth() { // keyauth://domain.com/auth?key=val lnurlAuthUrl := "lnurl1dp68gurn8ghj7mr0vdskc6r0wd6z7mrww4excttvdankjm3lw3skw0tvdankjm3xdvcn6vtp8q6n2dfsx5mrjwtrxdjnqvtzv56rzcnyv3jrxv3sxqmkyenrvv6kve3exv6nqdtyv43nqcmzvdsnvdrzx33rsenxx5unqc3cxgeqgntfgu" - if input, err := breez_sdk.ParseInput(lnurlAuthUrl); err != nil { - switch inputType := input.(type) { - case breez_sdk.InputTypeLnUrlAuth: - if result, err := sdk.LnurlAuth(inputType.Data); err != nil { - switch result.(type) { - case breez_sdk.LnUrlCallbackStatusOk: - log.Printf("Successfully authenticated") - default: - log.Printf("Failed to authenticate") - } - } + input, err := breez_sdk.ParseInput(lnurlAuthUrl) + if err != nil { + return err + } + + switch inputType := input.(type) { + case breez_sdk.InputTypeLnUrlAuth: + result, err := sdk.LnurlAuth(inputType.Data) + if err != nil { + return err + } + + switch result.(type) { + case breez_sdk.LnUrlCallbackStatusOk: + log.Printf("Successfully authenticated") + default: + log.Printf("Failed to authenticate") } } // ANCHOR_END: lnurl-auth diff --git a/snippets/go/lnurl_pay.go b/snippets/go/lnurl_pay.go index b92f5b20..59a29d48 100644 --- a/snippets/go/lnurl_pay.go +++ b/snippets/go/lnurl_pay.go @@ -13,26 +13,33 @@ func LnurlPay() { // lnurl1dp68gurn8ghj7mr0vdskc6r0wd6z7mrww4excttsv9un7um9wdekjmmw84jxywf5x43rvv35xgmr2enrxanr2cfcvsmnwe3jxcukvde48qukgdec89snwde3vfjxvepjxpjnjvtpxd3kvdnxx5crxwpjvyunsephsz36jf lnurlPayUrl := "lightning@address.com" - if input, err := breez_sdk.ParseInput(lnurlPayUrl); err != nil { - switch inputType := input.(type) { - case breez_sdk.InputTypeLnUrlPay: - amountMsat := inputType.Data.MinSendable - optionalComment := "" - optionalPaymentLabel := "