Compare commits

..
Author SHA1 Message Date
Parvesh Monu c33530acab show keycard is not empty in settings 2025-02-20 19:43:33 +05:30
Parvesh Monu 14d83fddff move error priority as per Alisher's message 2025-02-20 15:16:21 +05:30
Parvesh Monu d9973c8d0b Show different keycard screen when wrong keycard is used 2025-02-20 11:34:35 +05:30
Mohsen a98bbf6a71 [#22029] fix: bridge button when there is single account (#22031)
* [#22029] fix: bridge button when there is single account

* [#22029] fix: trigger start bridge if all condition met

* [#22029] docs: add clarification for bridge flow logic based on account selection
2025-02-19 21:58:11 +03:00
andrey 8116f7a7b1 [#21956] Biometrics are still active after profile migration to keycard 2025-02-19 17:40:27 +01:00
andrey b3fbed1a1b [#21812] "Invalid Hex Data for Private Key" and "Invalid PIN Code" errors after mobile attempts to be synced with Desktop imported on keycard
https://github.com/status-im/status-go/compare/b2cd7bd8...1bfb0cef
2025-02-18 13:23:23 +01:00
frank 4826bedba4 fix_: revert version (#22149) 2025-02-18 20:12:11 +08:00
frank b81ac07636 fix_: bad node config migration (#21952)
https://github.com/status-im/status-go/compare/dcce8e9b...6132a9e7
2025-02-18 19:12:18 +08:00
Siddarth Kumar 2da2dfdad7 android: add gradle-lint as dependency (#22124) 2025-02-18 13:12:28 +05:30
Andrey Bocharnikov 1036bff41b feat(wallet): integrate eth rpc proxy (#22034)
* feat(wallet): Integrate eth-rpc-proxy

closes #22033
2025-02-17 22:27:22 +04:00
Siddarth Kumar e15b9a224c ci: upgrade go to 1.22 (#21940)
- This PR upgrades `go` to `1.22`
- Brings in `gomobile` latest derivation at master of `nixpkgs` : https://github.com/NixOS/nixpkgs/commit/f5abef98e8b8c9f9e6da4bdab63f8be1e57ea8c0
- points to status-go changes where `go` is also upgraded to `1.22` -> https://github.com/status-im/status-go/pull/6258
2025-02-17 22:53:28 +05:30
Parvesh Monu 82ab32c028 Allow user to access recovery phrase after canceling 'Confirm Backup' drawer (#22108) 2025-02-17 21:26:36 +05:30
Siddarth Kumar 3541485338 deps: fix path to hack script and regenerate (#22119)
This PR fixes the path to hack deps script and re-generates `gradle` deps.
Previous PRs passed build phase because we already have the `gradle` deps we need.

However make `nix-update-gradle` would fail due to the incorrect path.
2025-02-17 14:13:21 +05:30
Mohamed Javid 8c82a84aee feat(wallet)_: Saved addresses limit (#22069)
This commit adds limit for adding saved addresses upto 20 to prevent any unwanted behaviour.

Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
2025-02-15 00:34:56 +05:30
Brian Sztamfater 447945f46e fix: transaction fails when signed from auto-restored derived account after seed phrase recovery with biometric authentication enabled (#22040)
Signed-off-by: Brian Sztamfater <brian@status.im>
2025-02-14 11:16:50 -03:00
Brian Sztamfater 16b2c90040 feat: show swap proposal exchange rate (#22078)
Signed-off-by: Brian Sztamfater <brian@status.im>
2025-02-14 10:32:07 -03:00
Alexander a210d59c4f Improve activity loading to avoid sitations when activity tab becomes empty after auto-refresh or app backgrounding (#21988) 2025-02-14 09:49:34 +01:00
72 changed files with 1172 additions and 1255 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env groovy
library 'status-jenkins-lib@v1.9.17'
library 'status-jenkins-lib@v1.9.18'
/* Options section can't access functions in objects. */
def isPRBuild = utils.isPRBuild()
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env groovy
library 'status-jenkins-lib@v1.9.17'
library 'status-jenkins-lib@v1.9.18'
import groovy.json.JsonBuilder
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env groovy
library 'status-jenkins-lib@v1.9.17'
library 'status-jenkins-lib@v1.9.18'
pipeline {
agent { label 'linux' }
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env groovy
library 'status-jenkins-lib@v1.9.17'
library 'status-jenkins-lib@v1.9.18'
/* Options section can't access functions in objects. */
def isPRBuild = utils.isPRBuild()
+1 -1
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env groovy
library 'status-jenkins-lib@v1.9.17'
library 'status-jenkins-lib@v1.9.18'
/* Options section can't access functions in objects. */
def isPRBuild = utils.isPRBuild()
+2 -2
View File
@@ -920,7 +920,7 @@ PODS:
- glog
- RCT-Folly (= 2022.05.16.00)
- React-Core
- react-native-compat (2.11.2):
- react-native-compat (2.17.3):
- glog
- RCT-Folly (= 2022.05.16.00)
- React-Core
@@ -1536,7 +1536,7 @@ SPEC CHECKSUMS:
react-native-blob-util: 600972b1782380a5a7d5db61a3817ea32349dae9
react-native-blur: b2b140d3d65077a1d5d26be62d9415f895592344
react-native-cameraroll: af8eec1e585d053ff485d98ec837f9a8a11b5745
react-native-compat: 3af9add14d349701306d3d052638435f6795ac2c
react-native-compat: fd639220cca206df6c74b95df56a1809d78ba5a3
react-native-config: 5330c8258265c1e5fdb8c009d2cabd6badd96727
react-native-get-random-values: 21325b2244dfa6b58878f51f9aa42821e7ba3d06
react-native-hole-view: 6935448993bac79f2b5a4ad7e9741094cf810679
+229 -270
View File
@@ -8838,8 +8838,8 @@
"repo": "https://jitpack.io",
"files": {
"reflow-animator-1.0.6.pom": {
"sha1": "4fe3d33c764beebdc477d93a590f63dfa38a5f6b",
"sha256": "sha256-MEINlM+8v6LDFGREWswamEl17l26xa4eQHeKPcxbSI8="
"sha1": "d2c5089ae74a366676d9432c401e373b4895858e",
"sha256": "sha256-uanUNC0CwC2YnlQ4rpZBMdp+Is6UF36Y/Iwn6YLLHno="
},
"reflow-animator-1.0.6.aar": {
"sha1": "36074a3fcb77c2ba12bd2de7dde81441e0c7504f",
@@ -8898,20 +8898,20 @@
},
{
"path": "org/gradle/github-dependency-graph-gradle-plugin/1.3.1",
"path": "org/gradle/github-dependency-graph-gradle-plugin/1.3.2",
"repo": "https://plugins.gradle.org/m2",
"files": {
"github-dependency-graph-gradle-plugin-1.3.1.pom": {
"sha1": "5d95862731c88c1e9190fa27a7bd2ffe3ab549d7",
"sha256": "sha256-Zk7PNeEBetpWAp4e2rN5A+zn0NDsG3G5kU62uPssiJo="
"github-dependency-graph-gradle-plugin-1.3.2.pom": {
"sha1": "0740a44f4c99d3e2d9fbc2c89afcb195ec66dbdf",
"sha256": "sha256-xaVDODswVgtoaoIAtgCELvnd8IAx8AYdJA+FE3a0Jxs="
},
"github-dependency-graph-gradle-plugin-1.3.1.jar": {
"sha1": "c905642b753938ef0fa1cda1fc330fae1c4016aa",
"sha256": "sha256-0uYWjgzaasT18c62W6IElG2jW1Oe+X0O/4dflT5E61k="
"github-dependency-graph-gradle-plugin-1.3.2.jar": {
"sha1": "ba3d0995475c6aa79048e865d7923bbed20f36a0",
"sha256": "sha256-VdNKG2xBu75P6hSlZaERE3ZxOSSwAaPMjD2EnGSejQA="
},
"github-dependency-graph-gradle-plugin-1.3.1.module": {
"sha1": "818778b46a93f8d60f11cfa83c7ecbb2481706d8",
"sha256": "sha256-agfZPNoTEZDEU5USp5slvtvCfm5OxZucX7XuZ9xugzU="
"github-dependency-graph-gradle-plugin-1.3.2.module": {
"sha1": "879866cccedf304d8c484d3bb70eb6d699e9e118",
"sha256": "sha256-nBqz4Xbqelt3YhEAEG9aPzYC0+2MBcM1M+1Ys5PumhQ="
}
}
},
@@ -9052,16 +9052,16 @@
},
{
"path": "commons-codec/commons-codec/1.17.1",
"path": "commons-codec/commons-codec/1.18.0",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"commons-codec-1.17.1.pom": {
"sha1": "d187e2d50ab520895df0dcb9d88980ffea50bfa3",
"sha256": "sha256-f6DbTYFQ2vkylYuK6onuJKu00Y4jFqXeU1J4/BMVEqA="
"commons-codec-1.18.0.pom": {
"sha1": "2aa7395e4e4d63be2fd4439da7a01527235f76bf",
"sha256": "sha256-dLkW2ksDhMYZ5t1MGN7+iqQ4f3lSBSU8+0u7L0WM3c4="
},
"commons-codec-1.17.1.jar": {
"sha1": "973638b7149d333563584137ebf13a691bb60579",
"sha256": "sha256-+fbLED8t3DyZqdgK2irnvwaFER/Wv/zLcgM9HaTm/yM="
"commons-codec-1.18.0.jar": {
"sha1": "ee45d1cf6ec2cc2b809ff04b4dc7aec858e0df8f",
"sha256": "sha256-ugBfMEzvkqPe3iSjitWsm4r8zw2PdYOdbBM4Y0z39uQ="
}
}
},
@@ -9135,20 +9135,20 @@
},
{
"path": "commons-logging/commons-logging/1.3.4",
"path": "commons-logging/commons-logging/1.3.5",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"commons-logging-1.3.4.pom": {
"sha1": "e919eab34a66d31a9bbe15ddc563d7d2e6770826",
"sha256": "sha256-1L2jSJKqzL9PrTP8MjqKqQfvnXmYRlnaJJRMCoa/CGU="
"commons-logging-1.3.5.pom": {
"sha1": "378e7ead6461eabd50a97f6503d061cad0dcae9d",
"sha256": "sha256-zPSjA0b1AnuUlqvVYpCsJtFZq/K+ZN8SZWEdyUALnWg="
},
"commons-logging-1.3.4-api.jar": {
"sha1": "de4050262dfa7522365a9e3c76ed8cf4683fcffa",
"sha256": "sha256-X1zVkiUzQHDbaxctBaaFuEei+tY+WxjtAjqqpeErgh8="
"commons-logging-1.3.5-api.jar": {
"sha1": "2e234baf9b0fd82e4e2f0db3b9083900fbfe2f36",
"sha256": "sha256-6WjRzl2r6cQzxHbTd+ZSJzD2FttdtdKO2sfEWMtVMdw="
},
"commons-logging-1.3.4.jar": {
"sha1": "b9fc14968d63a8b8a8a2c1885fe3e90564239708",
"sha256": "sha256-vC3+MvHvBlCeagZRRMGt97Qg6r8RqH8wvRJ/j6ozIBY="
"commons-logging-1.3.5.jar": {
"sha1": "a3fcc5d3c29b2b03433aa2d2f2d2c1b1638924a1",
"sha256": "sha256-bXp0TkAnZJ+7UIld+Ul9EJ+Yx2amNwYv6NLqu7MUC6Q="
}
}
},
@@ -11836,12 +11836,12 @@
},
{
"path": "com/google/code/gson/gson-parent/2.11.0",
"path": "com/google/code/gson/gson-parent/2.12.1",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"gson-parent-2.11.0.pom": {
"sha1": "b32d3bc5c89c852efe4c176df6c3fdeccbe150ef",
"sha256": "sha256-issfO3Km8CaRasBzW62aqwKT1Sftt7NlMn3vE6k2e3o="
"gson-parent-2.12.1.pom": {
"sha1": "660107b2e76095ef86bbd15c503afe11e5260bfb",
"sha256": "sha256-yeewt+Mb574iaEl5wGgAHGUssRPE5u2JTjm2Q97gf8E="
}
}
},
@@ -11967,24 +11967,24 @@
},
{
"path": "com/google/code/gson/gson/2.11.0",
"path": "com/google/code/gson/gson/2.12.1",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"gson-2.11.0.pom": {
"sha1": "55796dd7cc329027df79e96c4e6631e3c02c93c5",
"sha256": "sha256-wOVHvqmYiI5uJcWIapDnYicryItSdTQ90sBd7Wyi42A="
"gson-2.12.1.pom": {
"sha1": "d2c3993ff96e5da39a57e5e0b695eda560949b57",
"sha256": "sha256-C1c17IX0UoLx4sdpd5gAQnsVCoFj9AUJOpKAtxyrGXg="
},
"gson-2.11.0.buildinfo": {
"sha1": "4d1c42ee3c07943d8e07fab98bf0491877b4c0c6",
"sha256": "sha256-d6O/J0uIwA+ieS0kkb+yLkeL3OUzOMUcMBHW7nDr0pI="
"gson-2.12.1.buildinfo": {
"sha1": "c2e219d4a63eebf78ce409ee8303eb930248f486",
"sha256": "sha256-fNm4d7ep72MLsQq/BeBRdEuam/9hzGJafTURb48yeuY="
},
"gson-2.11.0.buildinfo.asc": {
"sha1": "ba50162dd390a51e11a706d62ef9a5d120138337",
"sha256": "sha256-blLhhVcT0w8htC6V6rrqU+CZ3egMLBv5AgE76D+zGIY="
"gson-2.12.1.buildinfo.asc": {
"sha1": "01ba63402708ab4efbd2fa2f4dc5ee7f136b9479",
"sha256": "sha256-M+At44sk0y+mblm7UnhRzYzeO36NPGTpP3rTID/wJjU="
},
"gson-2.11.0.jar": {
"sha1": "527175ca6d81050b53bdd4c457a6d6e017626b0e",
"sha256": "sha256-V5KNblpu3rKr03cKj5W6RNzkXzsjt6ncKzCcWBVSp4s="
"gson-2.12.1.jar": {
"sha1": "4e773a317740b83b43cfc3d652962856041697cb",
"sha256": "sha256-6+4T1ft0d81/HMAQ4MNW34yoBwlxUkjal/eeNcy0++w="
}
}
},
@@ -12199,21 +12199,6 @@
}
},
{
"path": "com/google/errorprone/error_prone_annotations/2.27.0",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"error_prone_annotations-2.27.0.pom": {
"sha1": "85103026aa50b0e4efafee8f486e3ecd9ebfde31",
"sha256": "sha256-TKWjXWEjXhZUmsNG0eNFUc3w/ifoSqV+A8vrJV6k5do="
},
"error_prone_annotations-2.27.0.jar": {
"sha1": "91b2c29d8a6148b5e2e4930f070d4840e2e48e34",
"sha256": "sha256-JMkjNyxY410LnxagKJKbua7cd1IYZ8J08r0HNd9bofU="
}
}
},
{
"path": "com/google/errorprone/error_prone_annotations/2.36.0",
"repo": "https://repo.maven.apache.org/maven2",
@@ -12350,17 +12335,6 @@
}
},
{
"path": "com/google/errorprone/error_prone_parent/2.27.0",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"error_prone_parent-2.27.0.pom": {
"sha1": "336f77abf2668b10cae4ab136ea0c8258875de00",
"sha256": "sha256-+oGCnQSVWd9pJ/nJpv1rvQn4tQ5tRzaucsgwC2w9dlQ="
}
}
},
{
"path": "com/google/errorprone/error_prone_parent/2.36.0",
"repo": "https://repo.maven.apache.org/maven2",
@@ -12561,27 +12535,27 @@
},
{
"path": "com/google/guava/guava-parent/33.3.1-jre",
"path": "com/google/guava/guava-parent/33.4.0-jre",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"guava-parent-33.3.1-jre.pom": {
"sha1": "94729a0ed1dc35f623edd13afa6c1c2fe9a15d7c",
"sha256": "sha256-VUQdsn6Iad/v4FMFm99Hi9x+lVhWQr85HwAjNF/VYoc="
"guava-parent-33.4.0-jre.pom": {
"sha1": "ee79b87abc4ef9b3591db13c59de368c7b03dc79",
"sha256": "sha256-Okme00oNnuDxvMOSMAIaHNTi990EJqtoRPWFRl1B3Nc="
}
}
},
{
"path": "com/google/guava/guava-testlib/33.3.1-jre",
"path": "com/google/guava/guava-testlib/33.4.0-jre",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"guava-testlib-33.3.1-jre.pom": {
"sha1": "12fbde61e46674436b0ec48f9b54fbd5f78f8256",
"sha256": "sha256-4n6bu2lrvSCUeAF1YUO9EazSCFBFSnEILoceA+27PSw="
"guava-testlib-33.4.0-jre.pom": {
"sha1": "f92730965d606702deb41eca3afb47396b7a5c6a",
"sha256": "sha256-p+EQNjDV99XYCN3NnbnVhLvVldRW2UxpHOwJDQ7qZ/A="
},
"guava-testlib-33.3.1-jre.jar": {
"sha1": "a2eeefe29ae8a5b2b6d3a318295fa9a1925bdc61",
"sha256": "sha256-j943uKx8GbgmwhbfKvPXEd9JRb/baLPx5qHD9KUng1w="
"guava-testlib-33.4.0-jre.jar": {
"sha1": "e849ea71846b5ca96387d543c7ac862f18fe2513",
"sha256": "sha256-JF+agJa8uth2DSga3QKf4klh/pOZ3f6as3srsLCe7WI="
}
}
},
@@ -12767,20 +12741,20 @@
},
{
"path": "com/google/guava/guava/33.3.1-jre",
"path": "com/google/guava/guava/33.4.0-jre",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"guava-33.3.1-jre.pom": {
"sha1": "5a5628b34628748abcb73144a909ddbea2265ed9",
"sha256": "sha256-MTtn/BPrOwY07acVoSKZcfXem4GIvCgHYoFbg6J18ZM="
"guava-33.4.0-jre.pom": {
"sha1": "5c671f0be7aa66b15ed0ec2e1afb4ee99c8c78e8",
"sha256": "sha256-+pTbQAIt38d1r57PsTDM5RW5b3QNr4LyCvhG2VBUE0s="
},
"guava-33.3.1-jre.jar": {
"sha1": "852f8b363da0111e819460021ca693cacca3e8db",
"sha256": "sha256-S/Dixa+ORSXJbo/eF6T3MH+X+EePEcTI41oOMpiuTpA="
"guava-33.4.0-jre.jar": {
"sha1": "03fcc0a259f724c7de54a6a55ea7e26d3d5c0cac",
"sha256": "sha256-uRjJin5E2+lOvZ/j5Azdqttak+anjrYAi0LfI3JB5Tg="
},
"guava-33.3.1-jre.module": {
"sha1": "c99293bbf166d01849489fc6f94a101f79072aa7",
"sha256": "sha256-QYWMhHU/2WprfFESL8zvOVWMkcwIJk4IUGvPIODmNzM="
"guava-33.4.0-jre.module": {
"sha1": "edaf59b47aef1afba209dfafe1481ed86ff07f04",
"sha256": "sha256-gg6BfobEk6p6/9bLuZHuYJJbbIt0VB90LLIgcPbyBFk="
}
}
},
@@ -12953,12 +12927,12 @@
},
{
"path": "com/google/protobuf/protobuf-bom/4.29.0",
"path": "com/google/protobuf/protobuf-bom/4.30.0-RC1",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"protobuf-bom-4.29.0.pom": {
"sha1": "5542df7ac3708da8bf30756f4ee6d804d04b8c9b",
"sha256": "sha256-3L/Apl6DmDAE0HFOmL8NIGBwEUVbYhk5cowAkmvIyZk="
"protobuf-bom-4.30.0-RC1.pom": {
"sha1": "da26e5286a508eb4c29c3294f34d2fb932916cce",
"sha256": "sha256-Gs5LZwG6EhofKfwcjoPgc9pKFKCgex2GkjeMwK+GDYM="
}
}
},
@@ -13204,16 +13178,16 @@
},
{
"path": "com/google/protobuf/protobuf-java/4.29.0",
"path": "com/google/protobuf/protobuf-java/4.30.0-RC1",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"protobuf-java-4.29.0.pom": {
"sha1": "27c4abe9c47f4aed31cf7acff86853a05f7e85f0",
"sha256": "sha256-7cHftEVG5yel+sU/CQUGv6aN2DB65vEHbv+tVy+S16Q="
"protobuf-java-4.30.0-RC1.pom": {
"sha1": "9b1a4031569c7b624e2e7e0d7bb12fd752f37e39",
"sha256": "sha256-3A0yPW415z4X6ICF0obJblY2xk8N8WcLCULsC8MYass="
},
"protobuf-java-4.29.0.jar": {
"sha1": "ffea90ab158435d68de76951857ef5f8b0f98365",
"sha256": "sha256-FpAYUevl6J/oiqrTwmhmNzaVvC4wYnu4kyhH4vX8LnY="
"protobuf-java-4.30.0-RC1.jar": {
"sha1": "fe024780d64bf9edeb16d33974fd06799758a9e5",
"sha256": "sha256-ywRRWEELxFcCkN+AagbwIbYvLB4m7X4dtlczp8PzXoU="
}
}
},
@@ -13333,12 +13307,12 @@
},
{
"path": "com/google/protobuf/protobuf-parent/4.29.0",
"path": "com/google/protobuf/protobuf-parent/4.30.0-RC1",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"protobuf-parent-4.29.0.pom": {
"sha1": "c35e0844930aea715cc8f4335fee49223b1fe35c",
"sha256": "sha256-jU6O2nh45revZuPCtvWHE839P7bNsHGS3My2HN0uSTA="
"protobuf-parent-4.30.0-RC1.pom": {
"sha1": "bfd3c39ebcb48274c73c80b82a2925b26a2aea80",
"sha256": "sha256-vBZlQhUkJXKX06FCuoKNYc5/hD86HDSonJ4agltkvxQ="
}
}
},
@@ -13652,20 +13626,20 @@
},
{
"path": "com/squareup/okio/okio-jvm/3.9.1",
"path": "com/squareup/okio/okio-jvm/3.10.2",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"okio-jvm-3.9.1.pom": {
"sha1": "32a1fc013a444bd5d7c45346973c102d02dbeb1e",
"sha256": "sha256-VXZInO8kBTNoAPxt6VhUU18zVxpO/lpa0OybmwkNIdU="
"okio-jvm-3.10.2.pom": {
"sha1": "bf3c29f09bf646535ba5a72206280bd5d9631d90",
"sha256": "sha256-AP000Iv0YxNiofVSLKpXyuKMosfpOS76My72Vs/anUM="
},
"okio-jvm-3.9.1.jar": {
"sha1": "79696e3f4ff05d41ba2b3dc68adb5808a2e5dc53",
"sha256": "sha256-/m/pE3j5v6ewjDhkgozkGABc8orMoS6IR+tlxWXDdQA="
"okio-jvm-3.10.2.jar": {
"sha1": "6a2cc3acd5a83e66075a2f6c5b0608b6043fa34c",
"sha256": "sha256-/Qp+dsZzHwDpILe8EcBdgjqTIEVDGt1Ujgld4CCmnt4="
},
"okio-jvm-3.9.1.module": {
"sha1": "470544322c29b112668d2018c05fd94107b05e26",
"sha256": "sha256-sK+pGSxC18Rj3jjWMlk2xpAdnjtxSXNf/RihHfMQNKs="
"okio-jvm-3.10.2.module": {
"sha1": "e1125ef565c7f5fd6fbf0f925188c81febe1d0ee",
"sha256": "sha256-p4CkJMVx4odVASiuADMjVibf/iFsuNs7ICRkmWrZaPA="
}
}
},
@@ -13758,20 +13732,20 @@
},
{
"path": "com/squareup/okio/okio/3.9.1",
"path": "com/squareup/okio/okio/3.10.2",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"okio-3.9.1.pom": {
"sha1": "1cd169f2bbe6215607a62447b9e4b64a125b5e56",
"sha256": "sha256-06DDd+epr8zbsCqrXgUNwhL/2pQNvUcOo5cSpDQt8I4="
"okio-3.10.2.pom": {
"sha1": "3d4a51279ef5bc796682828afd74ef3ab54ad543",
"sha256": "sha256-7lbAIUoPqfER2nExxVDo3ICvDL9WCVbBzNosZtdQa0E="
},
"okio-3.9.1.jar": {
"sha1": "3f1067fc8f61b89e013ea121198c49c991d74cbb",
"sha256": "sha256-mcjrvEmV8p3ViwXXVYP8yLlX2yHu64xdiXM/DTSVWJc="
"okio-3.10.2.jar": {
"sha1": "5117e7c820a89b5722cc37fc9152d54131d4cd36",
"sha256": "sha256-3iJdy5APSY2cdVGHpEx043V2vYk62pa4bbYRDiellRM="
},
"okio-3.9.1.module": {
"sha1": "eaa18fe21ddaef8640880e11315ef39757fbc75f",
"sha256": "sha256-m5C0J0pa1gLdV01tS0iQNmOy3ppgufw0AiSCk9hD4SE="
"okio-3.10.2.module": {
"sha1": "0e038c29ef477f04b63b0f29847815c52decf3be",
"sha256": "sha256-P94fn79yxsMm1eiktTL0/Z/aLdDLFEK8pODHl9FBI4c="
}
}
},
@@ -15259,16 +15233,16 @@
},
{
"path": "io/netty/netty-tcnative-classes/2.0.69.Final",
"path": "io/netty/netty-tcnative-classes/2.0.70.Final",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"netty-tcnative-classes-2.0.69.Final.pom": {
"sha1": "ee65d639d3c5312a4b6369f0d59504ad0c8dfe0b",
"sha256": "sha256-WdoPlJ4r7on1cR6z4Mb9jPeRTmtwwAfza56waIJDAVw="
"netty-tcnative-classes-2.0.70.Final.pom": {
"sha1": "c1e1a8fdfb72675d90886ad28a6949529f798b1a",
"sha256": "sha256-QRtGiEv20l66H2RTU5HsWxCH6Rjg5T0iTkIgoE+zJnU="
},
"netty-tcnative-classes-2.0.69.Final.jar": {
"sha1": "0f018f36b688bafabe4573af230a8b59cf3c0713",
"sha256": "sha256-C7woSMsJnrP29Ow2UBs2AOGChFfNpB1TMGh/YB7gS+8="
"netty-tcnative-classes-2.0.70.Final.jar": {
"sha1": "5f75accc769e69f2e6c1e56ba3a08b6c4bcc25f8",
"sha256": "sha256-p5wVeTE9StSKPswdAaJdoG0i1kScO8w2nCMYdJvPVbw="
}
}
},
@@ -15285,12 +15259,12 @@
},
{
"path": "io/netty/netty-tcnative-parent/2.0.69.Final",
"path": "io/netty/netty-tcnative-parent/2.0.70.Final",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"netty-tcnative-parent-2.0.69.Final.pom": {
"sha1": "ba3c1cc69d48f0196ee84ecd3c5157c52a987931",
"sha256": "sha256-KVMCcZZjdhDIlPMr2nBQk82HaDFcnxpXOVGnXxeGmvw="
"netty-tcnative-parent-2.0.70.Final.pom": {
"sha1": "b5573ffca02a2c092bdb0f7e5efb7da495523ea4",
"sha256": "sha256-gHWl5UlncBGgcXXZuNqWOli4hLMujhAbdeeBUhc/3DU="
}
}
},
@@ -15768,16 +15742,16 @@
},
{
"path": "net/bytebuddy/byte-buddy-agent/1.15.4",
"path": "net/bytebuddy/byte-buddy-agent/1.15.11",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"byte-buddy-agent-1.15.4.pom": {
"sha1": "9440b88e2dfa9fb64979d9150453e5535c45e7d3",
"sha256": "sha256-UJEHS07O1v8WbjlDlHRk/0Lac5Y4BC34aDuj6MIJ51U="
"byte-buddy-agent-1.15.11.pom": {
"sha1": "4015ca3530951c4336155d578de83f0e6b900f8c",
"sha256": "sha256-tfoTlvFHl7jYCIJ+d0O6il8gO0iJvjLklj1EvV7XWag="
},
"byte-buddy-agent-1.15.4.jar": {
"sha1": "58e850dde88f3cf20f41f659440bef33f6c4fe02",
"sha256": "sha256-HXbe/RWaVkuct6lo0N6ic2e4tw6951qWjn7xkhvHXuQ="
"byte-buddy-agent-1.15.11.jar": {
"sha1": "a38b16385e867f59a641330f0362ebe742788ed8",
"sha256": "sha256-MW0sB5XCpNTEdW8ub5NJg3x0MKw04Ed+rYdNBfXMGeU="
}
}
},
@@ -15804,17 +15778,6 @@
}
},
{
"path": "net/bytebuddy/byte-buddy-parent/1.15.4",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"byte-buddy-parent-1.15.4.pom": {
"sha1": "d8cc6c53d8cda7c416764d4e4a74183546e1e5a2",
"sha256": "sha256-lwLCIT4/23CHv9M0tjQ80F9EUIqT64+Uqn2mVKwftI8="
}
}
},
{
"path": "net/bytebuddy/byte-buddy-parent/1.15.10",
"repo": "https://repo.maven.apache.org/maven2",
@@ -15826,6 +15789,17 @@
}
},
{
"path": "net/bytebuddy/byte-buddy-parent/1.15.11",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"byte-buddy-parent-1.15.11.pom": {
"sha1": "80e27b5d9cf8ba40dfd0b8ee8f7915d7237aec6d",
"sha256": "sha256-jcUZ16PnkhEqfNhB6vvsTwDbxjPQha3SDEXwq0dspJY="
}
}
},
{
"path": "net/bytebuddy/byte-buddy/1.11.13",
"repo": "https://repo.maven.apache.org/maven2",
@@ -15856,21 +15830,6 @@
}
},
{
"path": "net/bytebuddy/byte-buddy/1.15.4",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"byte-buddy-1.15.4.pom": {
"sha1": "1bab74a93db543cc550920d0cd7d58d8734bda4d",
"sha256": "sha256-L7uet+1bcChb8EOXvnjcKoUdDcLnSGXYFJfGGomOIb0="
},
"byte-buddy-1.15.4.jar": {
"sha1": "e8bd42992701720649765383ff570f415190b83f",
"sha256": "sha256-Smg9g/8hnyDUTzXKMC2CHgxoQuP6j58e6RPrFvSc7Gw="
}
}
},
{
"path": "net/bytebuddy/byte-buddy/1.15.10",
"repo": "https://repo.maven.apache.org/maven2",
@@ -15886,6 +15845,21 @@
}
},
{
"path": "net/bytebuddy/byte-buddy/1.15.11",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"byte-buddy-1.15.11.pom": {
"sha1": "c625e547e59a502e99eba31c1a5b1c514e8c64f5",
"sha256": "sha256-IFuLJUGWcX6B2tZyu4aacZr8lt8pf5fYEe/+H0NlPa4="
},
"byte-buddy-1.15.11.jar": {
"sha1": "f61886478e0f9ee4c21d09574736f0ff45e0a46c",
"sha256": "sha256-+giZiq4ee9roO94HEsUOhETXHA4MGWuyJHrejUrQ65A="
}
}
},
{
"path": "net/java/dev/jna/jna-platform/5.6.0",
"repo": "https://repo.maven.apache.org/maven2",
@@ -16459,17 +16433,6 @@
}
},
{
"path": "org/apache/apache/32",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"apache-32.pom": {
"sha1": "2e08f841a6fbc946452701faaf5e39a17ac97ef3",
"sha256": "sha256-z9hywOwn9Trmj0PbwP7N7YrddzB5pTr705DkB7Qs5y8="
}
}
},
{
"path": "org/apache/apache/33",
"repo": "https://repo.maven.apache.org/maven2",
@@ -16703,28 +16666,6 @@
}
},
{
"path": "org/apache/commons/commons-parent/71",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"commons-parent-71.pom": {
"sha1": "91d35791f5037779fb320d054ed09cb14925dc32",
"sha256": "sha256-lbe+cPMWrkyiL2+90I3iGC6HzYdKZQ3nw9M4anR6gqM="
}
}
},
{
"path": "org/apache/commons/commons-parent/72",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"commons-parent-72.pom": {
"sha1": "cdfbaff82e756be4cb74d3f09b8fbf8f6b06c79d",
"sha256": "sha256-Q0Xev8dnsa6saKvdcvxn0YtSHUs5A3KhG2P/DFhrIyA="
}
}
},
{
"path": "org/apache/commons/commons-parent/78",
"repo": "https://repo.maven.apache.org/maven2",
@@ -16736,6 +16677,28 @@
}
},
{
"path": "org/apache/commons/commons-parent/79",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"commons-parent-79.pom": {
"sha1": "a2f13e0fa1f22588976e02c39b840653986ba685",
"sha256": "sha256-Yo3zAUis08SRz8trc8euS1mJ5VJqsTovQo3qXUrRDXo="
}
}
},
{
"path": "org/apache/commons/commons-parent/81",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"commons-parent-81.pom": {
"sha1": "4a342190fb243a221636ac0e0b02d3eed07a9908",
"sha256": "sha256-NI1OfBMb5hFMhUpxnOekQwenw5vTZghJd7JP0prQ7bQ="
}
}
},
{
"path": "org/apache/httpcomponents/httpclient/4.1.1",
"repo": "https://repo.maven.apache.org/maven2",
@@ -17471,20 +17434,20 @@
},
{
"path": "org/checkerframework/checker-qual/3.48.2",
"path": "org/checkerframework/checker-qual/3.49.0",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"checker-qual-3.48.2.pom": {
"sha1": "95acb8356a028eeb22171b7330f7bb78cf0f9506",
"sha256": "sha256-Sk+LlzEYgyx4SrUIpzAJ2tAt5Nq/0dFJLWa45MC6HRE="
"checker-qual-3.49.0.pom": {
"sha1": "d13e380978f7ccc023bfef031f9d664d52c3877e",
"sha256": "sha256-yEUftI7+1jgbMpFG1PrvtvTYq/E79XLCaosawoCW54A="
},
"checker-qual-3.48.2.jar": {
"sha1": "2a4797df796b23026b8215545b0d2936bacc52af",
"sha256": "sha256-ryPyDJlbL+3jWx66gRd6mmaUTsZ7jk3uGapMwLcQxrU="
"checker-qual-3.49.0.jar": {
"sha1": "54be36cb42c9b991c109e467e2bfa82af4cda44e",
"sha256": "sha256-i52aNuqvfA/CZQPIPNl9jJwPnikTzCpukqwmxzXU3L4="
},
"checker-qual-3.48.2.module": {
"sha1": "cdf30d8d4b97e12fc85e65e1bd55210a1a084b10",
"sha256": "sha256-D2RjlMmz5KL1aitsZ6C0NAkqxrq3pJvC/wGtjKf08NU="
"checker-qual-3.49.0.module": {
"sha1": "b6e4941f8d6af0d46a496f72d1b8944e0ed8fd5d",
"sha256": "sha256-YA0Z+9XjfemEh8OYBF4UCmUc9brRx5xcl88MyYRMQuQ="
}
}
},
@@ -19901,16 +19864,16 @@
},
{
"path": "org/jetbrains/kotlin/kotlin-reflect/2.1.0",
"path": "org/jetbrains/kotlin/kotlin-reflect/2.1.20-Beta2",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"kotlin-reflect-2.1.0.pom": {
"sha1": "6c72cb76dbf12249eec091d5a7d6ea27a27fcc87",
"sha256": "sha256-nNhLPU9xfJYjXkujtydolcz/1V3kEcfOCz97q1Yu/kI="
"kotlin-reflect-2.1.20-Beta2.pom": {
"sha1": "1f22f7def1b72d86f0122e94963556693dcd9054",
"sha256": "sha256-TSmv4VZwoDfXO+C2ohrnzhcbhR5hQPWOERDtz2j/Djo="
},
"kotlin-reflect-2.1.0.jar": {
"sha1": "dc3753b59b67d79b7d2f546d51e22a0ec1f082d8",
"sha256": "sha256-tfYI7fqYqM+iNyzBLRitqXS+HFbBCT7/BswGH0/AiLI="
"kotlin-reflect-2.1.20-Beta2.jar": {
"sha1": "9747e5ae1b3b47d83f7a810fbdd603c90cd5b0ad",
"sha256": "sha256-MsWsLXYMzUpOX6IMg2JMSqx4DN7upMURajx3sgHgs4E="
}
}
},
@@ -21551,33 +21514,6 @@
}
},
{
"path": "org/jetbrains/kotlin/kotlin-stdlib/1.9.25",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"kotlin-stdlib-1.9.25.pom": {
"sha1": "cd80842137758a376e09fd243351e10abb0fa13c",
"sha256": "sha256-fcMxikdte5AtDSevm1b2Y+jMQmOi0zrQUMertlpbZ6E="
},
"kotlin-stdlib-1.9.25-all.jar": {
"sha1": "6c69e7b26179394dafd3c90e630ef763b8c1a267",
"sha256": "sha256-zsOLwzAucqiq+c3kNrWpBx7gMx4q0F6E2LuJczTX6dQ="
},
"kotlin-stdlib-1.9.25-common.jar": {
"sha1": "4c7276a1529397ee6389483a408c57a9c6d4ca7d",
"sha256": "sha256-zBF0wWk6JC3Wy8gWpSfEU+BBhJTjbFDNxleL9AFxrNs="
},
"kotlin-stdlib-1.9.25.jar": {
"sha1": "f700a2f2b8f0d6d0fde48f56d894dc722fb029d7",
"sha256": "sha256-+c3Nv/H13oU4CuUml35oNybCqkLbHtbm5Qronklulf0="
},
"kotlin-stdlib-1.9.25.module": {
"sha1": "b36cccb05e35f533bf4a44ce7ba25dca4d356a2b",
"sha256": "sha256-Q+BqZsO3XKPkxcswSWjqg1ImJHuj9WExK9Gepi3oRqc="
}
}
},
{
"path": "org/jetbrains/kotlin/kotlin-stdlib/2.1.0",
"repo": "https://repo.maven.apache.org/maven2",
@@ -21601,6 +21537,29 @@
}
},
{
"path": "org/jetbrains/kotlin/kotlin-stdlib/2.1.20-Beta2",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"kotlin-stdlib-2.1.20-Beta2.pom": {
"sha1": "4f06272e28b5e94f321d4f5e999110a95d93ea05",
"sha256": "sha256-MO2EkKrOoo71CWbghKGSZ/P1JqCL87tkkKUHe7fIgn4="
},
"kotlin-stdlib-2.1.20-Beta2-all.jar": {
"sha1": "919751264e79f13e6ec79f4eef1d5222e6520d31",
"sha256": "sha256-geB9406Esp4U8/3vkC9LxM8dXalZuGffaD++HMVM4eE="
},
"kotlin-stdlib-2.1.20-Beta2.jar": {
"sha1": "98e06078584a3b816315d9baee83d04022f3271c",
"sha256": "sha256-dDREYP6u8bxGO6aeUtUOfbAEn3E4uECxzz+yKom8/Vk="
},
"kotlin-stdlib-2.1.20-Beta2.module": {
"sha1": "42afc0b12293bb6474c45f25c4da99ae6fb16103",
"sha256": "sha256-SnA8ORhx/5f6h1qdImY6A3werSKT5SZ+CDK7U2pMHrY="
}
}
},
{
"path": "org/jetbrains/kotlin/kotlin-tooling-core/1.8.0",
"repo": "https://repo.maven.apache.org/maven2",
@@ -21801,16 +21760,16 @@
},
{
"path": "org/json/json/20240303",
"path": "org/json/json/20250107",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"json-20240303.pom": {
"sha1": "78c0fa2a26888461731e26603ef4b19cc53239ca",
"sha256": "sha256-mUuvXYm/TKpc6WjkxOqxNcj5eD7PTSt7Dp0cik3fHk8="
"json-20250107.pom": {
"sha1": "91b62e77c1b5a92b6dc79f8c0c154311e1477c85",
"sha256": "sha256-ph+87jbeXMAb7ZMEYseLwEvBZBCwHZtfEABq8UoRvFY="
},
"json-20240303.jar": {
"sha1": "0ebb88e8fb5122b7506d5cf1d69f1ccdb790d22a",
"sha256": "sha256-PPbNaJLjLitMHDng9S9SSKL1s3ZG/fu3mma0a2GEFO0="
"json-20250107.jar": {
"sha1": "a1b5f0b5a1ce018b93a691c57ffc7d141b3a10f1",
"sha256": "sha256-hdTBqxktMRf9Asf/8ewP5jreRc9W3vf+lQ7wYM8G6Z8="
}
}
},
@@ -21850,16 +21809,16 @@
},
{
"path": "org/junit/junit-bom/5.11.3",
"path": "org/junit/junit-bom/5.12.0-RC2",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"junit-bom-5.11.3.pom": {
"sha1": "ff35120d66bcbdd05c8b94b57b08b9d30f15c343",
"sha256": "sha256-8T3y5Mrx/rzlZ2Z+fDeBAaAzHVPRMk1uLf467Psfd3Q="
"junit-bom-5.12.0-RC2.pom": {
"sha1": "f7f31a9a73bd214137a5e22c45da37aa8fa893a1",
"sha256": "sha256-9H9ulor+J1iVBQAkFvwfbn78IHHc1HMNSDTUUp/XY+E="
},
"junit-bom-5.11.3.module": {
"sha1": "cbe8d3c987c55bc57869f232f052c0df0042c32b",
"sha256": "sha256-S/D1PO6nx5D9+9JNujyeBM3FGGQnnuv8V6qkc+vKA4A="
"junit-bom-5.12.0-RC2.module": {
"sha1": "49aa327f7c618b489654a7ac980a5647adf95be4",
"sha256": "sha256-5S09WIMqPhrcc3ky5x9gjbj5lefgLRpDmNjdhKDH/2o="
}
}
},
@@ -21955,16 +21914,16 @@
},
{
"path": "org/mockito/mockito-core/5.14.2",
"path": "org/mockito/mockito-core/5.15.2",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"mockito-core-5.14.2.pom": {
"sha1": "2f6476e2e7da6a275ebac685ed983d3f7bee84e3",
"sha256": "sha256-Y45Wpo9JaHm8ig9Tz735xMw5pFtuQ4ozOl6oPAnunP0="
"mockito-core-5.15.2.pom": {
"sha1": "199967c4a9531dd9b29ed2ef72fc4b427192466c",
"sha256": "sha256-/tgS0qLznJhHSyoUxjxl+PRxeDtggtyGfAwbYFPGlIA="
},
"mockito-core-5.14.2.jar": {
"sha1": "f7bf936008d7664e2002c3faf0c02071c8d10e7c",
"sha256": "sha256-IpYUHB4fLhrjXAjTapq0Vj7NZuA1M/6CYwp2TnqkkYI="
"mockito-core-5.15.2.jar": {
"sha1": "87be4b1e0cc5febc07ab3197a8ff3ede56b37a79",
"sha256": "sha256-v0i3Ny2UkdXsiuu0zdGH0VZjkxWZwPvnQQFmzg4eWP8="
}
}
},
+2 -2
View File
@@ -807,7 +807,7 @@ org.glassfish.jaxb:txw2:2.2.11
org.glassfish.jaxb:txw2:2.3.1
org.glassfish.jaxb:txw2:2.3.2
org.gradle.toolchains:foojay-resolver:0.5.0
org.gradle:github-dependency-graph-gradle-plugin:1.3.1
org.gradle:github-dependency-graph-gradle-plugin:1.3.2
org.hamcrest:hamcrest-core:1.3
org.hamcrest:hamcrest:2.2
org.jacoco:org.jacoco.core:0.7.4.201502262128
@@ -1021,5 +1021,5 @@ xml-apis:xml-apis:1.4.01
org.gradle.toolchains.foojay-resolver-convention:org.gradle.toolchains.foojay-resolver-convention.gradle.plugin:0.5.0
org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:1.8.0
com.android.tools.build:gradle:3.5.4
com.facebook.react:hermes-android:0.73.5
com.android.tools.lint:lint-gradle:31.1.1
com.facebook.react:hermes-android:0.73.5
+26 -29
View File
@@ -552,7 +552,7 @@ https://jitpack.io/com/github/wix-playground/reflow-animator/1.0.6/reflow-animat
https://jitpack.io/com/github/yalantis/ucrop/2.2.6-native/ucrop-2.2.6-native.pom
https://jitpack.io/com/github/zacharee/AndroidPdfViewer/4.0.1/AndroidPdfViewer-4.0.1.pom
https://plugins.gradle.org/m2/com/adarshr/gradle-test-logger-plugin/2.0.0/gradle-test-logger-plugin-2.0.0.pom
https://plugins.gradle.org/m2/org/gradle/github-dependency-graph-gradle-plugin/1.3.1/github-dependency-graph-gradle-plugin-1.3.1.pom
https://plugins.gradle.org/m2/org/gradle/github-dependency-graph-gradle-plugin/1.3.2/github-dependency-graph-gradle-plugin-1.3.2.pom
https://plugins.gradle.org/m2/org/gradle/toolchains/foojay-resolver-convention/org.gradle.toolchains.foojay-resolver-convention.gradle.plugin/0.5.0/org.gradle.toolchains.foojay-resolver-convention.gradle.plugin-0.5.0.pom
https://plugins.gradle.org/m2/org/gradle/toolchains/foojay-resolver/0.5.0/foojay-resolver-0.5.0.pom
https://repo.maven.apache.org/maven2/antlr/antlr/2.7.1/antlr-2.7.1.pom
@@ -562,12 +562,12 @@ https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.6/commons-cod
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.9/commons-codec-1.9.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.10/commons-codec-1.10.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.11/commons-codec-1.11.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.17.1/commons-codec-1.17.1.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.18.0/commons-codec-1.18.0.pom
https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.pom
https://repo.maven.apache.org/maven2/commons-io/commons-io/2.18.0/commons-io-2.18.0.pom
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.pom
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.pom
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.3.4/commons-logging-1.3.4.pom
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.3.5/commons-logging-1.3.5.pom
https://repo.maven.apache.org/maven2/com/adobe/xmp/xmpcore/6.1.11/xmpcore-6.1.11.pom
https://repo.maven.apache.org/maven2/com/afollestad/material-dialogs/commons/0.9.6.0/commons-0.9.6.0.pom
https://repo.maven.apache.org/maven2/com/afollestad/material-dialogs/core/0.9.6.0/core-0.9.6.0.pom
@@ -726,7 +726,7 @@ https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.5/gson
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.6/gson-parent-2.8.6.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.9/gson-parent-2.8.9.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.9.1/gson-parent-2.9.1.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.11.0/gson-parent-2.11.0.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.12.1/gson-parent-2.12.1.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.2.4/gson-2.2.4.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.3/gson-2.3.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7.pom
@@ -735,7 +735,7 @@ https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.5/gson-2.8.5.
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.9.1/gson-2.9.1.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.11.0/gson-2.11.0.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.12.1/gson-2.12.1.pom
https://repo.maven.apache.org/maven2/com/google/crypto/tink/tink/1.3.0-rc2/tink-1.3.0-rc2.pom
https://repo.maven.apache.org/maven2/com/google/crypto/tink/tink/1.7.0/tink-1.7.0.pom
https://repo.maven.apache.org/maven2/com/google/dagger/dagger/2.28.3/dagger-2.28.3.pom
@@ -750,7 +750,6 @@ https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotatio
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.27.0/error_prone_annotations-2.27.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.36.0/error_prone_annotations-2.36.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.0.18/error_prone_parent-2.0.18.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.2.0/error_prone_parent-2.2.0.pom
@@ -763,7 +762,6 @@ https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.9.0/error_prone_parent-2.9.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.10.0/error_prone_parent-2.10.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.11.0/error_prone_parent-2.11.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.27.0/error_prone_parent-2.27.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.36.0/error_prone_parent-2.36.0.pom
https://repo.maven.apache.org/maven2/com/google/flatbuffers/flatbuffers-java/1.12.0/flatbuffers-java-1.12.0.pom
https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
@@ -781,8 +779,8 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/30.1-jre/guav
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/31.0.1-android/guava-parent-31.0.1-android.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/31.0.1-jre/guava-parent-31.0.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/31.1-jre/guava-parent-31.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/33.3.1-jre/guava-parent-33.3.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/33.3.1-jre/guava-testlib-33.3.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/33.4.0-jre/guava-parent-33.4.0-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/33.4.0-jre/guava-testlib-33.4.0-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/17.0/guava-17.0.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/23.0/guava-23.0.pom
@@ -795,7 +793,7 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava/30.1-jre/guava-30.1-
https://repo.maven.apache.org/maven2/com/google/guava/guava/31.0.1-android/guava-31.0.1-android.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/31.1-jre/guava-31.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/33.3.1-jre/guava-33.3.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/33.4.0-jre/guava-33.4.0-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/1.0/listenablefuture-1.0.pom
https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom
https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.pom
@@ -809,7 +807,7 @@ https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/3.13.0/pro
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/3.17.2/protobuf-bom-3.17.2.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/3.19.2/protobuf-bom-3.19.2.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/3.19.3/protobuf-bom-3.19.3.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/4.29.0/protobuf-bom-4.29.0.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/4.30.0-RC1/protobuf-bom-4.30.0-RC1.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-javalite/3.17.2/protobuf-javalite-3.17.2.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util/3.4.0/protobuf-java-util-3.4.0.pom
@@ -826,7 +824,7 @@ https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.13.0/pr
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.17.2/protobuf-java-3.17.2.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.19.2/protobuf-java-3.19.2.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.19.3/protobuf-java-3.19.3.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/4.29.0/protobuf-java-4.29.0.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/4.30.0-RC1/protobuf-java-4.30.0-RC1.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-lite/3.0.1/protobuf-lite-3.0.1.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.0.0/protobuf-parent-3.0.0.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.4.0/protobuf-parent-3.4.0.pom
@@ -837,7 +835,7 @@ https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.13.0/
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.17.2/protobuf-parent-3.17.2.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.19.2/protobuf-parent-3.19.2.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.19.3/protobuf-parent-3.19.3.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/4.29.0/protobuf-parent-4.29.0.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/4.30.0-RC1/protobuf-parent-4.30.0-RC1.pom
https://repo.maven.apache.org/maven2/com/google/truth/truth-parent/1.4.4/truth-parent-1.4.4.pom
https://repo.maven.apache.org/maven2/com/google/truth/truth/1.4.4/truth-1.4.4.pom
https://repo.maven.apache.org/maven2/com/google/zxing/core/3.4.1/core-3.4.1.pom
@@ -858,13 +856,13 @@ https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/4.11.0/okhttp-4
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.9.1/parent-3.9.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.2.0/okio-jvm-3.2.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.9.1/okio-jvm-3.9.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-jvm/3.10.2/okio-jvm-3.10.2.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.17.4/okio-parent-1.17.4.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.17.4/okio-1.17.4.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.8.0/okio-2.8.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.9.0/okio-2.9.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.2.0/okio-3.2.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.9.1/okio-3.9.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.10.2/okio-3.10.2.pom
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0.pom
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.1/all-1.2.1.pom
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.2/all-1.2.2.pom
@@ -971,9 +969,9 @@ https://repo.maven.apache.org/maven2/io/netty/netty-resolver/4.1.52.Final/netty-
https://repo.maven.apache.org/maven2/io/netty/netty-resolver/4.1.72.Final/netty-resolver-4.1.72.Final.pom
https://repo.maven.apache.org/maven2/io/netty/netty-resolver/5.0.0.Alpha2/netty-resolver-5.0.0.Alpha2.pom
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-classes/2.0.46.Final/netty-tcnative-classes-2.0.46.Final.pom
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-classes/2.0.69.Final/netty-tcnative-classes-2.0.69.Final.pom
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-classes/2.0.70.Final/netty-tcnative-classes-2.0.70.Final.pom
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-parent/2.0.46.Final/netty-tcnative-parent-2.0.46.Final.pom
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-parent/2.0.69.Final/netty-tcnative-parent-2.0.69.Final.pom
https://repo.maven.apache.org/maven2/io/netty/netty-tcnative-parent/2.0.70.Final/netty-tcnative-parent-2.0.70.Final.pom
https://repo.maven.apache.org/maven2/io/netty/netty-transport/4.1.34.Final/netty-transport-4.1.34.Final.pom
https://repo.maven.apache.org/maven2/io/netty/netty-transport/4.1.52.Final/netty-transport-4.1.52.Final.pom
https://repo.maven.apache.org/maven2/io/netty/netty-transport/4.1.72.Final/netty-transport-4.1.72.Final.pom
@@ -1006,15 +1004,15 @@ https://repo.maven.apache.org/maven2/junit/junit/4.13.2/junit-4.13.2.pom
https://repo.maven.apache.org/maven2/me/zhanghai/android/materialprogressbar/library/1.4.2/library-1.4.2.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.13/byte-buddy-agent-1.11.13.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.19/byte-buddy-agent-1.11.19.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.15.4/byte-buddy-agent-1.15.4.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.15.11/byte-buddy-agent-1.15.11.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.13/byte-buddy-parent-1.11.13.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.19/byte-buddy-parent-1.11.19.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.15.4/byte-buddy-parent-1.15.4.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.15.10/byte-buddy-parent-1.15.10.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.15.11/byte-buddy-parent-1.15.11.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.13/byte-buddy-1.11.13.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.19/byte-buddy-1.11.19.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.15.4/byte-buddy-1.15.4.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.15.10/byte-buddy-1.15.10.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.15.11/byte-buddy-1.15.11.pom
https://repo.maven.apache.org/maven2/net/java/dev/jna/jna-platform/5.6.0/jna-platform-5.6.0.pom
https://repo.maven.apache.org/maven2/net/java/dev/jna/jna/5.6.0/jna-5.6.0.pom
https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1.pom
@@ -1058,7 +1056,6 @@ https://repo.maven.apache.org/maven2/org/apache/apache/16/apache-16.pom
https://repo.maven.apache.org/maven2/org/apache/apache/18/apache-18.pom
https://repo.maven.apache.org/maven2/org/apache/apache/21/apache-21.pom
https://repo.maven.apache.org/maven2/org/apache/apache/23/apache-23.pom
https://repo.maven.apache.org/maven2/org/apache/apache/32/apache-32.pom
https://repo.maven.apache.org/maven2/org/apache/apache/33/apache-33.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.12/commons-compress-1.12.pom
@@ -1078,9 +1075,9 @@ https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/39/common
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/42/commons-parent-42.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/48/commons-parent-48.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/52/commons-parent-52.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/71/commons-parent-71.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/72/commons-parent-72.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/78/commons-parent-78.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/79/commons-parent-79.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/81/commons-parent-81.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/httpclient-4.2.6.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2.pom
@@ -1135,7 +1132,7 @@ https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.8.1/che
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.11.1/checker-qual-2.11.1.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.5.0/checker-qual-3.5.0.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.12.0/checker-qual-3.12.0.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.48.2/checker-qual-3.48.2.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.49.0/checker-qual-3.49.0.pom
https://repo.maven.apache.org/maven2/org/codehaus/codehaus-parent/4/codehaus-parent-4.pom
https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-xml/3.0.9/groovy-xml-3.0.9.pom
https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-xml/3.0.10/groovy-xml-3.0.10.pom
@@ -1285,7 +1282,7 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.6.10/
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.6.20/kotlin-reflect-1.6.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.7.10/kotlin-reflect-1.7.10.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.8.20-RC2/kotlin-reflect-1.8.20-RC2.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/2.1.0/kotlin-reflect-2.1.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/2.1.20-Beta2/kotlin-reflect-2.1.20-Beta2.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-common/1.6.20/kotlin-scripting-common-1.6.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-common/1.8.0/kotlin-scripting-common-1.8.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-common/1.9.0/kotlin-scripting-common-1.9.0.pom
@@ -1394,8 +1391,8 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.8.21/k
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.8.22/kotlin-stdlib-1.8.22.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.9.0/kotlin-stdlib-1.9.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.9.22/kotlin-stdlib-1.9.22.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.9.25/kotlin-stdlib-1.9.25.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.1.0/kotlin-stdlib-2.1.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/2.1.20-Beta2/kotlin-stdlib-2.1.20-Beta2.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-tooling-core/1.8.0/kotlin-tooling-core-1.8.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-tooling-core/1.9.0/kotlin-tooling-core-1.9.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-tooling-metadata/1.6.20/kotlin-tooling-metadata-1.6.20.pom
@@ -1409,17 +1406,17 @@ https://repo.maven.apache.org/maven2/org/jetbrains/markdown-jvm/0.2.1/markdown-j
https://repo.maven.apache.org/maven2/org/jetbrains/markdown/0.2.1/markdown-0.2.1.pom
https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
https://repo.maven.apache.org/maven2/org/json/json/20180813/json-20180813.pom
https://repo.maven.apache.org/maven2/org/json/json/20240303/json-20240303.pom
https://repo.maven.apache.org/maven2/org/json/json/20250107/json-20250107.pom
https://repo.maven.apache.org/maven2/org/jsoup/jsoup/1.13.1/jsoup-1.13.1.pom
https://repo.maven.apache.org/maven2/org/jspecify/jspecify/1.0.0/jspecify-1.0.0.pom
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.11.3/junit-bom-5.11.3.pom
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.12.0-RC2/junit-bom-5.12.0-RC2.pom
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.8.1/stax-ex-1.8.1.pom
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.pom
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/2.1.0/stax-ex-2.1.0.pom
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/3.12.4/mockito-core-3.12.4.pom
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/4.0.0/mockito-core-4.0.0.pom
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/5.14.2/mockito-core-5.14.2.pom
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/5.15.2/mockito-core-5.15.2.pom
https://repo.maven.apache.org/maven2/org/mockito/mockito-inline/4.0.0/mockito-inline-4.0.0.pom
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.2/objenesis-parent-3.2.pom
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.3/objenesis-parent-3.3.pom
+1
View File
@@ -36,4 +36,5 @@ org.gradle.toolchains.foojay-resolver-convention:org.gradle.toolchains.foojay-re
org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:$kotlin_version
com.android.tools.build:gradle:$tools_version
com.facebook.react:hermes-android:$hermes_version
com.android.tools.lint:lint-gradle:31.1.1
EOF
+1 -1
View File
@@ -41,7 +41,7 @@ function gen_deps_list() {
# FIXME: Fix for missing packages.
# https://github.com/status-im/status-mobile/issues/15447
function add_deps_hack() {
"${CUR_DIR}/deps_versions.sh" >> "${DEPS_LIST}"
"${CUR_DIR}/deps_hack.sh" >> "${DEPS_LIST}"
}
# Find download URLs for each dependency.
+6 -17
View File
@@ -53,25 +53,14 @@ in {
xcodeWrapper = callPackage ./pkgs/xcodeenv/compose-xcodewrapper.nix { } {
versions = ["16.0" "16.1" "16.2"];
};
go = super.go_1_21;
go = super.go_1_22;
clang = super.clang_15;
buildGoPackage = super.buildGo121Package;
buildGoModule = super.buildGo121Module;
gomobile = (super.gomobile.overrideAttrs (old: {
patches = [
(self.fetchurl { # https://github.com/golang/mobile/pull/84
url = "https://github.com/golang/mobile/commit/f20e966e05b8f7e06bed500fa0da81cf6ebca307.patch";
sha256 = "sha256-TZ/Yhe8gMRQUZFAs9G5/cf2b9QGtTHRSObBFD5Pbh7Y=";
})
(self.fetchurl { # https://github.com/golang/go/issues/58426
url = "https://github.com/golang/mobile/commit/406ed3a7b8e44dc32844953647b49696d8847d51.patch";
sha256 = "sha256-dqbYukHkQEw8npOkKykOAzMC3ot/Y4DEuh7fE+ptlr8=";
})
];
})).override {
# FIXME: No Android SDK packages for aarch64-darwin.
withAndroidPkgs = stdenv.system != "aarch64-darwin";
buildGoPackage = super.buildGo122Package;
buildGoModule = super.buildGo122Module;
gomobile = callPackage ./pkgs/gomobile {
#FIXME: No Android SDK packages for aarch64-darwin.
androidPkgs = self.androidEnvCustom.compose;
withAndroidPkgs = stdenv.system != "aarch64-darwin";
};
# Android environment
+85
View File
@@ -0,0 +1,85 @@
{
stdenv,
lib,
fetchgit,
fetchurl,
buildGo122Module,
zlib,
makeWrapper,
xcodeenv,
androidenv,
xcodeWrapperArgs ? { },
xcodeWrapper ? xcodeenv.composeXcodeWrapper xcodeWrapperArgs,
withAndroidPkgs ? stdenv.system != "aarch64-darwin",
androidPkgs ? (
androidenv.composeAndroidPackages {
includeNDK = true;
}
),
}:
buildGo122Module {
pname = "gomobile";
version = "0-unstable-2024-12-13";
src = fetchgit {
name = "gomobile";
url = "https://go.googlesource.com/mobile";
rev = "a87c1cf6cf463f0d4476cfe0fcf67c2953d76e7c";
hash = "sha256-7j4rdmCZMC8tn4vAsC9x/mMNkom/+Tl7uAY+5gkSvfY=";
};
vendorHash = "sha256-6ycxEDEE0/i6Lxo0gb8wq3U2U7Q49AJj+PdzSl57wwI=";
CGO_ENABLED = "1";
subPackages = [
"bind"
"cmd/gobind"
"cmd/gomobile"
];
# Fails with: go: cannot find GOROOT directory
doCheck = false;
nativeBuildInputs = [ makeWrapper ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcodeWrapper ];
# Prevent a non-deterministic temporary directory from polluting the resulting object files
postPatch = ''
substituteInPlace cmd/gomobile/env.go --replace-quiet \
'tmpdir, err = ioutil.TempDir("", "gomobile-work-")' \
'tmpdir = filepath.Join(os.Getenv("NIX_BUILD_TOP"), "gomobile-work")'
substituteInPlace cmd/gomobile/init.go --replace-quiet \
'tmpdir, err = ioutil.TempDir(gomobilepath, "work-")' \
'tmpdir = filepath.Join(os.Getenv("NIX_BUILD_TOP"), "work")'
# To fix unable to import bind: no Go package in golang.org/x/mobile/bind
substituteInPlace cmd/gomobile/init.go --replace \
'golang.org/x/mobile/cmd/gobind@latest' \
'golang.org/x/mobile/cmd/gobind'
'';
# Necessary for GOPATH when using gomobile.
postInstall = ''
mkdir -p $out/src/golang.org/x
ln -s $src $out/src/golang.org/x/mobile
'';
postFixup = ''
for prog in gomobile gobind; do
wrapProgram $out/bin/$prog \
--suffix GOPATH : $out \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ zlib ]}" \
${lib.optionalString withAndroidPkgs ''
--prefix PATH : "${androidPkgs.androidsdk}/bin" \
--set-default ANDROID_HOME "${androidPkgs.androidsdk}/libexec/android-sdk"
''}
done
'';
meta = {
description = "Tool for building and running mobile apps written in Go";
homepage = "https://pkg.go.dev/golang.org/x/mobile/cmd/gomobile";
license = with lib.licenses; [ bsd3 ];
maintainers = with lib.maintainers; [ jakubgs ];
};
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

+26 -18
View File
@@ -89,7 +89,11 @@
status-im.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN"
status-im.config/ALCHEMY_OPTIMISM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN"
status-im.config/ALCHEMY_BASE_MAINNET_TOKEN #shadow/env "ALCHEMY_BASE_MAINNET_TOKEN"
status-im.config/ALCHEMY_BASE_SEPOLIA_TOKEN #shadow/env "ALCHEMY_BASE_SEPOLIA_TOKEN"}
status-im.config/ALCHEMY_BASE_SEPOLIA_TOKEN #shadow/env "ALCHEMY_BASE_SEPOLIA_TOKEN"
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_USER #shadow/env "STATUS_BUILD_ETH_RPC_PROXY_USER"
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_PASSWORD #shadow/env
"STATUS_BUILD_ETH_RPC_PROXY_PASSWORD"
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_URL #shadow/env "STATUS_BUILD_ETH_RPC_PROXY_URL"}
:compiler-options {:output-feature-set :es5
;; We disable `:fn-deprecated` warnings because we
;; are managing deprecation via clj-kondo and we
@@ -111,23 +115,27 @@
:chunks {:fleets legacy.status-im.fleet.default-fleet/default-fleets}
:release
{:closure-defines
{status-im.config/POKT_TOKEN #shadow/env "POKT_TOKEN"
status-im.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN"
status-im.config/STATUS_BUILD_PROXY_USER #shadow/env "STATUS_BUILD_PROXY_USER"
status-im.config/STATUS_BUILD_PROXY_PASSWORD #shadow/env "STATUS_BUILD_PROXY_PASSWORD"
status-im.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY"
status-im.config/MIXPANEL_APP_ID #shadow/env "MIXPANEL_APP_ID"
status-im.config/MIXPANEL_TOKEN #shadow/env "MIXPANEL_TOKEN"
status-im.config/RARIBLE_MAINNET_API_KEY #shadow/env "RARIBLE_MAINNET_API_KEY"
status-im.config/RARIBLE_TESTNET_API_KEY #shadow/env "RARIBLE_TESTNET_API_KEY"
status-im.config/ALCHEMY_ETHEREUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ETHEREUM_MAINNET_TOKEN"
status-im.config/ALCHEMY_ETHEREUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ETHEREUM_SEPOLIA_TOKEN"
status-im.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN"
status-im.config/ALCHEMY_ARBITRUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ARBITRUM_SEPOLIA_TOKEN"
status-im.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN"
status-im.config/ALCHEMY_OPTIMISM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN"
status-im.config/ALCHEMY_BASE_MAINNET_TOKEN #shadow/env "ALCHEMY_BASE_MAINNET_TOKEN"
status-im.config/ALCHEMY_BASE_SEPOLIA_TOKEN #shadow/env "ALCHEMY_BASE_SEPOLIA_TOKEN"}
{status-im.config/POKT_TOKEN #shadow/env "POKT_TOKEN"
status-im.config/INFURA_TOKEN #shadow/env "INFURA_TOKEN"
status-im.config/STATUS_BUILD_PROXY_USER #shadow/env "STATUS_BUILD_PROXY_USER"
status-im.config/STATUS_BUILD_PROXY_PASSWORD #shadow/env "STATUS_BUILD_PROXY_PASSWORD"
status-im.config/OPENSEA_API_KEY #shadow/env "OPENSEA_API_KEY"
status-im.config/MIXPANEL_APP_ID #shadow/env "MIXPANEL_APP_ID"
status-im.config/MIXPANEL_TOKEN #shadow/env "MIXPANEL_TOKEN"
status-im.config/RARIBLE_MAINNET_API_KEY #shadow/env "RARIBLE_MAINNET_API_KEY"
status-im.config/RARIBLE_TESTNET_API_KEY #shadow/env "RARIBLE_TESTNET_API_KEY"
status-im.config/ALCHEMY_ETHEREUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ETHEREUM_MAINNET_TOKEN"
status-im.config/ALCHEMY_ETHEREUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ETHEREUM_SEPOLIA_TOKEN"
status-im.config/ALCHEMY_ARBITRUM_MAINNET_TOKEN #shadow/env "ALCHEMY_ARBITRUM_MAINNET_TOKEN"
status-im.config/ALCHEMY_ARBITRUM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_ARBITRUM_SEPOLIA_TOKEN"
status-im.config/ALCHEMY_OPTIMISM_MAINNET_TOKEN #shadow/env "ALCHEMY_OPTIMISM_MAINNET_TOKEN"
status-im.config/ALCHEMY_OPTIMISM_SEPOLIA_TOKEN #shadow/env "ALCHEMY_OPTIMISM_SEPOLIA_TOKEN"
status-im.config/ALCHEMY_BASE_MAINNET_TOKEN #shadow/env "ALCHEMY_BASE_MAINNET_TOKEN"
status-im.config/ALCHEMY_BASE_SEPOLIA_TOKEN #shadow/env "ALCHEMY_BASE_SEPOLIA_TOKEN"
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_USER #shadow/env "STATUS_BUILD_ETH_RPC_PROXY_USER"
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_PASSWORD #shadow/env
"STATUS_BUILD_ETH_RPC_PROXY_PASSWORD"
status-im.config/STATUS_BUILD_ETH_RPC_PROXY_URL #shadow/env "STATUS_BUILD_ETH_RPC_PROXY_URL"}
:compiler-options {:output-feature-set :es6
;;disable for android build as there
;;is an intermittent warning with deftype
@@ -6,28 +6,17 @@
[{:keys [status theme blur?]}]
{:flex-direction :row
:align-self :flex-start
:background-color (cond (= status :error)
(colors/theme-colors
(colors/override-color :danger 10 50)
(colors/override-color :danger 10 60)
theme)
(= status :warning)
(colors/theme-colors
(colors/override-color :warning 10 50)
(colors/override-color :warning 10 60)
theme))
:background-color (when (= status :error)
(colors/theme-colors
(colors/override-color :danger 10 50)
(colors/override-color :danger 10 60)
theme))
:border-width 1
:border-color (cond (= status :error)
(colors/theme-colors
(colors/override-color :danger 20 50)
(colors/override-color :danger 20 60)
theme)
(= status :warning)
(colors/theme-colors
(colors/override-color :warning 20 50)
(colors/override-color :warning 20 60)
theme)
(and blur? (= status :default)) (colors/theme-colors
colors/neutral-80-opa-5
colors/white-opa-5
@@ -46,7 +35,5 @@
[{:keys [status theme networks-shown?]}]
{:padding-left (if networks-shown? 4 0)
:margin-top -1
:color (cond (= status :error)
(colors/resolve-color :danger theme)
(= status :warning)
(colors/resolve-color :warning theme))})
:color (when (= status :error)
(colors/resolve-color :danger theme))})
+32 -29
View File
@@ -9,35 +9,38 @@
[{:keys [db]} {:keys [type action data error] :as event}]
(log/info "local pairing signal received"
{:event event})
(let [{:keys [account password]} data
role (get-in db [:syncing :role])
receiver? (= role constants/local-pairing-role-receiver)
sender? (= role constants/local-pairing-role-sender)
connection-success? (and (= type
constants/local-pairing-event-connection-success)
(= action
constants/local-pairing-action-connect))
connection-error? (= type
constants/local-pairing-event-connection-error)
error-on-pairing? (contains? constants/local-pairing-event-errors type)
completed-pairing? (and (= type
constants/local-pairing-event-transfer-success)
(= action
constants/local-pairing-action-pairing-installation))
received-account? (and (= type
constants/local-pairing-event-received-account)
(= action
constants/local-pairing-action-pairing-account)
(and (some? account) (some? password)))
multiaccount-data (when received-account?
(merge account {:password password}))
navigate-to-syncing-devices? (and (or connection-success? connection-error?) receiver?)
user-in-syncing-devices-screen? (or (= (:view-id db) :screen/onboarding.syncing-progress)
(= (:view-id db) :screen/profile.profiles)
(= (:view-id db) :screen/onboarding.syncing-progress-intro))
user-in-sign-in-intro-screen? (= (:view-id db) :screen/onboarding.sign-in-intro)
keystore-files-transfer-action? (= action
constants/local-pairing-action-keystore-files-transfer)]
(let [{:keys [account password chatKey]} data
role (get-in db [:syncing :role])
receiver? (= role constants/local-pairing-role-receiver)
sender? (= role constants/local-pairing-role-sender)
connection-success? (and (= type
constants/local-pairing-event-connection-success)
(= action
constants/local-pairing-action-connect))
connection-error? (= type
constants/local-pairing-event-connection-error)
error-on-pairing? (contains? constants/local-pairing-event-errors type)
completed-pairing? (and (= type
constants/local-pairing-event-transfer-success)
(= action
constants/local-pairing-action-pairing-installation))
received-account? (and (= type
constants/local-pairing-event-received-account)
(= action
constants/local-pairing-action-pairing-account)
(and (some? account) (some? password)))
multiaccount-data (when received-account?
(merge account
{:password password
:whisper-private-key chatKey}))
navigate-to-syncing-devices? (and (or connection-success? connection-error?) receiver?)
user-in-syncing-devices-screen? (or (= (:view-id db) :screen/onboarding.syncing-progress)
(= (:view-id db) :screen/profile.profiles)
(= (:view-id db)
:screen/onboarding.syncing-progress-intro))
user-in-sign-in-intro-screen? (= (:view-id db) :screen/onboarding.sign-in-intro)
keystore-files-transfer-action? (= action
constants/local-pairing-action-keystore-files-transfer)]
(merge {:db (cond-> db
connection-success?
(assoc-in [:syncing :pairing-status] :connected)
+1
View File
@@ -29,6 +29,7 @@
:keycard-migration (js/require "../resources/images/ui2/keycard-migration.png")
:keycard-migration-failed (js/require "../resources/images/ui2/keycard-migration-failed.png")
:keycard-migration-succeeded (js/require "../resources/images/ui2/keycard-migration-succeeded.png")
:keycard-not-same (js/require "../resources/images/ui2/keycard-not-same.png")
:not-keycard (js/require "../resources/images/ui2/not-keycard.png")
:discover (js/require "../resources/images/ui2/discover.png")
:invite-friends (js/require "../resources/images/ui2/invite-friends.png")
@@ -10,16 +10,35 @@
[utils.re-frame :as rf]
[utils.security.core :as security]))
(defn- partially-operable-accounts?
[accounts]
(->> accounts
vals
(some #(= :partially (:operable %)))
boolean))
(rf/reg-event-fx :standard-auth/migrate-partially-operable-accounts
(fn [{:keys [db]} [{:keys [masked-password on-success]}]]
(let [on-auth-success-callback #(on-success masked-password)
has-partially-operable-accounts? (-> (get-in db [:wallet :accounts])
partially-operable-accounts?)]
{:fx [(if has-partially-operable-accounts?
[:dispatch
[:wallet/make-partially-operable-accounts-fully-operable
{:password masked-password
:on-success on-auth-success-callback
:on-error on-auth-success-callback}]]
[:effects.standard-auth/on-auth-success on-auth-success-callback])]})))
(defn- handle-password-success
[has-partially-operable-accounts? on-auth-success masked-password]
[{:keys [migrate-partially-operable-accounts? on-auth-success masked-password]}]
(let [on-auth-success-callback #(on-auth-success masked-password)]
(rf/dispatch [:standard-auth/set-success true])
(rf/dispatch [:standard-auth/reset-login-password])
(if has-partially-operable-accounts?
(rf/dispatch [:wallet/make-partially-operable-accounts-fully-operable
{:password masked-password
:on-success on-auth-success-callback
:on-error on-auth-success-callback}])
(if migrate-partially-operable-accounts?
(rf/dispatch [:standard-auth/migrate-partially-operable-accounts
{:masked-password masked-password
:on-success on-auth-success}])
(on-auth-success-callback))))
(defn authorize
@@ -42,9 +61,10 @@
{:pin pin
:on-success (fn [{:keys [encryption-public-key]}]
(rf/dispatch [:keycard/disconnect])
(handle-password-success false
on-auth-success
(security/mask-data encryption-public-key)))
(handle-password-success {:migrate-partially-operable-accounts? false
:on-auth-success on-auth-success
:masked-password (security/mask-data
encryption-public-key)}))
:on-failure #(rf/dispatch [:keycard/on-action-with-pin-error
%])}]))}]))}]]
[:effects.biometric/check-if-available
@@ -85,7 +105,12 @@
keycard? (get-in db [:profile/profile :keycard-pairing])]
{:fx [(if keycard?
[:keychain/get-keycard-keys [key-uid on-auth-success]]
[:keychain/get-user-password [key-uid on-auth-success]])
[:keychain/get-user-password
[key-uid
(fn [masked-password]
(rf/dispatch [:standard-auth/migrate-partially-operable-accounts
{:masked-password masked-password
:on-success on-auth-success}]))]])
[:dispatch [:standard-auth/set-success true]]
[:dispatch [:standard-auth/reset-login-password]]]}))
@@ -108,15 +133,14 @@
(defn- bottom-sheet-password-view
[{:keys [on-press-biometric on-auth-success auth-button-icon-left auth-button-label]}]
(fn []
(let [has-partially-operable-accounts? (rf/sub [:wallet/has-partially-operable-accounts?])]
[enter-password/view
{:on-enter-password #(handle-password-success
has-partially-operable-accounts?
on-auth-success
(security/hash-masked-password %))
:on-press-biometrics on-press-biometric
:button-icon-left auth-button-icon-left
:button-label auth-button-label}])))
[enter-password/view
{:on-enter-password #(handle-password-success {:migrate-partially-operable-accounts? true
:on-auth-success on-auth-success
:masked-password (security/hash-masked-password
%)})
:on-press-biometrics on-press-biometric
:button-icon-left auth-button-icon-left
:button-label auth-button-label}]))
(defn authorize-with-keycard
[_ [{:keys [on-complete]}]]
@@ -155,6 +179,12 @@
(when on-close
(on-close success?))))
(rf/reg-fx
:effects.standard-auth/on-auth-success
(fn [on-auth-success]
(when on-auth-success
(on-auth-success))))
(rf/reg-event-fx
:standard-auth/close
(fn [{:keys [db]} [on-close]]
+3
View File
@@ -28,6 +28,9 @@
(goog-define WALLET_CONNECT_PROJECT_ID "87815d72a81d739d2a7ce15c2cfdefb3")
(goog-define MIXPANEL_APP_ID "3350627")
(goog-define MIXPANEL_TOKEN "5c73bda2d36a9f688a5ee45641fb6775")
(goog-define STATUS_BUILD_ETH_RPC_PROXY_USER "")
(goog-define STATUS_BUILD_ETH_RPC_PROXY_PASSWORD "")
(goog-define STATUS_BUILD_ETH_RPC_PROXY_URL "")
(def mainnet-rpc-url (str "https://eth-archival.rpc.grove.city/v1/" POKT_TOKEN))
(def sepolia-rpc-url (str "https://sepolia-archival.rpc.grove.city/v1/" POKT_TOKEN))
-3
View File
@@ -443,10 +443,7 @@
(def ^:const wallet-account-name-max-length 20)
(def ^:const gas-rate-low 0)
(def ^:const gas-rate-medium 1)
(def ^:const gas-rate-high 2)
(def ^:const gas-rate-custom 3)
(def ^:const send-type-transfer 0)
(def ^:const send-type-bridge 5)
(def ^:const send-type-erc-721-transfer 6)
@@ -23,4 +23,7 @@
(do
(rf/dispatch [:keycard/disconnect])
(rf/dispatch [:open-modal :screen/keycard.empty]))
(rf/dispatch [:keycard/on-application-info-error error])))}]]]})))
(rf/dispatch [:keycard/on-application-info-error
(if (= error :keycard/error.keycard-wrong-profile)
:keycard/error.keycard-not-empty
error)])))}]]]})))
@@ -83,7 +83,7 @@
(fn [{:keys [db]} [error]]
(if (or (= error :keycard/error.keycard-empty)
(and (get-in db [:keycard :application-info :initialized?])
(= error :keycard/error.keycard-wrong-profile)))
(= error :keycard/error.keycard-not-empty)))
(rf/dispatch [:keycard/create.continue])
(rf/dispatch [:keycard/on-application-info-error error]))))
@@ -2,6 +2,7 @@
(:require [quo.core :as quo]
[react-native.core :as rn]
[status-im.common.events-helper :as events-helper]
[status-im.common.resources :as resources]
[utils.i18n :as i18n]))
(defn view
@@ -14,7 +15,10 @@
{:title (i18n/label :t/different-keycard)
:description :text
:description-text (i18n/label :t/scan-previous-keycard)}]
[rn/view {:style {:flex 1}}]
[rn/image
{:resize-mode :contain
:style {:flex 1 :width (:width (rn/get-window))}
:source (resources/get-image :keycard-not-same)}]
[rn/view {:style {:padding-horizontal 20}}
[quo/button {:on-press events-helper/navigate-back}
(i18n/label :t/try-again)]]])
+2 -1
View File
@@ -94,7 +94,8 @@
(rf/reg-fx :effects.keycard/login-with-keycard
(fn [{:keys [key-uid password whisper-private-key]}]
(native-module/login-account
(assoc (profile.config/login)
(assoc (merge (profile.config/login)
(profile.config/fix-node-config-migration))
:keyUid key-uid
:password password
:keycardWhisperPrivateKey whisper-private-key))))
+10 -10
View File
@@ -9,16 +9,16 @@
[utils.re-frame :as rf]))
(def titles
{:keycard/error.keycard-empty {:title (i18n/label :t/keycard-empty)
:description (i18n/label :t/no-key-pair-keycard)}
:keycard/error.keycard-wrong-profile {:title (i18n/label :t/keycard-not-empty)
:description (i18n/label :t/cant-store-new-keys)}
:keycard/error.keycard-unpaired {:title (i18n/label :t/keycard-full)
:description (i18n/label :t/pairing-slots-occupied)}
:keycard/error.keycard-frozen {:title (i18n/label :t/keycard-blocked)
:description (i18n/label :t/cant-use-right-now)}
:keycard/error.keycard-locked {:title (i18n/label :t/keycard-blocked)
:description (i18n/label :t/cant-use-right-now)}})
{:keycard/error.keycard-empty {:title (i18n/label :t/keycard-empty)
:description (i18n/label :t/no-key-pair-keycard)}
:keycard/error.keycard-not-empty {:title (i18n/label :t/keycard-not-empty)
:description (i18n/label :t/cant-store-new-keys)}
:keycard/error.keycard-unpaired {:title (i18n/label :t/keycard-full)
:description (i18n/label :t/pairing-slots-occupied)}
:keycard/error.keycard-frozen {:title (i18n/label :t/keycard-blocked)
:description (i18n/label :t/cant-use-right-now)}
:keycard/error.keycard-locked {:title (i18n/label :t/keycard-blocked)
:description (i18n/label :t/cant-use-right-now)}})
(defn view
[]
+3 -2
View File
@@ -132,8 +132,9 @@
:fx [[:dispatch [:keycard/disconnect]]
[:dispatch
[:open-modal
(if (= :keycard/error.not-keycard error)
:screen/keycard.not-keycard
(case error
:keycard/error.not-keycard :screen/keycard.not-keycard
:keycard/error.keycard-wrong-profile :screen/keycard.different-card
:screen/keycard.error)]]]}))
(rf/reg-event-fx :keycard/update-application-info
@@ -32,11 +32,7 @@
(reset-card)
(do
(rf/dispatch [:navigate-back])
(if (= error :keycard/error.keycard-wrong-profile)
(do
(rf/dispatch [:keycard/disconnect])
(rf/dispatch [:open-modal :screen/keycard.different-card]))
(rf/dispatch [:keycard/on-application-info-error error])))))}]))
(rf/dispatch [:keycard/on-application-info-error error]))))}]))
(defn success-view
[]
@@ -46,7 +46,7 @@
{:theme :dark
:on-error
(fn [error]
(if (= error :keycard/error.keycard-wrong-profile)
(if (= error :keycard/error.keycard-not-empty)
(do
(rf/dispatch [:keycard/disconnect])
(rf/dispatch [:open-modal :screen/keycard.pin.enter
@@ -27,5 +27,7 @@
:callback
(fn [{:keys [error]}]
(if (string/blank? error)
(rf/dispatch [:navigate-to :screen/keycard.migrate.success])
(do
(rf/dispatch [:biometric/disable])
(rf/dispatch [:navigate-to :screen/keycard.migrate.success]))
(rf/dispatch [:navigate-to :screen/keycard.migrate.fail])))}]]})))
@@ -80,8 +80,4 @@
:else
(do
(rf/dispatch [:navigate-back])
(if (= error :keycard/error.keycard-wrong-profile)
(do
(rf/dispatch [:keycard/disconnect])
(rf/dispatch [:open-modal :screen/keycard.different-card]))
(rf/dispatch [:keycard/on-application-info-error error])))))}]]]}))
(rf/dispatch [:keycard/on-application-info-error error]))))}]]]}))
+7 -3
View File
@@ -30,6 +30,13 @@
(not has-master-key?)
:keycard/error.keycard-empty
(and (nil? profile-key-uid)
(some? key-uid))
:keycard/error.keycard-not-empty
(not= profile-key-uid key-uid)
:keycard/error.keycard-wrong-profile
(and (zero? pin-retry-counter)
(or (nil? puk-retry-counter)
(pos? puk-retry-counter)))
@@ -41,9 +48,6 @@
(not paired?)
:keycard/error.keycard-unpaired
(not= profile-key-uid key-uid)
:keycard/error.keycard-wrong-profile
:else
nil))
@@ -18,7 +18,6 @@
[{:type :select
:key :status
:options [{:key :error}
{:key :warning}
{:key :default}]}
{:type :text
:key :title}
+28 -18
View File
@@ -11,6 +11,9 @@
{;; Temporary fix until https://github.com/status-im/status-go/issues/3024 is resolved
:wakuV2Nameserver "8.8.8.8"
:kdfIterations 3200
:ethRpcProxyUser config/STATUS_BUILD_ETH_RPC_PROXY_USER
:ethRpcProxyPassword config/STATUS_BUILD_ETH_RPC_PROXY_PASSWORD
:ethRpcProxyUrl config/STATUS_BUILD_ETH_RPC_PROXY_URL
:statusProxyEnabled config/status-proxy-enabled?
:statusProxyStageName config/status-proxy-stage-name
:statusProxyMarketUser config/STATUS_BUILD_PROXY_USER
@@ -31,28 +34,35 @@
:alchemyBaseMainnetToken config/ALCHEMY_BASE_MAINNET_TOKEN
:alchemyBaseSepoliaToken config/ALCHEMY_BASE_SEPOLIA_TOKEN})
(defn- common-config
[]
{:verifyTransactionURL config/verify-transaction-url
:verifyENSURL config/verify-ens-url
:verifyENSContractAddress config/verify-ens-contract-address
:verifyTransactionChainID config/verify-transaction-chain-id
:wakuV2LightClient true
:wakuV2EnableMissingMessageVerification true
:wakuV2EnableStoreConfirmationForMessagesSent false})
(defn fix-node-config-migration
[]
(common-config))
(defn create
[]
(let [log-enabled? (boolean (not-empty config/log-level))]
(assoc
(merge
(login)
:deviceName (native-module/get-installation-name)
:rootDataDir (native-module/backup-disabled-data-dir)
:rootKeystoreDir (native-module/keystore-dir)
:logLevel (when log-enabled? config/log-level)
:logEnabled log-enabled?
:logFilePath (native-module/log-file-directory)
:verifyTransactionURL config/verify-transaction-url
:verifyENSURL config/verify-ens-url
:verifyENSContractAddress config/verify-ens-contract-address
:verifyTransactionChainID config/verify-transaction-chain-id
:wakuV2LightClient true
:wakuV2Fleet config/fleet
;; NOTE: https://github.com/status-im/status-go/pull/5570#discussion_r1690794119
:wakuV2EnableMissingMessageVerification true
:wakuV2EnableStoreConfirmationForMessagesSent false
:previewPrivacy config/blank-preview?
:testNetworksEnabled config/test-networks-enabled?)))
(common-config)
{:deviceName (native-module/get-installation-name)
:rootDataDir (native-module/backup-disabled-data-dir)
:rootKeystoreDir (native-module/keystore-dir)
:logLevel (when log-enabled? config/log-level)
:logEnabled log-enabled?
:logFilePath (native-module/log-file-directory)
:wakuV2Fleet config/fleet
:previewPrivacy config/blank-preview?
:testNetworksEnabled config/test-networks-enabled?})))
(defn strip-file-prefix
[path]
@@ -8,7 +8,10 @@
(fn [[key-uid hashed-password]]
;;"node.login" signal will be triggered as a callback
(native-module/login-account
(assoc (profile.config/login) :keyUid key-uid :password hashed-password))))
(assoc (merge (profile.config/login)
(profile.config/fix-node-config-migration))
:keyUid key-uid
:password hashed-password))))
(rf/reg-fx :effects.profile/enable-local-notifications
(fn []
@@ -26,16 +26,22 @@
(rf/reg-event-fx :profile.login/local-paired-user
(fn [{:keys [db]}]
(let [{:keys [key-uid password]} (get-in db [:syncing :profile])
login-sha3-password (get-in db [:syncing :login-sha3-password])
password (if-not (nil? login-sha3-password) ;; already logged in
login-sha3-password
password)
masked-password (security/mask-data password)]
{:db (-> db
(assoc-in [:onboarding/profile :password] masked-password)
(assoc-in [:onboarding/profile :syncing?] true))
:effects.profile/login [key-uid password]})))
(let [{:keys [key-uid password keycard-pairing
whisper-private-key]} (get-in db [:syncing :profile])
login-sha3-password (get-in db [:syncing :login-sha3-password])
password (if-not (nil? login-sha3-password) ;; already logged in
login-sha3-password
password)
masked-password (security/mask-data password)]
{:db (-> db
(assoc-in [:onboarding/profile :password] masked-password)
(assoc-in [:onboarding/profile :syncing?] true))
:fx [(if keycard-pairing
[:effects.keycard/login-with-keycard
{:password password
:whisper-private-key whisper-private-key
:key-uid key-uid}]
[:effects.profile/login [key-uid password]])]})))
;; login phase 1: we want to load and show chats faster, so we split login into 2 phases
(rf/reg-event-fx :profile.login/login-existing-profile
@@ -256,6 +256,12 @@
(rf/dispatch
[:keycard/connect
{:key-uid key-uid
:on-error
(fn [error]
(rf/dispatch [:keycard/on-application-info-error
(if (= error :keycard/error.keycard-empty)
:keycard/error.keycard-wrong-profile
error)]))
:on-success
(fn []
(rf/dispatch
@@ -144,9 +144,9 @@
on-change-text (rn/use-callback
(fn [new-value]
(let [trimmed-value (string/trim new-value)]
(set-error (validate (string/lower-case trimmed-value)))
(set-address-or-ens trimmed-value)
(set-ens-address "")
(set-error (validate (string/lower-case trimmed-value)))
(when (validation/ens-name? trimmed-value)
(debounce/debounce-and-dispatch
[:wallet/resolve-ens
@@ -154,3 +154,15 @@
{:db (update-in db [:wallet :ui] dissoc :saved-address)})
(rf/reg-event-fx :wallet/clear-address-to-save clear-address-to-save)
(defn check-remaining-capacity-for-saved-addresses
[{:keys [db]} [{:keys [on-success on-error]}]]
(let [test-networks-enabled? (boolean (get-in db [:profile/profile :test-networks-enabled?]))]
{:fx [[:json-rpc/call
[{:method "wakuext_remainingCapacityForSavedAddresses"
:params [test-networks-enabled?]
:on-success on-success
:on-error on-error}]]]}))
(rf/reg-event-fx :wallet/check-remaining-capacity-for-saved-addresses
check-remaining-capacity-for-saved-addresses)
@@ -103,7 +103,13 @@
(defn- add-address-to-save
[]
(rf/dispatch [:open-modal :screen/settings.add-address-to-save]))
(rf/dispatch [:wallet/check-remaining-capacity-for-saved-addresses
{:on-success #(rf/dispatch [:open-modal :screen/settings.add-address-to-save])
:on-error #(rf/dispatch [:toasts/upsert
{:type :negative
:theme :dark
:text (i18n/label
:t/saved-addresses-limit-reached-toast)}])}]))
(defn view
[]
@@ -64,7 +64,7 @@
[button (assoc params :word (second options))]])
(defn- complete-backup-sheet
[on-success]
[on-success on-try-again]
(let [customization-color (rf/sub [:profile/customization-color])
[checked? set-checked] (rn/use-state false)]
[:<>
@@ -88,7 +88,10 @@
:button-two-label (i18n/label :t/cancel)
:button-two-props {:type :grey
:on-press (fn []
(rf/dispatch [:hide-bottom-sheet]))}}]]))
(rf/dispatch [:hide-bottom-sheet])
(when on-try-again
(rf/dispatch [:navigate-back])
(on-try-again)))}}]]))
(defn view
[]
@@ -123,7 +126,8 @@
{:theme theme
:shell? shell?
:content (fn [] [complete-backup-sheet
on-success])}])))
on-success
on-try-again])}])))
(do
(when (> @incorrect-count 0)
(rf/dispatch [:show-bottom-sheet
@@ -35,13 +35,12 @@
chain-ids (chain/chain-ids db)
params [[address] chain-ids (create-default-filters) limit-per-request]]
{:db (-> db
(update-in [:wallet :activities] dissoc address)
(update-in [:wallet :ui :activity-tab :request] dissoc :request-id)
(update-in [:wallet :ui :activity-tab :request]
assoc
:address address
:loading? true
:initial-request? true))
:address address
:loading? true
:remove-all-previous-activites? true))
:fx [[:json-rpc/call
[{:method "wallet_startActivityFilterSessionV2"
:params params
@@ -69,7 +68,8 @@
has-more? (get-in db [:wallet :ui :activity-tab :request :has-more?])
params [session-id limit-per-request]]
(when (and session-id has-more?)
{:fx [[:json-rpc/call
{:db (assoc-in db [:wallet :ui :activity-tab :request :remove-all-existing-activities?] false)
:fx [[:json-rpc/call
[{:method "wallet_getMoreForActivityFilterSession"
:params params
:on-error [:wallet/log-rpc-error
@@ -80,7 +80,7 @@
:wallet/reset-activities-filter-session
(fn [{:keys [db]}]
(when-let [session-id (get-in db [:wallet :ui :activity-tab :request :request-id])]
{:db (assoc-in db [:wallet :ui :activity-tab :request :initial-request?] true)
{:db (assoc-in db [:wallet :ui :activity-tab :request :remove-all-existing-activities?] true)
:fx [[:json-rpc/call
[{:method "wallet_resetActivityFilterSession"
:params [session-id limit-per-request]
@@ -91,21 +91,22 @@
(rf/reg-event-fx
:wallet/activity-filtering-for-current-account-done
(fn [{:keys [db]} [{:keys [message]}]]
(let [{:keys [address initial-request?]} (get-in db [:wallet :ui :activity-tab :request])
{:keys [activities offset hasMore]} (transforms/json->clj message)
new-activities (->> activities
(cske/transform-keys transforms/->kebab-case-keyword)
(collection/index-by :key))
existing-activities (get-in db [:wallet :activities address])
updated-activities (if initial-request?
new-activities
(nested-merge existing-activities new-activities))]
(let [{:keys [address
remove-all-existing-activities?]} (get-in db [:wallet :ui :activity-tab :request])
{:keys [activities offset hasMore]} (transforms/json->clj message)
new-activities (->> activities
(cske/transform-keys
transforms/->kebab-case-keyword)
(collection/index-by :key))
existing-activities (get-in db [:wallet :activities address])
updated-activities (if remove-all-existing-activities?
new-activities
(nested-merge existing-activities new-activities))]
{:db (-> db
(assoc-in [:wallet :activities address] updated-activities)
(assoc-in [:wallet :ui :activity-tab :request :offset] offset)
(assoc-in [:wallet :ui :activity-tab :request :has-more?] hasMore)
(assoc-in [:wallet :ui :activity-tab :request :loading?] false)
(assoc-in [:wallet :ui :activity-tab :request :initial-request?] false))})))
(assoc-in [:wallet :ui :activity-tab :request :loading?] false))})))
(rf/reg-event-fx
:wallet/activities-filtering-entries-updated
@@ -31,11 +31,20 @@
on-end-reached (rn/use-callback
#(rf/dispatch
[:wallet/get-more-for-activities-filter-session]))]
(if (and (and (some? loading?) (false? loading?)) (empty? activity-list))
(cond
(and (empty? activity-list) loading?)
[quo/skeleton-list
{:content :messages
:parent-height (:height (rn/get-window))
:animated? false}]
(and (empty? activity-list) (false? loading?))
[empty-tab/view
{:title (i18n/label :t/no-activity)
:description (i18n/label :t/empty-tab-description)
:image (resources/get-themed-image :no-activity theme)}]
:else
[rn/section-list
{:sections activity-list
:sticky-section-headers-enabled false
+33 -53
View File
@@ -5,7 +5,6 @@
[clojure.string :as string]
[status-im.constants :as constants]
[status-im.contexts.wallet.collectible.utils :as collectible-utils]
[status-im.contexts.wallet.common.utils.networks :as network-utils]
[status-im.contexts.wallet.send.utils :as send-utils]
[utils.collection :as utils.collection]
[utils.money :as money]
@@ -165,10 +164,7 @@
(defn- add-keys-to-saved-address
[saved-address]
(-> saved-address
(assoc :network-preferences-names
(network-utils/network-preference-prefix->network-names (:chain-short-names saved-address)))
(assoc :ens? (not (string/blank? (:ens saved-address))))))
(assoc saved-address :ens? (not (string/blank? (:ens saved-address)))))
(defn rpc->saved-address
[saved-address]
@@ -231,22 +227,9 @@
(def ^:private precision 6)
(defn from-wei
[wei-amount]
(send-utils/convert-to-gwei wei-amount precision))
(defn new->old-route-path
[new-path]
(tap> {:in :new->old-route-path
:new-path new-path
:suggested-tx-nonce (-> new-path
:suggested-tx-nonce
money/from-hex
money/to-string
js/parseInt)
:suggested-tx-gas-amount (:suggested-tx-gas-amount new-path)})
(let [to-bignumber (fn [k] (-> new-path k money/bignumber))
suggested-levels-for-max-fees-per-gas (:suggested-levels-for-max-fees-per-gas new-path)]
(let [to-bignumber (fn [k] (-> new-path k money/bignumber))]
{:approval-fee (to-bignumber :approval-fee)
:approval-l-1-fee (to-bignumber :approval-l-1-fee)
:bonder-fees (to-bignumber :tx-bonder-fees)
@@ -255,27 +238,35 @@
:amount-in-locked (:amount-in-locked new-path)
:amount-in (:amount-in new-path)
:max-amount-in (:max-amount-in new-path)
:gas-fees {:gas-price "0"
:base-fee (from-wei (:tx-base-fee new-path))
:tx-priority-fee (from-wei (:tx-priority-fee new-path))
:l-1-gas-fee (from-wei (:tx-l-1-fee new-path))
:eip-1559-enabled true
:tx-max-fees-per-gas (from-wei (:tx-max-fees-per-gas new-path))
:current-base-fee (from-wei (:current-base-fee new-path))
:suggested-min-priority-fee (from-wei (:suggested-min-priority-fee
new-path))
:suggested-max-priority-fee (from-wei (:suggested-max-priority-fee
new-path))
:suggested-gas-fees-for-setting
{:transaction-setting/normal (from-wei
(:low
suggested-levels-for-max-fees-per-gas))
:transaction-setting/fast (from-wei
(:medium
suggested-levels-for-max-fees-per-gas))
:transaction-setting/urgent (from-wei
(:high
suggested-levels-for-max-fees-per-gas))}}
:gas-fees {:gas-price "0"
:base-fee (send-utils/convert-to-gwei (:tx-base-fee
new-path)
precision)
:max-priority-fee-per-gas (send-utils/convert-to-gwei (:tx-priority-fee
new-path)
precision)
:max-fee-per-gas-low (send-utils/convert-to-gwei
(get-in
new-path
[:suggested-levels-for-max-fees-per-gas
:low])
precision)
:max-fee-per-gas-medium (send-utils/convert-to-gwei
(get-in
new-path
[:suggested-levels-for-max-fees-per-gas
:medium])
precision)
:max-fee-per-gas-high (send-utils/convert-to-gwei
(get-in
new-path
[:suggested-levels-for-max-fees-per-gas
:high])
precision)
:l-1-gas-fee (send-utils/convert-to-gwei (:tx-l-1-fee
new-path)
precision)
:eip-1559-enabled true}
:bridge-name (:processor-name new-path)
:amount-out (:amount-out new-path)
:approval-contract-address (:approval-contract-address new-path)
@@ -283,19 +274,8 @@
:estimated-time (:estimated-time new-path)
:to (:to-chain new-path)
:approval-amount-required (:approval-amount-required new-path)
:gas-amount (:tx-gas-amount new-path)
:router-input-params-uuid (:router-input-params-uuid new-path)
:nonce (-> new-path
:tx-nonce
money/from-hex
money/to-string
js/parseInt)
:suggested-tx-nonce (-> new-path
:suggested-tx-nonce
money/from-hex
money/to-string
js/parseInt)
:suggested-tx-gas-amount (:suggested-tx-gas-amount new-path)}))
;; :cost () ;; tbd not used on desktop
:gas-amount (:tx-gas-amount new-path)}))
(defn tokens-never-loaded?
[db]
+14 -13
View File
@@ -57,11 +57,10 @@
(rf/reg-event-fx :wallet/select-account-tab
(fn [{:keys [db]} [tab]]
(let [activity-tab-selected? (= tab :activity)]
{:db (assoc-in db [:wallet :ui :account-page :active-tab] tab)
:fx [(if activity-tab-selected?
[:dispatch [:wallet/fetch-activities-for-current-account]]
[:dispatch [:wallet/stop-activity-filter-session]])]})))
{:db (assoc-in db [:wallet :ui :account-page :active-tab] tab)
:fx [(if (= tab :activity)
[:dispatch [:wallet/fetch-activities-for-current-account]]
[:dispatch [:wallet/stop-activity-filter-session]])]}))
(rf/reg-event-fx :wallet/select-home-tab
(fn [{:keys [db]} [tab]]
@@ -436,14 +435,16 @@
(rf/reg-event-fx
:wallet/start-bridge
(fn [{:keys [db]}]
(let [view-id (:view-id db)]
(cond-> {:db (assoc-in db [:wallet :ui :send :tx-type] :tx/bridge)}
(= view-id :screen/wallet.accounts)
(assoc :fx
[[:dispatch
[:wallet/wizard-navigate-forward
{:start-flow? true
:flow-id :wallet-bridge-flow}]]])))))
{:db (assoc-in db [:wallet :ui :send :tx-type] :tx/bridge)
:fx [[:dispatch
[:wallet/wizard-navigate-forward
{:start-flow? true
:flow-id :wallet-bridge-flow}]]]}))
(rf/reg-event-fx
:wallet/set-send-tx-type
(fn [{:keys [db]} [type]]
{:db (assoc-in db [:wallet :ui :send :tx-type] type)}))
(rf/reg-event-fx :wallet/select-bridge-network
(fn [{:keys [db]} [{:keys [network-chain-id stack-id]}]]
+6 -2
View File
@@ -91,12 +91,16 @@
{:content buy-token/view}]))
on-bridge-press (rn/use-callback
(fn []
;; For a single account, it starts the bridge flow immediately. For
;; multiple accounts, it sets the transaction type and starts the
;; bridge flow after account selection.
(rf/dispatch [:wallet/clean-send-data])
(when-not multiple-accounts?
(rf/dispatch [:wallet/switch-current-viewing-account
first-account-address]))
(rf/dispatch [:wallet/start-bridge])
first-account-address])
(rf/dispatch [:wallet/start-bridge]))
(when multiple-accounts?
(rf/dispatch [:wallet/set-send-tx-type :tx/bridge])
(rf/dispatch [:open-modal :screen/wallet.select-from])))
[multiple-accounts? first-account-address])
on-swap-press (rn/use-callback
+95 -151
View File
@@ -6,12 +6,10 @@
[status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.common.utils.networks :as network-utils]
[status-im.contexts.wallet.data-store :as data-store]
[status-im.contexts.wallet.send.transaction-settings.core :as transaction-settings]
[status-im.contexts.wallet.send.utils :as send-utils]
[status-im.contexts.wallet.sheets.network-selection.view :as network-selection]
[taoensso.timbre :as log]
[utils.address]
[utils.i18n :as i18n]
[utils.money :as utils.money]
[utils.number]
[utils.re-frame :as rf]
@@ -92,8 +90,7 @@
:receiver-network-values receiver-network-values
:network-links network-links
:loading-suggested-routes? false
:enough-assets? true)
:fx [#_[:dispatch [:wallet/clear-user-tx-settings]]]}))))
:enough-assets? true)}))))
(rf/reg-event-fx
:wallet/suggested-routes-error
@@ -387,100 +384,16 @@
(rf/reg-event-fx
:wallet/set-token-amount-to-send
(fn [{:keys [db]} [{:keys [amount stack-id start-flow?]}]]
{:db (assoc-in db [:wallet :ui :send :amount] amount)
:fx [[:dispatch
[:wallet/wizard-navigate-forward
{:current-screen stack-id
:start-flow? start-flow?
:flow-id :wallet-send-flow}]]]}))
(rf/reg-event-fx
:wallet.send/auth-slider-completed
(fn [{:keys [db]}]
(let [last-request-uuid (get-in db [:wallet :ui :send :last-request-uuid])]
{:db (update-in db [:wallet :ui :send] dissoc :transaction-for-signing)
{:db (-> db
(assoc-in [:wallet :ui :send :amount] amount)
(update-in [:wallet :ui :send] dissoc :transaction-for-signing))
:fx [[:dispatch [:wallet/build-transactions-from-route {:request-uuid last-request-uuid}]]
[:dispatch
[:wallet.send/set-sign-transactions-callback-fx
[:dispatch
[:wallet/prepare-signatures-for-transactions :send]]]]]})))
(defn log-transaction-signature-error
[error]
(log/error
"failed to prepare signatures for transactions"
{:event :wallet/prepare-signatures-for-transactions
:error error})
(rf/dispatch
[:toasts/upsert
{:id :prepare-signatures-for-transactions-error
:type :negative
:text (:message error)}]))
(defn- send-transactions-with-signatures
[tx-type signatures]
(rf/dispatch
[:wallet/send-router-transactions-with-signatures tx-type
signatures]))
(rf/reg-event-fx
:wallet/send-router-transactions-with-signatures
(fn [{:keys [db]} [tx-type signatures]]
(let [transaction-for-signing (get-in db [:wallet :ui tx-type :transaction-for-signing])
signatures-map (reduce (fn [acc {:keys [message signature]}]
(assoc acc
message
(send-utils/signature-rsv signature)))
{}
signatures)]
{:json-rpc/call [{:method "wallet_sendRouterTransactionsWithSignatures"
:params [{:uuid (get-in transaction-for-signing [:sendDetails :uuid])
:signatures signatures-map}]
:on-success (fn []
(rf/dispatch [:hide-bottom-sheet]))
:on-error (fn [error]
(log/error "failed to send router transactions with signatures"
{:event :wallet/send-router-transactions-with-signatures
:error error})
(rf/dispatch [:toasts/upsert
{:id :send-router-transactions-with-signatures-error
:type :negative
:text (:message error)}]))}]})))
(rf/reg-event-fx
:wallet/prepare-signatures-for-transactions
(fn [{:keys [db]} [tx-type]]
(let [transaction-for-signing (get-in db
[:wallet :ui tx-type :transaction-for-signing])
signing-details (:signingDetails transaction-for-signing)
{:keys [hashes address signOnKeycard]} signing-details
send-tx-fn (partial send-transactions-with-signatures tx-type)]
(if signOnKeycard
{:fx [[:dispatch
[:standard-auth/authorize-with-keycard
{:on-complete (fn [pin]
(rf/dispatch [:keycard/connect-and-sign-hashes
{:keycard-pin pin
:address address
:hashes hashes
:on-success send-tx-fn
:on-failure log-transaction-signature-error}]))}]]]}
{:fx [[:dispatch
[:standard-auth/authorize
{:on-auth-success (fn [sha3-pwd]
(rf/dispatch [:wallet/standard-auth-autorization-success hashes
address sha3-pwd send-tx-fn]))
:auth-button-label (i18n/label :t/confirm)}]]]}))))
(rf/reg-event-fx
:wallet/standard-auth-autorization-success
(fn [_ [hashes address sha3-pwd send-tx-fn]]
{:fx [[:effects.wallet/sign-transaction-hashes
{:hashes hashes
:address address
:password (security/safe-unmask-data sha3-pwd)
:on-success send-tx-fn
:on-error log-transaction-signature-error}]]}))
[:wallet/wizard-navigate-forward
{:current-screen stack-id
:start-flow? start-flow?
:flow-id :wallet-send-flow}]]]})))
(rf/reg-event-fx
:wallet/build-transaction-for-collectible-route
@@ -496,14 +409,16 @@
(rf/reg-event-fx
:wallet/set-token-amount-to-bridge
(fn [{:keys [db]} [{:keys [amount stack-id start-flow?]}]]
{:db (-> db
(assoc-in [:wallet :ui :send :amount] amount)
(update-in [:wallet :ui :send] dissoc :transaction-for-signing))
:fx [[:dispatch
[:wallet/wizard-navigate-forward
{:current-screen stack-id
:start-flow? start-flow?
:flow-id :wallet-bridge-flow}]]]}))
(let [last-request-uuid (get-in db [:wallet :ui :send :last-request-uuid])]
{:db (-> db
(assoc-in [:wallet :ui :send :amount] amount)
(update-in [:wallet :ui :send] dissoc :transaction-for-signing))
:fx [[:dispatch [:wallet/build-transactions-from-route {:request-uuid last-request-uuid}]]
[:dispatch
[:wallet/wizard-navigate-forward
{:current-screen stack-id
:start-flow? start-flow?
:flow-id :wallet-bridge-flow}]]]})))
(rf/reg-event-fx
:wallet/clean-bridge-to-selection
@@ -754,6 +669,66 @@
:type :negative
:text (:message error)}]))}]}))
(rf/reg-event-fx
:wallet/prepare-signatures-for-transactions
(fn [{:keys [db]} [type sha3-pwd]]
(let [{:keys [hashes address signOnKeycard]} (get-in db
[:wallet :ui type :transaction-for-signing
:signingDetails])
on-success (fn [signatures]
(rf/dispatch
[:wallet/send-router-transactions-with-signatures type
signatures]))
on-error (fn [error]
(log/error
"failed to prepare signatures for transactions"
{:event :wallet/prepare-signatures-for-transactions
:error error})
(rf/dispatch
[:toasts/upsert
{:id :prepare-signatures-for-transactions-error
:type :negative
:text (:message error)}]))]
(if signOnKeycard
{:fx [[:dispatch
[:standard-auth/authorize-with-keycard
{:on-complete #(rf/dispatch [:keycard/connect-and-sign-hashes
{:keycard-pin %
:address address
:hashes hashes
:on-success on-success
:on-failure on-error}])}]]]}
{:fx [[:effects.wallet/sign-transaction-hashes
{:hashes hashes
:address address
:password (security/safe-unmask-data sha3-pwd)
:on-success on-success
:on-error on-error}]]}))))
(rf/reg-event-fx
:wallet/send-router-transactions-with-signatures
(fn [{:keys [db]} [type signatures]]
(let [transaction-for-signing (get-in db [:wallet :ui type :transaction-for-signing])
signatures-map (reduce (fn [acc {:keys [message signature]}]
(assoc acc
message
(send-utils/signature-rsv signature)))
{}
signatures)]
{:json-rpc/call [{:method "wallet_sendRouterTransactionsWithSignatures"
:params [{:uuid (get-in transaction-for-signing [:sendDetails :uuid])
:signatures signatures-map}]
:on-success (fn []
(rf/dispatch [:hide-bottom-sheet]))
:on-error (fn [error]
(log/error "failed to send router transactions with signatures"
{:event :wallet/send-router-transactions-with-signatures
:error error})
(rf/dispatch [:toasts/upsert
{:id :send-router-transactions-with-signatures-error
:type :negative
:text (:message error)}]))}]})))
(rf/reg-event-fx
:wallet/select-from-account
(fn [{db :db} [{:keys [address stack-id network-details network start-flow?] :as params}]]
@@ -840,68 +815,37 @@
:fx [[:dispatch [:navigate-back]]]})))
(rf/reg-event-fx
:wallet/clear-user-tx-settings
:wallet/init-tx-settings
(fn [{db :db}]
{:db (update-in db [:wallet :ui :send] dissoc :user-tx-settings)}))
{:db (assoc-in db
[:wallet :ui :send :tx-settings]
{:max-base-fee {:low 5
:current 8.2
:high 9}
:priority-fee {:low 0.6
:high 5.1
:current 1.1}
:max-gas-amount {:low 30000
:current 31000}
:nonce {:last-transaction 21
:current 22}})}))
(rf/reg-event-fx
:wallet/set-max-base-fee
(fn [{db :db} [value]]
{:db (assoc-in db [:wallet :ui :send :user-tx-settings :max-base-fee] value)}))
{:db (assoc-in db [:wallet :ui :send :tx-settings :max-base-fee :current] value)}))
(rf/reg-event-fx
:wallet/set-priority-fee
(fn [{db :db} [value]]
{:db (assoc-in db [:wallet :ui :send :user-tx-settings :priority-fee] value)}))
{:db (assoc-in db [:wallet :ui :send :tx-settings :priority-fee :current] value)}))
(rf/reg-event-fx
:wallet/set-max-gas-amount
(fn [{db :db} [value]]
{:db (assoc-in db [:wallet :ui :send :user-tx-settings :gas-amount] value)}))
{:db (assoc-in db [:wallet :ui :send :tx-settings :max-gas-amount :current] value)}))
(rf/reg-event-fx
:wallet/set-nonce
(fn [{db :db} [value]]
{:db (assoc-in db [:wallet :ui :send :user-tx-settings :nonce] value)}))
(rf/reg-event-fx :wallet/quick-transaction-settings-confirmed
(fn [{db :db} [confirmed-setting]]
(let [gas-rate (transaction-settings/transaction-setting->gas-rate confirmed-setting)
route (first (get-in db [:wallet :ui :send :route]))
path-tx-identity (send-utils/path-identity route)
params [path-tx-identity gas-rate]]
{:db (assoc-in db [:wallet :ui :send :confirmed-quick-tx-setting] confirmed-setting)
:json-rpc/call [{:method "wallet_setFeeMode"
:params params
:on-error (fn [error]
(log/error "failed to set quick transaction settings"
{:event :wallet/quick-transaction-settings-confirmed
:error (:message error)
:params params}))}]})))
(rf/reg-event-fx :wallet/custom-transaction-settings-confirmed
(fn [{db :db}]
(let [route (first (get-in db [:wallet :ui :send :route]))
user-tx-settings (get-in db [:wallet :ui :send :user-tx-settings])
path-tx-identity (send-utils/path-identity route)
custom-tx-params (send-utils/path-tx-custom-params user-tx-settings route)
params [path-tx-identity custom-tx-params]]
(tap> {:in :wallet/custom-transaction-settings-confirmed
:custom-tx-params custom-tx-params})
{:json-rpc/call [{:method "wallet_setCustomTxDetails"
:params params
:on-error (fn [error]
(log/error "failed to set custom tx settings"
{:event :wallet/custom-transaction-settings-confirmed
:error (:message error)
:params params}))}]}))
)
(rf/reg-event-fx :wallet.send/set-sign-transactions-callback-fx
(fn [{:keys [db]} [callback-fx]]
{:db (assoc-in db
[:wallet :ui :send :sign-transactions-callback-fx]
callback-fx)}))
{:db (assoc-in db [:wallet :ui :send :tx-settings :nonce :current] value)}))
@@ -65,8 +65,9 @@
:to {:chain-id 1
:native-currency-symbol "ETH"}
:gas-amount "23487"
:gas-fees {:base-fee "32.325296406"
:eip1559-enabled true}}]
:gas-fees {:base-fee "32.325296406"
:max-priority-fee-per-gas "0.011000001"
:eip1559-enabled true}}]
:wallet/wallet-send-suggested-routes nil
:wallet/wallet-send-receiver-networks [1]
:view-id :screen/wallet.send-input-amount
@@ -72,6 +72,11 @@
:else (rf/dispatch [:wallet/stop-and-clean-suggested-routes])))
(defn- get-fee-formatted
[route]
(when-let [native-currency-symbol (-> route first :from :native-currency-symbol)]
(rf/sub [:wallet/wallet-send-fee-fiat-formatted native-currency-symbol])))
(defn- insufficient-asset-amount?
[{:keys [token-symbol owned-eth-token input-state limit-exceeded? enough-assets?]}]
(let [eth-selected? (= token-symbol (string/upper-case constants/mainnet-short-name))
@@ -167,7 +172,7 @@
(empty? route)
(not valid-input?))
fee-formatted (when (or (not confirm-disabled?) not-enough-asset?)
(rf/sub [:wallet/wallet-send-fee-fiat-formatted]))
(get-fee-formatted route))
handle-on-confirm (fn [amount]
(rf/dispatch [:wallet/set-token-amount-to-send
{:amount amount
@@ -5,10 +5,9 @@
[quo.theme :as quo.theme]
[react-native.core :as rn]
[react-native.safe-area :as safe-area]
[status-im.common.biometric.utils :as biometric]
[status-im.common.events-helper :as events-helper]
[status-im.common.floating-button-page.view :as floating-button-page]
[status-im.constants :as constants]
[status-im.common.standard-authentication.core :as standard-auth]
[status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.send.transaction-confirmation.style :as style]
[status-im.contexts.wallet.send.transaction-settings.view :as transaction-settings]
@@ -169,9 +168,10 @@
:subtitle subtitle}])
(defn- transaction-details
[{:keys [estimated-time-min max-fees to-network
transaction-type route-loaded?]}]
(let [loading-suggested-routes? (rf/sub [:wallet/wallet-send-loading-suggested-routes?])
[{:keys [estimated-time-min max-fees to-network route
transaction-type]}]
(let [route-loaded? (and route (seq route))
loading-suggested-routes? (rf/sub [:wallet/wallet-send-loading-suggested-routes?])
amount (rf/sub [:wallet/send-total-amount-formatted])]
[rn/view
{:style (style/details-container
@@ -225,7 +225,11 @@
estimated-time-min (reduce + (map :estimated-time route))
token-symbol (or token-display-name
(-> send-transaction-data :token :symbol))
fee-formatted (rf/sub [:wallet/wallet-send-fee-fiat-formatted])
first-route (first route)
native-currency-symbol (get-in first-route
[:from :native-currency-symbol])
fee-formatted (rf/sub [:wallet/wallet-send-fee-fiat-formatted
native-currency-symbol])
account (rf/sub [:wallet/current-viewing-account])
account-color (:color account)
bridge-to-network (when bridge-to-chain-id
@@ -233,6 +237,7 @@
bridge-to-chain-id]))
loading-suggested-routes? (rf/sub
[:wallet/wallet-send-loading-suggested-routes?])
transaction-for-signing (rf/sub [:wallet/wallet-send-transaction-for-signing])
from-account-props {:customization-color account-color
:size 32
:emoji (:emoji account)
@@ -244,9 +249,24 @@
user-props {:full-name to-address
:address (utils/get-shortened-address
to-address)}
biometric-auth? (= (rf/sub [:auth-method]) constants/auth-method-biometric)
biometric-type (rf/sub [:biometrics/supported-type])]
sign-on-keycard? (get-in transaction-for-signing
[:signingDetails :signOnKeycard])]
(hot-reload/use-safe-unmount #(rf/dispatch [:wallet/clean-route-data-for-collectible-tx]))
;; In token send flow we already have transaction built when
;; we reach confirmation screen. But in send collectible flow
;; routes request happens at the same time with navigation to
;; confirmation screen. So we need to build the transaction as soon
;; as route is available.
(rn/use-effect
(fn []
(when (and (send-utils/tx-type-collectible? transaction-type)
first-route)
(rf/dispatch [:wallet/build-transaction-for-collectible-route])))
[first-route])
(rn/use-mount
(fn []
(when (ff/enabled? ::ff/wallet.transaction-params)
(rf/dispatch [:wallet/init-tx-settings]))))
[rn/view {:style {:flex 1}}
[floating-button-page/view
{:footer-container-padding 0
@@ -263,21 +283,27 @@
:to-network bridge-to-network
:theme theme
:route route
:transaction-type transaction-type
:route-loaded? (and route (seq route))}]
:transaction-type transaction-type}]
(when (and (not loading-suggested-routes?) route (seq route))
[quo/slide-button
{:size :size-48
:track-text (if (= transaction-type :tx/bridge)
(i18n/label :t/slide-to-bridge)
(i18n/label :t/slide-to-send))
:container-style {:z-index 2}
[standard-auth/slide-button
{:size :size-48
:track-text (if (= transaction-type :tx/bridge)
(i18n/label :t/slide-to-bridge)
(i18n/label :t/slide-to-send))
:container-style {:z-index 2}
:disabled? (not transaction-for-signing)
:customization-color account-color
:track-icon (if biometric-auth?
(biometric/get-icon-by-type biometric-type)
:password)
:on-complete #(rf/dispatch
[:wallet.send/auth-slider-completed])}])]
:auth-button-label (i18n/label :t/confirm)
:on-complete (when sign-on-keycard?
#(rf/dispatch
[:wallet/prepare-signatures-for-transactions
:send
""]))
:on-auth-success
(fn [psw]
(rf/dispatch
[:wallet/prepare-signatures-for-transactions :send
psw]))}])]
:gradient-cover? true
:customization-color (:color account)}
[rn/view
@@ -1,14 +0,0 @@
(ns status-im.contexts.wallet.send.transaction-settings.core
(:require
[status-im.constants :as constants]))
(def default-transaction-setting :transaction-setting/fast)
(defn transaction-setting->gas-rate
[transaction-setting]
(case transaction-setting
:transaction-setting/normal constants/gas-rate-low
:transaction-setting/fast constants/gas-rate-medium
:transaction-setting/urgent constants/gas-rate-high
:transaction-setting/custom constants/gas-rate-custom
constants/gas-rate-medium))
@@ -6,36 +6,25 @@
[utils.re-frame :as rf]))
(defn gas-amount-hint-text
[current {:keys [low high]} _entered-value lower-limit-exceeded? upper-limit-exceeded?]
[{:keys [current]} lower-limit-exceeded? _upper-limit-exceeded?]
(cond
lower-limit-exceeded? (i18n/label :t/gas-amount-lower {:low low})
upper-limit-exceeded? (i18n/label :t/gas-amount-higher {:high high})
lower-limit-exceeded? (i18n/label :t/gas-amount-lower {:current current})
:else (i18n/label :t/current-units {:current current})))
(defn gas-amount-hint-status
[_entered-value lower-limit-exceeded? upper-limit-exceeded?]
(if (or lower-limit-exceeded? upper-limit-exceeded?)
:error
:default))
(defn view
[]
(let [spectrum {:low 21000
:high 7920027}
current (rf/sub [:wallet/tx-settings-gas-amount])
hint-text (partial gas-amount-hint-text current spectrum)]
(let [suggested-values (rf/sub [:wallet/tx-settings-max-gas-amount])
hint-text (partial gas-amount-hint-text suggested-values)]
[transaction-settings/custom-setting-screen
{:screen-title (i18n/label :t/max-gas-amount)
:token-symbol :units
:hint-text-fn hint-text
:status-fn gas-amount-hint-status
:current current
:spectrum spectrum
:info-title (i18n/label :t/gas-amount)
:info-content (i18n/label :t/about-gas-amount)
:on-save (fn [new-val]
(rf/dispatch [:wallet/set-max-gas-amount new-val])
(rf/dispatch [:navigate-back])
(rf/dispatch [:show-bottom-sheet
{:content transaction-settings/custom-settings-sheet}]))
:with-decimals? false}]))
{:screen-title (i18n/label :t/max-gas-amount)
:token-symbol :units
:hint-text-fn hint-text
:suggested-values suggested-values
:info-title (i18n/label :t/gas-amount)
:info-content (i18n/label :t/about-gas-amount)
:on-save (fn [new-val]
(rf/dispatch [:wallet/set-max-gas-amount new-val])
(rf/dispatch [:navigate-back])
(rf/dispatch [:show-bottom-sheet
{:content transaction-settings/custom-settings-sheet}]))
:with-decimals? false}]))
@@ -6,36 +6,25 @@
[utils.re-frame :as rf]))
(defn max-base-fee-hint-text
[max-base-fee priority-fee _entered-value lower-limit-exceeded? upper-limit-exceeded?]
[current lower-limit-exceeded? upper-limit-exceeded?]
(cond
upper-limit-exceeded? (i18n/label :t/max-base-fee-higher {:current max-base-fee})
lower-limit-exceeded? (i18n/label :t/max-base-fee-lower {:priority-fee priority-fee})
:else (i18n/label :t/max-base-fee-current {:current max-base-fee})))
(defn input-status
[_entered-value lower-limit-exceeded? upper-limit-exceeded?]
(cond
upper-limit-exceeded? :warning
lower-limit-exceeded? :error
:else :default))
upper-limit-exceeded? (i18n/label :t/max-base-fee-higher {:current current})
lower-limit-exceeded? (i18n/label :t/max-base-fee-lower {:current current})
:else (i18n/label :t/fee-current-gwei {:current current})))
(defn view
[]
(let [max-base-fee (rf/sub [:wallet/tx-settings-max-base-fee])
priority-fee (rf/sub [:wallet/tx-settings-priority-fee])
hint-text (partial max-base-fee-hint-text max-base-fee priority-fee)]
(let [suggested-values (rf/sub [:wallet/tx-settings-max-base-fee])
hint-text (partial max-base-fee-hint-text (:current suggested-values))]
[transaction-settings/custom-setting-screen
{:screen-title (i18n/label :t/max-base-fee)
:token-sybmol :gwei
:hint-text-fn hint-text
:status-fn input-status
:current max-base-fee
:spectrum {:high max-base-fee
:low priority-fee}
:info-title (i18n/label :t/max-base-fee)
:info-content (i18n/label :t/about-max-base-fee)
:on-save (fn [new-val]
(rf/dispatch [:wallet/set-max-base-fee new-val])
(rf/dispatch [:navigate-back])
(rf/dispatch [:show-bottom-sheet
{:content transaction-settings/custom-settings-sheet}]))}]))
{:screen-title (i18n/label :t/max-base-fee)
:token-sybmol :gwei
:hint-text-fn hint-text
:suggested-values suggested-values
:info-title (i18n/label :t/max-base-fee)
:info-content (i18n/label :t/about-max-base-fee)
:on-save (fn [new-val]
(rf/dispatch [:wallet/set-max-base-fee new-val])
(rf/dispatch [:navigate-back])
(rf/dispatch [:show-bottom-sheet
{:content transaction-settings/custom-settings-sheet}]))}]))
@@ -11,15 +11,14 @@
(defn view
[]
(let [current (rf/sub [:wallet/tx-settings-nonce])
suggested-nonce (rf/sub [:wallet/tx-settings-suggested-nonce])
last-tx-nonce (dec suggested-nonce)
[input-state set-input-state] (rn/use-state (controlled-input/set-value-numeric
controlled-input/init-state
current))
input-value (controlled-input/input-value input-state)
warning? (> (controlled-input/value-numeric input-state)
current)]
(let [{:keys [last-transaction current]} (rf/sub [:wallet/tx-settings-nonce])
suggested-nonce (inc last-transaction)
[input-state set-input-state] (rn/use-state (controlled-input/set-value-numeric
controlled-input/init-state
current))
input-value (controlled-input/input-value input-state)
warning? (> (controlled-input/value-numeric input-state)
suggested-nonce)]
[rn/view
{:style {:flex 1}}
[quo/page-nav
@@ -42,10 +41,7 @@
[quo/input
{:type :text
:label (i18n/label :t/type-nonce)
:label-right (i18n/label :t/last-transaction-is
{:number (if (< last-tx-nonce 0)
"-"
last-tx-nonce)})
:label-right (i18n/label :t/last-transaction-is {:number last-transaction})
:editable false
:default-value input-value
:clearable? true
@@ -6,62 +6,25 @@
[utils.re-frame :as rf]))
(defn priority-fee-hint-text
[priority-fee spectrum max-base-fee entered-value lower-limit-exceeded? upper-limit-exceeded?]
[{:keys [current low high]} lower-limit-exceeded? upper-limit-exceeded?]
(cond
(and upper-limit-exceeded? (> entered-value max-base-fee))
(i18n/label :t/priority-fee-higher-max-base {:max-base-fee max-base-fee})
upper-limit-exceeded?
(i18n/label :t/priority-fee-higher spectrum)
lower-limit-exceeded?
(i18n/label :t/priority-fee-lower spectrum)
:else
(i18n/label :t/priority-fee-current {:current priority-fee})))
(defn priority-fee-hint-status
[max-base-fee entered-value lower-limit-exceeded? upper-limit-exceeded?]
(cond
(and upper-limit-exceeded? (> entered-value max-base-fee))
:error
upper-limit-exceeded?
:warning
lower-limit-exceeded?
:warning
:else
:default))
(comment
(rf/sub [:wallet/tx-settings-gas-fees])
(rf/sub [:wallet/tx-settings-priority-fee])
(rf/sub [:wallet/send-route])
(:gas-fees (first (rf/sub [:wallet/send-route])))
(rf/dispatch [:navigate-back])
)
upper-limit-exceeded? (i18n/label :t/priority-fee-higher {:low low :high high})
lower-limit-exceeded? (i18n/label :t/priority-fee-lower {:low low :high high})
:else (i18n/label :t/fee-current-gwei {:current current})))
(defn view
[]
(let [priority-fee (rf/sub [:wallet/tx-settings-priority-fee])
max-base-fee (rf/sub [:wallet/tx-settings-max-base-fee])
spectrum {:low (rf/sub [:wallet/tx-settings-suggested-min-priority-fee])
:high (rf/sub [:wallet/tx-settings-suggested-max-priority-fee])}
hint-text (partial priority-fee-hint-text priority-fee spectrum max-base-fee)
hint-status (partial priority-fee-hint-status max-base-fee)]
(let [suggested-values (rf/sub [:wallet/tx-settings-priority-fee])
hint-text (partial priority-fee-hint-text suggested-values)]
[transaction-settings/custom-setting-screen
{:screen-title (i18n/label :t/priority-fee)
:token-sybmol :gwei
:hint-text-fn hint-text
:status-fn hint-status
:current priority-fee
:spectrum spectrum
:info-title (i18n/label :t/priority-fee)
:info-content (i18n/label :t/about-priority-fee)
:on-save (fn [new-val]
(rf/dispatch [:wallet/set-priority-fee new-val])
(rf/dispatch [:navigate-back])
(rf/dispatch [:show-bottom-sheet
{:content transaction-settings/custom-settings-sheet}]))}]))
{:screen-title (i18n/label :t/priority-fee)
:token-sybmol :gwei
:hint-text-fn hint-text
:suggested-values suggested-values
:info-title (i18n/label :t/priority-fee)
:info-content (i18n/label :t/about-priority-fee)
:on-save (fn [new-val]
(rf/dispatch [:wallet/set-priority-fee new-val])
(rf/dispatch [:navigate-back])
(rf/dispatch [:show-bottom-sheet
{:content transaction-settings/custom-settings-sheet}]))}]))
@@ -11,10 +11,10 @@
(defn custom-settings-sheet
[_]
(let [max-base-fee (rf/sub [:wallet/tx-settings-max-base-fee])
priority-fee (rf/sub [:wallet/tx-settings-priority-fee])
max-gas-amount (rf/sub [:wallet/tx-settings-gas-amount])
nonce (rf/sub [:wallet/tx-settings-nonce])]
(let [max-base-fee (:current (rf/sub [:wallet/tx-settings-max-base-fee]))
priority-fee (:current (rf/sub [:wallet/tx-settings-priority-fee]))
max-gas-amount (:current (rf/sub [:wallet/tx-settings-max-gas-amount]))
nonce (:current (rf/sub [:wallet/tx-settings-nonce]))]
[rn/view
[quo/drawer-top
{:title (i18n/label :t/custom)}]
@@ -62,80 +62,71 @@
:preview-size :size-32}]}]
[quo/bottom-actions
{:actions :one-action
:button-one-props {:on-press (fn []
(rf/dispatch [:wallet/custom-transaction-settings-confirmed])
(rf/dispatch [:hide-bottom-sheet]))}
:button-one-props {:on-press #(rf/dispatch [:hide-bottom-sheet])}
:button-one-label (i18n/label :t/confirm)}]]))
(defn settings-sheet
[]
(let [current-transaction-setting (rf/sub [:wallet/confirmed-quick-tx-setting])
[transaction-setting set-transaction-setting] (rn/use-state current-transaction-setting)]
[_]
(let [[selected-id set-selected-id] (rn/use-state :normal)]
[rn/view
[quo/drawer-top
{:title (i18n/label :t/transaction-settings)}]
[quo/category
{:list-type :settings
:data [{:title (str (i18n/label :t/normal) "~60s")
:image-props "🍿"
:description-props {:text (rf/sub [:wallet/wallet-send-transaction-setting-fiat-formatted
:transaction-setting/normal])}
:image :emoji
:description :text
:action :selector
:action-props {:type :radio
:checked? (= :transaction-setting/normal transaction-setting)}
:on-press #(set-transaction-setting :transaction-setting/normal)
:label :text
:preview-size :size-32}
{:title (str (i18n/label :t/fast) "~40s")
:image-props "🚗"
:description-props {:text (rf/sub [:wallet/wallet-send-transaction-setting-fiat-formatted
:transaction-setting/fast])}
:image :emoji
:description :text
:action :selector
:action-props {:type :radio
:checked? (= :transaction-setting/fast transaction-setting)}
:on-press #(set-transaction-setting :transaction-setting/fast)
:label :text
:preview-size :size-32}
{:title (str (i18n/label :t/urgent) "~15s")
:image-props "🚀"
:description-props {:text (rf/sub [:wallet/wallet-send-transaction-setting-fiat-formatted
:transaction-setting/urgent])}
:image :emoji
:description :text
:action :selector
:action-props {:type :radio
:checked? (= :transaction-setting/urgent transaction-setting)}
:on-press #(set-transaction-setting :transaction-setting/urgent)
:label :text
:preview-size :size-32}
{:title (i18n/label :t/custom)
:image-props :i/edit
:description-props {:text "Set your own fees and nonce"}
:image :icon
:description :text
:action :arrow
:on-press #(rf/dispatch
[:show-bottom-sheet
{:content custom-settings-sheet}])
:label :text
:preview-size :size-32}]}]
:data [{:title (str (i18n/label :t/normal) "~60s")
:image-props "🍿"
:description-props {:text "€1.45"}
:image :emoji
:description :text
:action :selector
:action-props {:type :radio
:checked? (= :normal selected-id)}
:on-press #(set-selected-id :normal)
:label :text
:preview-size :size-32}
{:title (str (i18n/label :t/fast) "~40s")
:image-props "🚗"
:description-props {:text "€1.65"}
:image :emoji
:description :text
:action :selector
:action-props {:type :radio
:checked? (= :fast selected-id)}
:on-press #(set-selected-id :fast)
:label :text
:preview-size :size-32}
{:title (str (i18n/label :t/urgent) "~15s")
:image-props "🚀"
:description-props {:text "€1.85"}
:image :emoji
:description :text
:action :selector
:action-props {:type :radio
:checked? (= :urgent selected-id)}
:on-press #(set-selected-id :urgent)
:label :text
:preview-size :size-32}
{:title (i18n/label :t/custom)
:image-props :i/edit
:description-props {:text "Set your own fees and nonce"}
:image :icon
:description :text
:action :arrow
:on-press #(rf/dispatch
[:show-bottom-sheet
{:content custom-settings-sheet}])
:label :text
:preview-size :size-32}]}]
[quo/bottom-actions
{:actions :one-action
:button-one-props {:on-press (fn []
(rf/dispatch [:wallet/quick-transaction-settings-confirmed
transaction-setting])
(rf/dispatch [:hide-bottom-sheet]))}
:button-one-props {:on-press #(rf/dispatch [:hide-bottom-sheet])}
:button-one-label (i18n/label :t/confirm)}]]))
(defn- hint
[{:keys [status text]}]
[{:keys [error? text]}]
[quo/network-tags
{:title text
:status status}])
:status (when error? :error)}])
(defn info-sheet
[info-title info-content]
@@ -156,33 +147,23 @@
(i18n/label :t/read-more)]]])
(defn custom-setting-screen
[{:keys [screen-title token-symbol hint-text-fn status-fn current spectrum info-title info-content
on-save
[{:keys [screen-title token-symbol hint-text-fn suggested-values info-title info-content on-save
with-decimals?]
:or {with-decimals? true}}]
(let [[input-state set-input-state] (rn/use-state (controlled-input/set-value-numeric
controlled-input/init-state
current))
(:current suggested-values)))
input-value (controlled-input/input-value input-state)
status (when status-fn
(status-fn
input-value
(controlled-input/lower-limit-exceeded? input-state)
(controlled-input/upper-limit-exceeded? input-state)))
hint-text (when hint-text-fn
(hint-text-fn
input-value
(controlled-input/lower-limit-exceeded? input-state)
(controlled-input/upper-limit-exceeded? input-state)))]
(tap> {:in :custom-setting-screen
:spectrum spectrum})
(rn/use-effect
out-of-limits? (controlled-input/input-error input-state)
valid-input? (not (or (controlled-input/empty-value? input-state)
out-of-limits?))]
(rn/use-mount
(fn []
(set-input-state (fn [state]
(-> state
(controlled-input/set-upper-limit (:high spectrum))
(controlled-input/set-lower-limit (:low spectrum))))))
[spectrum])
(controlled-input/set-upper-limit (:high suggested-values))
(controlled-input/set-lower-limit (:low suggested-values)))))))
[rn/view
{:style {:flex 1}}
[quo/page-nav
@@ -203,16 +184,18 @@
:swappable? false
:show-token-icon? false
:value input-value
:error? (= status :error)
:error? out-of-limits?
:currency-symbol token-symbol
:hint-component [hint
{:status status
:text hint-text}]}]
{:error? out-of-limits?
:text (hint-text-fn
(controlled-input/lower-limit-exceeded? input-state)
(controlled-input/upper-limit-exceeded? input-state))}]}]
[rn/view {:style {:flex 1}}]
[quo/bottom-actions
{:actions :one-action
:button-one-label (i18n/label :t/save-changes)
:button-one-props {:disabled? (= status :error)
:button-one-props {:disabled? (not valid-input?)
:on-press #(on-save (controlled-input/value-numeric input-state))}}]
[quo/numbered-keyboard
{:container-style {:padding-bottom (safe-area/get-bottom)}
+11 -53
View File
@@ -1,6 +1,5 @@
(ns status-im.contexts.wallet.send.utils
(:require
[native-module.core :as native-module]
[status-im.constants :as constants]
[status-im.contexts.wallet.common.utils.networks :as network-utils]
[utils.money :as money]))
@@ -26,42 +25,21 @@
transaction-hashes))
(defn calculate-gas-fee
[{:keys [gas-amount gas-price l1-gas-fee]}]
(let [total-gas-fee-wei (money/mul (money/->wei :gwei gas-price) gas-amount)
l1-fee-wei (money/->wei :gwei l1-gas-fee)]
[data]
(let [gas-amount (money/bignumber (get data :gas-amount))
gas-fees (get data :gas-fees)
eip1559-enabled? (get gas-fees :eip-1559-enabled)
optimal-price-gwei (money/bignumber (if eip1559-enabled?
(get gas-fees :max-fee-per-gas-medium)
(get gas-fees :gas-price)))
total-gas-fee-wei (money/mul (money/->wei :gwei optimal-price-gwei) gas-amount)
l1-fee-wei (money/->wei :gwei (get gas-fees :l-1-gas-fee))]
(money/add total-gas-fee-wei l1-fee-wei)))
(defn path-gas-fee
[path]
(let [gas-amount (money/bignumber (get path :gas-amount))
gas-fees (get path :gas-fees)
eip1559-enabled? (get gas-fees :eip-1559-enabled)
gas-price (money/bignumber (if eip1559-enabled?
(get gas-fees :tx-max-fees-per-gas)
(get gas-fees :gas-price)))
l1-gas-fee (get gas-fees :l-1-gas-fee)]
(calculate-gas-fee {:gas-amount gas-amount
:gas-price gas-price
:l1-gas-fee l1-gas-fee})))
(defn path-gas-fee-for-custom-gas-price
[route gas-price]
(let [gas-amount (money/bignumber (get route :gas-amount))
gas-fees (get route :gas-fees)
l1-gas-fee (get gas-fees :l-1-gas-fee)]
(calculate-gas-fee {:gas-amount gas-amount
:gas-price (money/bignumber gas-price)
:l1-gas-fee l1-gas-fee})))
(defn full-route-gas-fee
(defn calculate-full-route-gas-fee
"Sums all the routes fees in wei and then convert the total value to ether"
[route]
(money/wei->ether (reduce money/add (map path-gas-fee route))))
(defn full-route-gas-fee-for-custom-gas-price
"Sums all the routes fees in wei and then convert the total value to ether"
[route gas-price]
(money/wei->ether (reduce money/add (map #(path-gas-fee-for-custom-gas-price % gas-price) route))))
(money/wei->ether (reduce money/add (map calculate-gas-fee route))))
(defn- path-amount-in
[path]
@@ -246,23 +224,3 @@
{:r (subs signature 0 64)
:s (subs signature 64 128)
:v (subs signature 128 130)})
(defn path-identity
[path]
{:routerInputParamsUuid (:router-input-params-uuid path)
:pathName (:bridge-name path)
:chainID (get-in path [:to :chain-id])
:isApprovalTx (:approval-required path)})
(defn path-tx-custom-params
[user-tx-settings route]
(let [nonce (or (:nonce user-tx-settings) (:nonce route))
gas-amount (or (:gas-amount user-tx-settings) (:gas-amount route))
priority-fee (or (:priority-fee user-tx-settings) (get-in route [:gas-fees :tx-priority-fee]))
max-base-fee (or (:max-base-fee user-tx-settings) (get-in route [:gas-fees :current-base-fee]))]
{:gasFeeMode constants/gas-rate-custom
:nonce nonce
:gasAmount gas-amount
:maxFeesPerGas (money/to-hex (money/->wei :gwei (money/add max-base-fee priority-fee)))
:priorityFee (money/to-hex (money/->wei :gwei priority-fee))}))
@@ -178,21 +178,21 @@
(deftest calculate-gas-fee-test
(testing "EIP-1559 transaction without L1 fee"
(let [data {:gas-amount "23487"
:gas-fees {:tx-max-fees-per-gas "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}
:gas-fees {:max-fee-per-gas-medium "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}
expected-result (money/bignumber "53063589834657")] ; This is in Wei
(is (money/equal-to (utils/path-gas-fee data)
(is (money/equal-to (utils/calculate-gas-fee data)
expected-result))))
(testing "EIP-1559 transaction with L1 fee of 60,000 Gwei"
(let [data {:gas-amount "23487"
:gas-fees {:tx-max-fees-per-gas "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "60000"}}
:gas-fees {:max-fee-per-gas-medium "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "60000"}}
expected-result (money/bignumber "113063589834657")] ; Added 60,000 Gwei in Wei to the
; previous result
(is (money/equal-to (utils/path-gas-fee data)
(is (money/equal-to (utils/calculate-gas-fee data)
expected-result))))
(testing "Non-EIP-1559 transaction with specified gas price"
@@ -202,48 +202,48 @@
:l-1-gas-fee "0"}}
expected-result (money/bignumber "67471600217343")] ; This is in Wei, for the specified
; gas amount and price
(is (money/equal-to (utils/path-gas-fee data)
(is (money/equal-to (utils/calculate-gas-fee data)
expected-result)))))
(deftest calculate-full-route-gas-fee-test
(testing "Route with a single EIP-1559 transaction, no L1 fees"
(let [route [{:gas-amount "23487"
:gas-fees {:tx-max-fees-per-gas "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}]
:gas-fees {:max-fee-per-gas-medium "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}]
expected-result (money/bignumber "0.000053063589834657")] ; The Wei amount for the
; transaction, converted to
; Ether
(is (money/equal-to (utils/full-route-gas-fee route)
(is (money/equal-to (utils/calculate-full-route-gas-fee route)
expected-result))))
(testing "Route with two EIP-1559 transactions, no L1 fees"
(let [route [{:gas-amount "23487"
:gas-fees {:tx-max-fees-per-gas "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}
:gas-fees {:max-fee-per-gas-medium "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}
{:gas-amount "23487"
:gas-fees {:tx-max-fees-per-gas "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}]
:gas-fees {:max-fee-per-gas-medium "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}]
expected-result (money/bignumber "0.000106127179669314")] ; Sum of both transactions' Wei
; amounts, converted to Ether
(is (money/equal-to (utils/full-route-gas-fee route)
(is (money/equal-to (utils/calculate-full-route-gas-fee route)
expected-result))))
(testing "Route with two EIP-1559 transactions, one with L1 fee of 60,000 Gwei"
(let [route [{:gas-amount "23487"
:gas-fees {:tx-max-fees-per-gas "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}
:gas-fees {:max-fee-per-gas-medium "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "0"}}
{:gas-amount "23487"
:gas-fees {:tx-max-fees-per-gas "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "60000"}}]
:gas-fees {:max-fee-per-gas-medium "2.259274911"
:eip-1559-enabled true
:l-1-gas-fee "60000"}}]
expected-result (money/bignumber "0.000166127179669314")] ; Added 60,000 Gwei in Wei to
; the previous total and
; converted to Ether
(is (money/equal-to (utils/full-route-gas-fee route)
(is (money/equal-to (utils/calculate-full-route-gas-fee route)
expected-result)))))
(deftest token-available-networks-for-suggested-routes-test
@@ -4,10 +4,9 @@
[quo.foundations.resources :as resources]
[quo.theme :as quo.theme]
[react-native.core :as rn]
[status-im.common.biometric.utils :as biometric]
[status-im.common.events-helper :as events-helper]
[status-im.common.floating-button-page.view :as floating-button-page]
[status-im.constants :as constants]
[status-im.common.standard-authentication.core :as standard-auth]
[status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.common.utils.external-links :as external-links]
[status-im.contexts.wallet.swap.set-spending-cap.style :as style]
@@ -217,21 +216,25 @@
(defn- slide-button
[]
(let [loading-swap-proposal? (rf/sub [:wallet/swap-loading-swap-proposal?])
swap-proposal (rf/sub [:wallet/swap-proposal-without-fees])
account (rf/sub [:wallet/current-viewing-account])
biometric-auth? (= (rf/sub [:auth-method]) constants/auth-method-biometric)
biometric-type (rf/sub [:biometrics/supported-type])]
[quo/slide-button
(let [loading-swap-proposal? (rf/sub [:wallet/swap-loading-swap-proposal?])
swap-proposal (rf/sub [:wallet/swap-proposal-without-fees])
account (rf/sub [:wallet/current-viewing-account])
transaction-for-signing (rf/sub [:wallet/swap-transaction-for-signing])
sign-on-keycard? (get-in transaction-for-signing
[:signingDetails :signOnKeycard])
on-auth-success (rn/use-callback
#(rf/dispatch [:wallet/prepare-signatures-for-transactions :swap %]))
on-complete (rn/use-callback
#(rf/dispatch [:wallet/prepare-signatures-for-transactions :swap ""]))]
[standard-auth/slide-button
{:size :size-48
:track-text (i18n/label :t/slide-to-sign)
:container-style {:z-index 2}
:customization-color (:color account)
:track-icon (if biometric-auth?
(biometric/get-icon-by-type biometric-type)
:password)
:disabled? (or loading-swap-proposal? (not swap-proposal))
:on-complete #(rf/dispatch [:wallet/prepare-signatures-for-transactions :swap])}]))
:on-complete (when sign-on-keycard? on-complete)
:on-auth-success on-auth-success
:auth-button-label (i18n/label :t/confirm)}]))
(defn- footer
[]
@@ -1,4 +1,5 @@
(ns status-im.contexts.wallet.swap.setup-swap.style)
(ns status-im.contexts.wallet.swap.setup-swap.style
(:require [quo.foundations.colors :as colors]))
(def container
{:flex 1})
@@ -40,3 +41,22 @@
{:height :auto
:min-height 40
:max-height 62})
(defn exchange-rate-loader
[theme]
{:margin-top 16
:width 72
:height 14
:border-radius 6
:background-color (colors/theme-colors colors/neutral-5 colors/neutral-90 theme)})
(def exchange-rate-container
{:margin-top 16
:flex-direction :row})
(def exchange-rate-crypto-label
{:color colors/neutral-50})
(defn exchange-rate-fiat-label
[theme]
{:color (colors/theme-colors colors/neutral-40 colors/neutral-60 theme)})
@@ -343,6 +343,33 @@
(= (:symbol token)
(:symbol asset-to-pay)))}]))
(defn- swap-exchange-rate-view
[]
(let [theme (quo.theme/use-theme)
asset-to-pay (rf/sub [:wallet/swap-asset-to-pay])
asset-to-receive (rf/sub [:wallet/swap-asset-to-receive])
swap-exchange-rate-crypto (rf/sub [:wallet/swap-exchange-rate-crypto])
swap-exchange-rate-fiat (rf/sub [:wallet/swap-exchange-rate-fiat])
loading-swap-proposal? (rf/sub [:wallet/swap-loading-swap-proposal?])]
(cond
loading-swap-proposal?
[rn/view {:style (style/exchange-rate-loader theme)}]
swap-exchange-rate-crypto
[rn/view {:style style/exchange-rate-container}
[quo/text
{:weight :medium
:size :paragraph-2
:style style/exchange-rate-crypto-label}
(i18n/label :t/swap-exchange-rate-in-crypto
{:receive-token-symbol (:symbol asset-to-receive)
:exchange-rate swap-exchange-rate-crypto
:pay-token-symbol (:symbol asset-to-pay)})]
[quo/text
{:weight :medium
:size :paragraph-2
:style (style/exchange-rate-fiat-label theme)}
(str " (" swap-exchange-rate-fiat ")")]])))
(defn view
[]
(let [[pay-input-state set-pay-input-state] (rn/use-state controlled-input/init-state)
@@ -495,7 +522,7 @@
:params {:show-account-balances? true
:asset-symbol (:symbol asset-to-pay)
:network network}}]
[rn/view {:style style/inputs-container}
[rn/scroll-view {:style style/inputs-container}
[pay-token-input
{:input-state pay-input-state
:on-max-press on-max-press
@@ -514,7 +541,8 @@
[receive-token-input
{:input-focused? (not pay-input-focused?)
:on-token-press #(rf/dispatch [:show-bottom-sheet {:content receive-token-bottom-sheet}])
:on-input-focus #(set-pay-input-focused? false)}]]
:on-input-focus #(set-pay-input-focused? false)}]
[swap-exchange-rate-view]]
[rn/view {:style style/footer-container}
(when-not loading-swap-proposal? [alert-banner {:pay-input-error? pay-input-error?}])
(when (or loading-swap-proposal? swap-proposal)
@@ -4,8 +4,8 @@
[quo.theme :as quo.theme]
[react-native.core :as rn]
[react-native.safe-area :as safe-area]
[status-im.common.biometric.utils :as biometric]
[status-im.common.floating-button-page.view :as floating-button-page]
[status-im.common.standard-authentication.core :as standard-auth]
[status-im.constants :as constants]
[status-im.contexts.wallet.common.utils :as utils]
[status-im.contexts.wallet.send.utils :as send-utils]
@@ -167,21 +167,26 @@
transaction-for-signing (rf/sub [:wallet/swap-transaction-for-signing])
swap-proposal (rf/sub [:wallet/swap-proposal-without-fees])
account (rf/sub [:wallet/current-viewing-account])
biometric-auth? (= (rf/sub [:auth-method]) constants/auth-method-biometric)
biometric-type (rf/sub [:biometrics/supported-type])
account-color (:color account)]
[quo/slide-button
account-color (:color account)
sign-on-keycard? (get-in transaction-for-signing
[:signingDetails :signOnKeycard])]
[standard-auth/slide-button
{:size :size-48
:track-text (i18n/label :t/slide-to-swap)
:container-style {:z-index 2}
:customization-color account-color
:track-icon (if biometric-auth?
(biometric/get-icon-by-type biometric-type)
:password)
:disabled? (or loading-swap-proposal?
(not swap-proposal)
(not transaction-for-signing))
:on-complete #(rf/dispatch [:wallet/prepare-signatures-for-transactions :swap])}]))
:auth-button-label (i18n/label :t/confirm)
:on-complete (when sign-on-keycard?
#(rf/dispatch
[:wallet/prepare-signatures-for-transactions
:swap
""]))
:on-auth-success (fn [data]
(rf/dispatch [:wallet/stop-get-swap-proposal])
(rf/dispatch [:wallet/prepare-signatures-for-transactions :swap data]))}]))
(defn footer
[]
+14 -77
View File
@@ -167,7 +167,6 @@
(when
(= (:chain-id network) bridge-to-chain-id)
network))
networks))))
(rf/reg-sub
@@ -206,89 +205,27 @@
{:crypto (str crypto-formatted " " (:symbol token))
:fiat fiat-formatted})))
(rf/reg-sub
:wallet/confirmed-quick-tx-setting
:wallet/tx-settings
:<- [:wallet/wallet-send]
(fn [send-data]
(or (:confirmed-quick-tx-setting send-data) :transaction-setting/fast)))
(rf/reg-sub
:wallet/user-tx-settings
:<- [:wallet/wallet-send]
:-> :user-tx-settings)
(rf/reg-sub
:wallet/tx-settings-max-base-fee-user
:<- [:wallet/user-tx-settings]
:-> :max-base-fee)
(rf/reg-sub
:wallet/tx-settings-priority-fee-user
:<- [:wallet/user-tx-settings]
:-> :priority-fee)
(rf/reg-sub
:wallet/tx-settings-nonce-user
:<- [:wallet/user-tx-settings]
:-> :nonce)
(rf/reg-sub
:wallet/tx-settings-gas-amount-user
:<- [:wallet/user-tx-settings]
:-> :gas-amount)
(rf/reg-sub
:wallet/tx-settings-gas-amount
:<- [:wallet/send-route]
:<- [:wallet/tx-settings-gas-amount-user]
(fn [[route value-set-by-user]]
(or value-set-by-user (:gas-amount (first route)))))
(rf/reg-sub
:wallet/tx-settings-nonce
:<- [:wallet/send-route]
:<- [:wallet/tx-settings-nonce-user]
(fn [[route value-set-by-user]]
(or value-set-by-user (:nonce (first route)))))
(rf/reg-sub
:wallet/tx-settings-gas-fees
:<- [:wallet/send-route]
(fn [route]
(:gas-fees (first route))))
(rf/reg-sub
:wallet/tx-settings-suggested-nonce
:<- [:wallet/send-route]
(fn [route]
(:suggested-tx-nonce (first route))))
(rf/reg-sub
:wallet/tx-settings-priority-fee
:<- [:wallet/tx-settings-gas-fees]
:<- [:wallet/tx-settings-priority-fee-user]
(fn [[gas-fees value-set-by-user]]
(or value-set-by-user (:tx-priority-fee gas-fees))))
:-> :tx-settings)
(rf/reg-sub
:wallet/tx-settings-max-base-fee
:<- [:wallet/tx-settings-gas-fees]
:<- [:wallet/tx-settings-max-base-fee-user]
(fn [[gas-fees value-set-by-user]]
(or value-set-by-user (:current-base-fee gas-fees))))
:<- [:wallet/tx-settings]
:-> :max-base-fee)
(rf/reg-sub
:wallet/tx-settings-suggested-max-priority-fee
:<- [:wallet/tx-settings-gas-fees]
:<- [:wallet/tx-settings-max-base-fee-user]
(fn [[gas-fees value-set-by-user]]
(or value-set-by-user (:suggested-max-priority-fee gas-fees))))
:wallet/tx-settings-priority-fee
:<- [:wallet/tx-settings]
:-> :priority-fee)
(rf/reg-sub
:wallet/tx-settings-suggested-min-priority-fee
:<- [:wallet/tx-settings-gas-fees]
:<- [:wallet/tx-settings-max-base-fee-user]
(fn [[gas-fees value-set-by-user]]
(or value-set-by-user (:suggested-min-priority-fee gas-fees))))
:wallet/tx-settings-max-gas-amount
:<- [:wallet/tx-settings]
:-> :max-gas-amount)
(rf/reg-sub
:wallet/tx-settings-nonce
:<- [:wallet/tx-settings]
:-> :nonce)
+41 -1
View File
@@ -260,7 +260,7 @@
token-for-fees (first (filter #(= (string/lower-case (:symbol %))
(string/lower-case token-symbol-for-fees))
tokens))
fee-in-native-token (send-utils/full-route-gas-fee [swap-proposal])
fee-in-native-token (send-utils/calculate-full-route-gas-fee [swap-proposal])
fee-in-fiat (utils/calculate-token-fiat-value
{:currency currency
:balance fee-in-native-token
@@ -333,3 +333,43 @@
:token token-for-fees
:prices-per-token prices-per-token})]
fee-in-fiat)))
(rf/reg-sub
:wallet/swap-exchange-rate-crypto
:<- [:wallet/swap-proposal-amount-in]
:<- [:wallet/swap-asset-to-pay]
:<- [:wallet/swap-proposal-amount-out]
:<- [:wallet/swap-asset-to-receive]
(fn [[amount-in asset-to-pay amount-out asset-to-receive]]
(let [pay-token-decimals (:decimals asset-to-pay)
receive-token-decimals (:decimals asset-to-receive)
amount-in-num (some-> amount-in
(number/hex->whole pay-token-decimals)
(number/to-fixed pay-token-decimals)
(money/->bignumber))
amount-out-num (some-> amount-out
(number/hex->whole receive-token-decimals)
(number/to-fixed receive-token-decimals)
(money/->bignumber))
exchange-rate (when (and amount-in-num amount-out-num)
(money/div amount-in-num amount-out-num))
display-decimals (min pay-token-decimals
constants/min-token-decimals-to-display)]
(when exchange-rate
(number/to-fixed exchange-rate display-decimals)))))
(rf/reg-sub
:wallet/swap-exchange-rate-fiat
:<- [:wallet/swap-exchange-rate-crypto]
:<- [:wallet/swap-asset-to-pay]
:<- [:profile/currency]
:<- [:profile/currency-symbol]
:<- [:wallet/prices-per-token]
(fn [[swap-exchange-rate asset-to-pay currency currency-symbol prices-per-token]]
(when swap-exchange-rate
(let [fiat-value (utils/calculate-token-fiat-value
{:currency currency
:balance swap-exchange-rate
:token asset-to-pay
:prices-per-token prices-per-token})]
(utils/fiat-formatted-for-ui currency-symbol fiat-value)))))
+3 -3
View File
@@ -120,9 +120,9 @@
:approval-required true
:approval-amount-required "0x10000"
:gas-amount "25000"
:gas-fees {:tx-max-fees-per-gas "4"
:eip-1559-enabled true
:l-1-gas-fee "0"}}
:gas-fees {:max-fee-per-gas-medium "4"
:eip-1559-enabled true
:l-1-gas-fee "0"}}
:error-response "Error"
:loading-swap-proposal? false
:max-slippage 0.5})
+16 -64
View File
@@ -162,17 +162,6 @@
:<- [:wallet/wallet-send]
:-> :route)
(rf/reg-sub
:wallet/gas-fees
:<- [:wallet/wallet-send-route]
(fn [route]
(:gas-fees (first route))))
(rf/reg-sub
:wallet/suggested-gas-fees-for-setting
:<- [:wallet/gas-fees]
:-> :suggested-gas-fees-for-setting)
(rf/reg-sub
:wallet/wallet-send-enough-assets?
:<- [:wallet/wallet-send]
@@ -855,59 +844,22 @@
:<- [:profile/currency]
:<- [:profile/currency-symbol]
:<- [:wallet/prices-per-token]
(fn [[account route currency currency-symbol prices-per-token]]
(let [token-symbol-for-fees (get-in (first route) [:from :native-currency-symbol])]
(when token-symbol-for-fees
(let [tokens (:tokens account)
token-for-fees (first (filter #(= (string/lower-case (:symbol %))
(string/lower-case token-symbol-for-fees))
tokens))
fee-in-native-token (send-utils/full-route-gas-fee route)
fee-in-fiat (utils/calculate-token-fiat-value
{:currency currency
:balance fee-in-native-token
:token token-for-fees
:prices-per-token prices-per-token})
fee-formatted (utils/fiat-formatted-for-ui
currency-symbol
fee-in-fiat)]
fee-formatted)))))
(rf/reg-sub
:wallet/wallet-send-transaction-setting-fiat-formatted
:<- [:wallet/current-viewing-account]
:<- [:wallet/wallet-send-route]
:<- [:profile/currency]
:<- [:profile/currency-symbol]
:<- [:wallet/prices-per-token]
:<- [:wallet/suggested-gas-fees-for-setting]
(fn [[account route currency currency-symbol prices-per-token fees-for-settings]
[_ transaction-setting]]
(let [token-symbol-for-fees (get-in (first route) [:from :native-currency-symbol])]
(when token-symbol-for-fees
(let [tokens (:tokens account)
token-for-fees (first (filter #(= (string/lower-case (:symbol %))
(string/lower-case token-symbol-for-fees))
tokens))
gas-price (transaction-setting fees-for-settings)
fee-in-native-token (send-utils/full-route-gas-fee-for-custom-gas-price route gas-price)
fee-in-fiat (utils/calculate-token-fiat-value
{:currency currency
:balance fee-in-native-token
:token token-for-fees
:prices-per-token prices-per-token})
fee-formatted (utils/fiat-formatted-for-ui
currency-symbol
fee-in-fiat)]
fee-formatted)))))
(rf/reg-sub
:wallet/has-partially-operable-accounts?
:<- [:wallet/accounts]
(fn [accounts]
(->> accounts
(some #(= :partially (:operable %)))
boolean)))
(fn [[account route currency currency-symbol prices-per-token] [_ token-symbol-for-fees]]
(when token-symbol-for-fees
(let [tokens (:tokens account)
token-for-fees (first (filter #(= (string/lower-case (:symbol %))
(string/lower-case token-symbol-for-fees))
tokens))
fee-in-native-token (send-utils/calculate-full-route-gas-fee route)
fee-in-fiat (utils/calculate-token-fiat-value
{:currency currency
:balance fee-in-native-token
:token token-for-fees
:prices-per-token prices-per-token})
fee-formatted (utils/fiat-formatted-for-ui
currency-symbol
fee-in-fiat)]
fee-formatted))))
(rf/reg-sub
:wallet/accounts-names
+6 -19
View File
@@ -205,10 +205,9 @@
(def route-data
[{:gas-amount "25000"
:gas-fees {:tx-max-fees-per-gas "4"
:eip-1559-enabled true
:l-1-gas-fee "0"}
:from {:native-currency-symbol "ETH"}}])
:gas-fees {:max-fee-per-gas-medium "4"
:eip-1559-enabled true
:l-1-gas-fee "0"}}])
(h/deftest-sub :wallet/balances-in-selected-networks
[sub-name]
@@ -939,21 +938,9 @@
(assoc-in [:profile/profile :currency] :usd)
(assoc-in [:profile/profile :currency-symbol] "$")))
(is (match? (rf/sub [sub-name]) "$0.20"))))
(h/deftest-sub :wallet/has-partially-operable-accounts?
[sub-name]
(testing "returns false if there are no partially operable accounts"
(swap! rf-db/app-db
#(assoc-in % [:wallet :accounts] accounts))
(is (false? (rf/sub [sub-name]))))
(testing "returns true if there are partially operable accounts"
(swap! rf-db/app-db
#(assoc-in %
[:wallet :accounts]
(update accounts "0x2" assoc :operable :partially)))
(is (true? (rf/sub [sub-name])))))
(let [token-symbol-for-fees "ETH"
result (rf/sub [sub-name token-symbol-for-fees])]
(is (match? result "$0.20")))))
(h/deftest-sub :wallet/zero-balance-in-all-non-watched-accounts?
[sub-name]
@@ -17,6 +17,8 @@
(defn auth-success-fixtures
[]
(rf/reg-fx :effects.standard-auth/on-auth-success
(fn [on-auth-success] (on-auth-success)))
(rf/reg-fx :effects.biometric/check-if-available
(fn [{:keys [on-success]}] (on-success)))
(rf/reg-event-fx :biometric/authenticate
@@ -32,7 +34,7 @@
(let [on-success-called? (atom false)
args (assoc default-args :on-auth-success #(reset! on-success-called? true))]
(rf/dispatch [:standard-auth/authorize args])
(rf-test/wait-for [:standard-auth/on-biometric-success]
(rf-test/wait-for [:standard-auth/migrate-partially-operable-accounts]
(is @on-success-called?))))))
(defn auth-cancel-fixtures
+3 -5
View File
@@ -143,8 +143,7 @@
(defn to-hex
[^js bn]
(when bn
(str "0x" (to-string bn 16))))
(str "0x" (to-string bn 16)))
(defn from-hex
[hex-str]
@@ -196,9 +195,8 @@
(greater-than-or-equals balance amount)))
(defn- add*
[n1 n2]
(when-let [[^js bn1 ^js bn2] (->bignumbers n1 n2)]
(.add ^js bn1 bn2)))
[bn1 n2]
(.add ^js bn1 n2))
(def add
"Add with defaults, this version is able to receive `nil` and takes them as 0."
+3 -3
View File
@@ -3,7 +3,7 @@
"_comment": "Instead use: scripts/update-status-go.sh <rev>",
"owner": "status-im",
"repo": "status-go",
"version": "feat/tx-path-new-props",
"commit-sha1": "d2c220fe60bb7817753167184ba70e9b47cfa5be",
"src-sha256": "10n4kf7lb0rm57b3llyalpgv70dp3k560nxxfpb7f0gcc5kpl97q"
"version": "v10.4.0",
"commit-sha1": "1bfb0cef022afc1484a410cb3e0097e7523bb705",
"src-sha256": "13cg07ld319g1fyaqpkjnpdw6iap389dwzwnh9g870ci8scpdy5m"
}
+11 -14
View File
@@ -4,11 +4,11 @@
"about-gas-amount": "AKA gas limit. Refers to the maximum number of computational steps (or units of gas) that a transaction can consume. It represents the complexity or amount of work required to execute a transaction or smart contract.\n\nThe gas limit is a cap on how much work the transaction can do on the blockchain. If the gas limit is set too low, the transaction may fail due to insufficient gas.",
"about-key-storage-content": "Status will never access your private key. Be sure to backup your seed phrase. If you lose your phone it is the only way to access your keys.",
"about-key-storage-title": "About key storage",
"about-max-base-fee": "When your transaction gets included in the block, any difference between your max base fee and the actual base fee will be refunded.\n\nNote: the ETH amount shown for this value is calculated: max base fee (in GWEI) * max gas amount.",
"about-max-base-fee": "When your transaction gets included in the block, any difference between your max base fee and the actual base fee will be refunded.",
"about-names-content": "No one can pretend to be you! Youre anonymous by default and never have to reveal your real name. You can register a custom name for a small fee.",
"about-names-title": "Names cant be changed",
"about-nonce": "Transaction counter ensuring transactions from your account are processed in the correct order and cant be replayed. Each new transaction increments the nonce by 1, ensuring uniqueness and preventing double-spending.\n\nIf a transaction with a lower nonce is pending, higher nonce transactions will remain in the queue until the earlier one is confirmed.",
"about-priority-fee": "AKA miner tip. A voluntary fee you can add to incentivise miners or validators to prioritise your transaction.\n\nThe higher the tip, the faster your transaction is likely to be processed, especially during periods of higher network congestion.\n\nNote: the ETH amount shown for this value is calculated: Priority fee (in GWEI) * Max gas amount",
"about-priority-fee": "AKA miner tip. A voluntary fee you can add to incentivise miners or validators to prioritise your transaction.\n\nThe higher the tip, the faster your transaction is likely to be processed, especially curing periods of higher network congestion.",
"about-sharing-data": "About sharing data",
"accent-colour": "Accent colour",
"accent-colour-updated": "Accent colour updated",
@@ -796,7 +796,7 @@
"device-syncing": "Device syncing",
"devices": "Devices",
"devices-count": "{{number}} devices",
"different-keycard": "Its a different Keycard",
"different-keycard": "This is a different Keycard",
"disable": "disable",
"disable-all": "Disable all",
"disable-later-in-settings": "You can disable this later in Settings",
@@ -1111,9 +1111,7 @@
"from-label": "From",
"gas-amount": "Gas amount",
"gas-amount-limit": "Gas amount limit",
"gas-amount-lower": "Too low. Minimum: {{low}}",
"gas-amount-higher": "Too high. Maximum: {{high}}",
"gas-amount-current": "Current: {{current}}",
"gas-amount-lower": "Too low. Recommended: {{current}} UNITS",
"gas-limit": "Gas limit",
"gas-price": "Gas price",
"gas-used": "Gas used",
@@ -1593,10 +1591,9 @@
"master-account": "Master account",
"max": "Max: {{number}}",
"max-2-decimals": "Max. 2 decimals",
"max-base-fee": "Max base fee",
"max-base-fee-current": "Current: {{current}}",
"max-base-fee-higher": "Higher than necessary (current: {{current}})",
"max-base-fee-lower": "Lower than priority fee: {{priority-fee}}",
"max-base-fee": "Max base fee",
"max-base-fee-higher": "Higher than necessary. Current: {{current}} GWEI",
"max-base-fee-lower": "Too low. Current: {{current}} GWEI ",
"max-fee": "Max fee",
"max-fees": "Max fees",
"max-gas-amount": "Max gas amount",
@@ -2071,10 +2068,8 @@
"principles": "Principles",
"priority": "Priority",
"priority-fee": "Priority fee",
"priority-fee-higher": "Higher than necessary: {{low}} - {{high}}",
"priority-fee-higher-max-base": "Higher than max base fee: {{max-base-fee}}",
"priority-fee-lower": "Lower than suggested: {{low}} - {{high}}",
"priority-fee-current": "Current: {{current}}",
"priority-fee-higher": "More than necessary. Current: {{low}} - {{high}} GWEI",
"priority-fee-lower": "Too low. Current: {{low}} - {{high}} GWEI",
"privacy": "Privacy",
"privacy-and-security": "Privacy and security",
"privacy-photos": "Profile Photo Privacy",
@@ -2284,6 +2279,7 @@
"saved-address-network-preference-selection-description": "Only change if you know which networks the address owner is happy to to receive funds on",
"saved-address-removed": "Saved address removed",
"saved-addresses": "Saved addresses",
"saved-addresses-limit-reached-toast": "Limit of 20 saved addresses reached. Remove a saved address to add a new one.",
"saving-keys-to-device": "Saving keys to device...",
"say-hi": "Say hi",
"scan-an-account-qr-code": "Scan an account QR code",
@@ -2571,6 +2567,7 @@
"sun": "Sun",
"swap": "Swap",
"swap-details": "Swap details",
"swap-exchange-rate-in-crypto": "1 {{receive-token-symbol}} ≈ {{exchange-rate}} {{pay-token-symbol}}",
"swap-failed": "Swap failed",
"swapped-to": "Swapped {{pay-amount}} {{pay-token-symbol}} to {{receive-amount}} {{receive-token-symbol}}",
"swapping-to": "Swapping {{pay-amount}} {{pay-token-symbol}} to {{receive-amount}} {{receive-token-symbol}}",