GithubHelp home page GithubHelp logo

galoymoney / blink-mobile Goto Github PK

View Code? Open in Web Editor NEW
140.0 140.0 128.0 177.09 MB

The Everyday Bitcoin Wallet

Home Page: https://www.blink.sv

License: MIT License

TypeScript 97.59% Ruby 0.31% Starlark 0.08% Java 0.02% JavaScript 0.85% Shell 0.55% C 0.01% Objective-C 0.01% Dockerfile 0.06% Makefile 0.02% Objective-C++ 0.04% Nix 0.15% Kotlin 0.32%
bitcoin wallet

blink-mobile's People

Contributors

adam-stover avatar aditi-singh16 avatar circle-bot avatar cryptosalomao avatar danarchos avatar danwebb1 avatar daviroo avatar dependabot[bot] avatar dolcalmi avatar eimolina avatar extheoisah avatar galoybot avatar galoybot-app[bot] avatar galoybot-circleci avatar jrbuhl93 avatar krtk6160 avatar leesalminen avatar maxwelldg avatar mfferreira avatar mohsen-ghafouri avatar nicolasburtey avatar ntheile avatar prakhar-agarwal-byte avatar rimbener avatar samerbuna avatar sandipndev avatar secondl1ght avatar transifex-integration[bot] avatar unclesamtoshi avatar vindard avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

blink-mobile's Issues

add minimum for onchain fee

it doens't make sense to try to send 1 sat to an onchain address, and lnd refuse to estimate transaction for such low. figure out what the lowest limit should be from lnd.

make payment to lnurl possible

currently payment in the form of lnurl-pay are not accepted by the mobile application.

lnurl-pay is very useful in the context of printed QR code, such that a merchant could have a printed QR code and their customer could pay by simply scanning the QR code, whether they use the Galoy wallet or any other wallets that accept lnurl-pay.

Eventually we want to work on lnurl with our own platform, but on the mobile side, the task can be developped independantly by using other platforms. a good way to test this is to use this messaging platform.

on scanning the QR code from https://chat.blixtwallet.com/, our wallet should ask for the invoice, have a screen for confirmation and then pay it.

BlueWallet has a complete integration of lnurl so looking at their repo is a good way to understand the whole flow.

show bitcoin address in sent onchain transaction

This would be useful to:

  • to check which address some fund has been sent to, without going to the block explorer
  • send back btc to the same address (not recommended privacy-wise but useful in some scenario, ie when developing)

IMG_4FBEBB3325B3-1

build issue on android

not sure why this is error has popping up.
build work on local machine on debug

error log:

The input changes require a full rebuild for incremental task ':app:mergeReleaseAssets'.
Unable do incremental execution: full task run
file or directory '/home/circleci/galoy-mobile/android/app/libs', not found
Transforming hermes-release.aar with JetifyTransform
Transforming hermes-release.aar with ExtractAarTransform
Transforming hermes-release.aar with AarTransform
file or directory '/home/circleci/galoy-mobile/node_modules/@remobile/react-native-qrcode-local-image/android/libs', not found
file or directory '/home/circleci/galoy-mobile/node_modules/react-native-inappbrowser-reborn/android/libs', not found
file or directory '/home/circleci/galoy-mobile/node_modules/react-native-push-notification/android/libs', not found
Task :app:mergeReleaseAssets in app Finished
:app:mergeReleaseAssets (Thread[Execution worker for ':' Thread 4,5,main]) completed. Took 0.206 secs.
:app:bundleReleaseJsAndAssets (Thread[Execution worker for ':' Thread 4,5,main]) started.

> Task :app:bundleReleaseJsAndAssets
Task :app:bundleReleaseJsAndAssets in app Starting
Caching disabled for task ':app:bundleReleaseJsAndAssets' because:
  Build cache is disabled
Task ':app:bundleReleaseJsAndAssets' is not up-to-date because:
  No history is available.
Starting process 'command 'node''. Working directory: /home/circleci/galoy-mobile Command: node /home/circleci/galoy-mobile/node_modules/@react-native-community/cli/build/bin.js bundle --platform android --dev false --reset-cache --entry-file index.js --bundle-output /home/circleci/galoy-mobile/android/app/build/generated/assets/react/release/index.android.bundle --assets-dest /home/circleci/galoy-mobile/android/app/build/generated/res/react/release --sourcemap-output /home/circleci/galoy-mobile/android/app/build/intermediates/sourcemaps/react/release/index.android.bundle.packager.map
Successfully started process 'command 'node''
warning: the transform cache was reset.
                    Welcome to Metro!
              Fast - Scalable - Integrated


Task :app:bundleReleaseJsAndAssets in app Finished

> Task :app:bundleReleaseJsAndAssets FAILED
:app:bundleReleaseJsAndAssets (Thread[Execution worker for ':' Thread 4,5,main]) completed. Took 6 mins 15.689 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:bundleReleaseJsAndAssets'.
> Process 'command 'node'' finished with non-zero exit value 137

* Try:
Run with --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:bundleReleaseJsAndAssets'.
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$3(ExecuteActionsTaskExecuter.java:186)
	at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:268)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:184)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:411)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:398)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:391)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:377)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: org.gradle.process.internal.ExecException: Process 'command 'node'' finished with non-zero exit value 137
	at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:414)
	at org.gradle.process.internal.DefaultExecAction.execute(DefaultExecAction.java:38)
	at org.gradle.api.tasks.AbstractExecTask.exec(AbstractExecTask.java:70)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:494)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:479)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:462)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$400(ExecuteActionsTaskExecuter.java:105)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:273)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:251)
	at org.gradle.internal.execution.steps.ExecuteStep.lambda$executeOperation$1(ExecuteStep.java:66)
	at org.gradle.internal.execution.steps.ExecuteStep.executeOperation(ExecuteStep.java:66)
	at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:34)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:44)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44)
	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:34)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:72)
	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:42)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:53)
	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:39)
	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:44)
	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:77)
	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:58)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:54)
	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:32)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:57)
	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:38)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:63)
	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:30)
	at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:176)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:76)
	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:47)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:43)
	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:32)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:39)
	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:25)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:102)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:95)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:83)
	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:44)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:96)
	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:52)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:83)
	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:54)
	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:88)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:88)
	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:46)
	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:34)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:43)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$3.withWorkspace(ExecuteActionsTaskExecuter.java:286)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:43)
	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:33)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:40)
	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:30)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:54)
	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:40)
	at org.gradle.internal.execution.impl.DefaultExecutionEngine.execute(DefaultExecutionEngine.java:41)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:183)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:183)
	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:411)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:398)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:391)
	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:377)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)

integration of the translation of the quiz

Describe the bug

most of the app is being translate in Spanish but not the quiz.

the quizz is quite complex so the translation file is (mostly) being generated programmatically from a google sheet. the script is in utils/parseCSV.js

Add "send max." button to send screen

Describe the solution you'd like
When sending some sats, it would be good to have a "send max." button to send all the available balance. It's useful when doing checkout

Suggestion:
Put it on the left side of the amount input component
image

manual upload apk function on circleci doesn't work

issue:

#!/bin/bash --login -o pipefail
cd ~/android/app/build
VERSION_CODE=$(jq .elements[0].apkData.versionCode ./intermediates/instant_app_manifest/release/output.json)
cd ./outputs/apk/release/
gsutil cp ./app-release.apk gs://bitcoin-beach-wallet/"$VERSION_CODE".apk
gsutil cp ./app-release.apk gs://bitcoin-beach-wallet/latest.apk

/home/circleci/.rvm/scripts/extras/bash_zsh_support/chpwd/function.sh: line 5: cd: /home/circleci/android/app/build: No such file or directory
jq: error: Could not open file ./intermediates/instant_app_manifest/release/output.json: No such file or directory
/home/circleci/.rvm/scripts/extras/bash_zsh_support/chpwd/function.sh: line 5: cd: ./outputs/apk/release/: No such file or directory
CommandException: No URLs matched: ./app-release.apk
CommandException: No URLs matched: ./app-release.apk

Exited with code exit status 1
CircleCI received exit code 1

icon and text not showing on latest build

Describe the bug

The home page should show 3 buttons for the payment and some text, on the last build it just show a white button.

To Reproduce
Build with current master.
Problem is present both on Android and iOS

Screenshots
IMG_C1EE302CB75B-1

Additional context
I have not looked into the issue but I'm not sure why this is happening, is it a regression related to some previous (I had a look quickly and see nothing obvious related) or related to some third party dependancy.

The button are based on the react native element and we use an old way to describe the syntax, there has been warning on it on the console for some time now. maybe it's related.

Running locally on Mac M1 - Gradle Issue?

Describe the bug

After cloning the repo and installing the dependencies, I got an error running react-native run-android

I downloaded Android Studio, and Java 13 with OpenJDK

Error: Command failed: ./gradlew app:installDebug -PreactNativeDevServerPort=8081
OpenJDK 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'GaloyApp'.
> Could not resolve all dependencies for configuration ':classpath'.
   > Could not create service of type OutputFilesRepository using ExecutionGradleServices.createOutputFilesRepository().
      > Timeout waiting to lock Build Output Cleanup Cache (/Volumes/SSD/Code/galoy-mobile/android/.gradle/buildOutputCleanup). It is currently in use by another Gradle instance.

To Reproduce
Steps to reproduce the behavior:

  1. Clone Repo
  2. Install & Configure Android Studio
  3. Download Java 13
  4. Download Android emulator
  5. yarn install
  6. react-native run-android

Expected behavior

Open the Android emulator

Is anyone developing on a M1 Mac? I think that might be at the root of the problem, Java not playing nice with the M1 chip. Any help would be appreciated!

add whatsapp phone number for support in the mobile wallet

Is your feature request related to a problem? Please describe.
People who want to reach out for any question on the wallet don't know how to do it.

Describe the solution you'd like
There is no easy way to contact the support from the app currently. The easiest way to get started because we think of a broader approach is to add a button from the settings to open the whatsapp app when tapping on a button.

The number can be hardcoded for now. We could provide the number with an API through the backend in later update.

Describe alternatives you've considered
In app messaging, but would take a long time to implement

Additional context
Add any other context or screenshots about the feature request here.

Check Clipboard while Authenticating

Check clipboard is called with a useEffect on the RootStack. This will open the clipboard before the user has authenticated if they have a validPayment in their clipboard. The clipboard should only show after the user has authenticated.

scanning issue with onchain QR code

Describe the bug
Salim in El Zonte has reported that our QR code doesn't work with many wallets: "trust wallet, binance, okex, strike and wallet of satoshi"

To Reproduce
Steps to reproduce the behavior:

  1. Open BitcoinBeach
  2. Tap on Receive
  3. Show the Onchain QR code (not the lightning invoice showing first)
  4. Scan this QR code with other wallet

Additional context
Could this be because there is a bitcoin: prefix? I think this is supposed to be the standard from a bitcoin perspective. maybe it's unrelated

refactoring of the styles/css

Is your feature request related to a problem? Please describe.
The styling of the app has not been done in a very cohesive way. there are a lot of css settings being overrided locally instead of being addresses in a more global config settings.

Describe the solution you'd like
Refactor the style with less local hacky css. if we can manage to have one large css file, this would help forking the wallet and have other community have their own style.

This refactoring should be done prior working on a dark mode implementation.

make sure phone only have + and number

phone number form when logging in case have non number characters like ",". the query is still send to the backend but is being rejected. there should be a check before sending the query that the phone number has the same regex check than the backend has.

Athena ATM QR code scanning

Sometimes Athena ATMs have difficulty scanning the QR code generated by the app. If the issue persists after UPPERCASE is rolled out, it may be necessary to further optimize the qr code by removing the protocol prefix or reducing the logo size.

better permission for iOS

Is your feature request related to a problem? Please describe.
We should not request to find and connect decives to the local network at app startup, this is not a good UX practice.

Describe the solution you'd like
maybe there is some features we use that would use that "local network" request (I'm not sure, to be investigated). in that case we should request this in context, whenever it's needed

Uploading IMG_5492.PNG…

missing font on android?

Describe the bug
I've done a local build to test the Auth PR, and some font/images seems to be missing. I'm not sure yet if this is just on my laptop because it's a local build or if this is related to an update we may have done recently.

do you have the same issue? @cryptosalomao @jrbuhl93

Smartphone (please complete the following information):

  • Device: Android Only. issue is not present on iOS

flag is missing on first screenshot. a lightning logo overlay is missing on the QRCode.

IMG_5562

IMG_5563

switch from mst-gql to apollo for better network/request management

Internet connection is unreliable here (compared to the US). Even if you have Wifi enabled/4G enabled, often time the connection would fail.

Our app doesn't handle that well.

I think we would need to switch from mst + mst-gql to appolo client library. This is quite a big change but after looking in mst-gql + graphql_request, I see that those libraries doesn't have all the retry mechanism that Apollo has.

I also have a lot of time had issue with mst-gql. this is still a new library. Apollo on the other side seems battle tested.

improve phone number formatting on confirmation screen

Is your feature request related to a problem? Please describe.
When confirming the code sent by text, there is no mention of which phone the code was sent to.
This is from the prior screen. So if the phone was not entered correctly the only way to figure out is typically to wait for a few minutes, and if nothing happen go the previous screen

Describe the solution you'd like
Show the phone code in the code confirmation page.

non scannable QR code

on top of GaloyMoney/galoy-app#451, I saw sometimes some low-end phones that were not able to scan the QR code for some reason.

The QR code was scanned camera, but it was not going to the payment screen.

I could see that the QRcode was not really sharp (and one of the lady had clean the lens and trying again without any change). The density (number of black/white squares) depends on the length of the invoice. Because invoices is long compared to address, it needs a camera with a better resolution.

there may be things to tweak into how we generate the QR code (ie: there is a redundancy variable) to make this less likely to happen.

use biometrics if available when opening the application

We are adding a 2fa to validating large payment, but it would be a good features that would add security easily if we could ask for the biometrics at the launch of the app.

we have a lot more user on Android, so we could start with Android first.

Cache dismiss address in clipboard

If we keep coming back to the wallet after switching to some other app, we should only ask once. If the user dismiss the address once, we should not ask again if the same address is in the clipboard

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.