NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
17.3k stars 13.54k forks source link

Connect Monero wallet with Trezor safe 3 #313470

Open jiricmi opened 3 months ago

jiricmi commented 3 months ago

Describe the bug

Hello everyone, I am using monero wallet on nixos and i wanted to create new monero hw wallet with Trezor safe 3. There is tutorial on trezor website. But when i select trezor version and click create wallet, it fails because Trezor was not found. configure.nix

services.trezord.enable = true;
services.udev.packages = with pkgs; [ trezor-udev-rules ];
environment.systemPackages = with pkgs; [
  trezor-suite
  trezorctl
  monero-gui
];

Steps To Reproduce

Steps to reproduce the behavior:

  1. Open monero-gui
  2. Create new hardware wallet
  3. select Trezor safe 3

Expected behavior

Create monero wallet with trezor

Screenshots

image

Additional context

I also tried cli version of monero wallet, with same result. I normally use trezor suite and it works. I tried with feather wallet, and it works. I posted this on nixos discourse and @rnhmjoj asked me to create issue here and ping @prusnak . Reply by @rnhmjoj on discourse.

You should open an issue in Nixpkgs on github and ping me and prusnak.
I maintain the monero packages, but I don’t have a trezor so I can’t really test it.
I just noticed that trezor support may have been accidentally [disabled 1](https://cache.nixos.org/log/9vmcd2l1jsm3116fvflxhqzkkd31i0rv-monero-cli-0.18.3.3.drv) at build time. I’ll look into this as soon as I have time.

Add any other context about the problem here.

Notify maintainers

@prusnak @rnhmjoj

Metadata

 - system: `"x86_64-linux"`
 - host os: `Linux 6.6.26, NixOS, 24.05 (Uakari), 24.05.20240410.1042fd8`
 - multi-user?: `yes`
 - sandbox: `yes`
 - version: `nix-env (Nix) 2.18.2`
 - nixpkgs: `/nix/store/r1g09wfd968168f6drdl7agfaf3msik4-source`

Add a :+1: reaction to issues you find important.

Kamillaova commented 3 months ago

Does the trezorctl get-features shows your device?

jiricmi commented 3 months ago

Yes it shows device correctly. I am able to connect via trezor-suite and feather wallet to trezor device.

rnhmjoj commented 3 months ago

Uhm, if you got to that screen I think that at least the support for trezor has been enabled. Try launching monero-wallet-gui from a terminal to see what the error is from the log.

jiricmi commented 3 months ago
2024-05-22 10:17:20.981 W Qt:5.15.12 GUI:- | screen: 3440x1440 - available: QSize(3440, 1440) - dpi: 96.0088 - ratio:0.836455
2024-05-22 10:17:22.265 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.265 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.265 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.265 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.265 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.265 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.265 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.265 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.303 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.303 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.322 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.322 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.322 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.322 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.322 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.322 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.322 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.322 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.353 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.353 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.706 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.722 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.722 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.723 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.723 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.723 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.723 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.723 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.723 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.922 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.922 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.922 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.922 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.922 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.922 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.922 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.922 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.923 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:22.923 W Qt Quick Layouts: Detected recursive rearrange. Aborting after two iterations.
2024-05-22 10:17:23.023 W qrc:/wizard/WizardWalletInput.qml:112: TypeError: Cannot read property 'btnPrev' of undefined
2024-05-22 10:17:23.023 W qrc:/wizard/WizardWalletInput.qml:111: TypeError: Cannot read property 'btnPrev' of undefined
2024-05-22 10:17:23.023 W qrc:/wizard/WizardWalletInput.qml:112: TypeError: Cannot read property 'btnPrev' of undefined
2024-05-22 10:17:23.023 W qrc:/wizard/WizardWalletInput.qml:111: TypeError: Cannot read property 'btnPrev' of undefined
2024-05-22 10:17:29.515 W Logging to "/home/jiricmi/.cache/monero-project/monero-core/monero-wallet-gui.log"
2024-05-22 10:17:42.237 W file:///nix/store/s55cz5ppcsda6b2ypnaxx9xi2zyxw1lz-qtquickcontrols-5.15.12/lib/qt-5.15.12/qml/QtQuick/Controls/ApplicationWindow.qml:259:9: QML ContentItem: Binding loop detected for property "implicitWidth"
surfaceflinger commented 3 months ago

~Not sure if this is coming from Monero itself, or gui wallet code, but recently I had to do this: https://github.com/NixOS/nixpkgs/commit/45f06b5037f25c239ab3173dc8afc2eb8b260de3 Perhaps same thing is now required in monero-gui?~ nah, monero-gui derivation already uses python3

Can you check if /home/jiricmi/.cache/monero-project/monero-core/monero-wallet-gui.log differs from stdout/err?

btw. could you try using feather? I tested it with Ledger, but it would be awesome if you could confirm if it works with Trezor :)

jiricmi commented 3 months ago
2024-05-22 10:17:29.515    7f99187cee40 INFO    logging contrib/epee/src/mlog.cpp:273   New log categories: *:WARNING,net:FATAL,net.http:FATAL,net.ssl:FATAL,net.p2p:FATAL,net.cn:FATAL,daemon.rpc:FATAL,global:INFO,verify:FATAL,serialization:FATAL,daemon.rpc.payment:ERROR,stacktrace:INFO,logging:INFO,msgwriter:INFO
2024-05-22 10:17:29.515    7f99187cee40 WARNING frontend    src/wallet/api/wallet.cpp:411   Logging to "/home/jiricmi/.cache/monero-project/monero-core/monero-wallet-gui.log"
2024-05-22 10:17:42.237    7f99187cee40 WARNING frontend    src/wallet/api/wallet.cpp:411   file:///nix/store/s55cz5ppcsda6b2ypnaxx9xi2zyxw1lz-qtquickcontrols-5.15.12/lib/qt-5.15.12/qml/QtQuick/Controls/ApplicationWindow.qml:259:9: QML ContentItem: Binding loop detected for property "implicitWidth"
2024-05-22 10:17:42.251    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:133  Exception: boost::wrapexcept<boost::system::system_error>
2024-05-22 10:17:42.251    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:134  Unwound call stack:
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [1]  0xb0) [0x55de5014f342]:__cxa_throw+0xb0) [0x55de5014f342]
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [2] monero-wallet-gui(+0x112e0e) [0x55de5013be0e] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [3] monero-wallet-gui(+0x2077e9) [0x55de502307e9] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [4] monero-wallet-gui(+0x207859) [0x55de50230859] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [5] monero-wallet-gui(+0x2aed21) [0x55de502d7d21] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [6] monero-wallet-gui(+0x27f221) [0x55de502a8221] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [7] monero-wallet-gui(+0x20ec4a) [0x55de50237c4a] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [8] monero-wallet-gui(+0x20facd) [0x55de50238acd] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [9] monero-wallet-gui(+0x2103af) [0x55de502393af] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [10] monero-wallet-gui(+0x237231) [0x55de50260231] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [11] monero-wallet-gui(+0x5b8ae9) [0x55de505e1ae9] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [12] monero-wallet-gui(+0x5b94c8) [0x55de505e24c8] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [13] monero-wallet-gui(+0x5addf0) [0x55de505d6df0] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [14] monero-wallet-gui(+0x5ae85b) [0x55de505d785b] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [15] monero-wallet-gui(+0x3945f7) [0x55de503bd5f7] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [16] monero-wallet-gui(+0x396a4e) [0x55de503bfa4e] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [17] monero-wallet-gui(+0x337dd9) [0x55de50360dd9] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [18] monero-wallet-gui(+0x25c85e) [0x55de5028585e] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [19] monero-wallet-gui(+0x25cf2c) [0x55de50285f2c] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [20] monero-wallet-gui(+0x2874b5) [0x55de502b04b5] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [21] /nix/store/y3w2wzj83525frlak51nmjsvj2xialw0-qtbase-5.15.12/lib/libQt5Core.so.5(+0xe6efa) [0x7f991e6e6efa] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [22] /nix/store/y3w2wzj83525frlak51nmjsvj2xialw0-qtbase-5.15.12/lib/libQt5Core.so.5(+0xe386c) [0x7f991e6e386c] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [23] /nix/store/ddwyrxif62r8n6xclvskjyy6szdhvj60-glibc-2.39-5/lib/libc.so.6(+0x8e272) [0x7f991d47c272] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [24] /nix/store/ddwyrxif62r8n6xclvskjyy6szdhvj60-glibc-2.39-5/lib/libc.so.6(+0x109dcc) [0x7f991d4f7dcc] 
2024-05-22 10:17:42.258    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172  
2024-05-22 10:17:42.260    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:133  Exception: boost::wrapexcept<boost::system::system_error>
2024-05-22 10:17:42.260    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:134  Unwound call stack:
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [1]  0xb0) [0x55de5014f342]:__cxa_throw+0xb0) [0x55de5014f342]
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [2] monero-wallet-gui(+0x112e0e) [0x55de5013be0e] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [3] monero-wallet-gui(+0x2077e9) [0x55de502307e9] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [4] monero-wallet-gui(+0x207859) [0x55de50230859] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [5] monero-wallet-gui(+0x2aed21) [0x55de502d7d21] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [6] monero-wallet-gui(+0x27f221) [0x55de502a8221] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [7] monero-wallet-gui(+0x20ec4a) [0x55de50237c4a] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [8] monero-wallet-gui(+0x20facd) [0x55de50238acd] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [9] monero-wallet-gui(+0x2103af) [0x55de502393af] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [10] monero-wallet-gui(+0x237231) [0x55de50260231] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [11] monero-wallet-gui(+0x5b8ae9) [0x55de505e1ae9] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [12] monero-wallet-gui(+0x5b94c8) [0x55de505e24c8] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [13] monero-wallet-gui(+0x5addf0) [0x55de505d6df0] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [14] monero-wallet-gui(+0x5ae90b) [0x55de505d790b] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [15] monero-wallet-gui(+0x3944e6) [0x55de503bd4e6] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [16] monero-wallet-gui(+0x396a68) [0x55de503bfa68] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [17] monero-wallet-gui(+0x337dd9) [0x55de50360dd9] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [18] monero-wallet-gui(+0x25c85e) [0x55de5028585e] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [19] monero-wallet-gui(+0x25cf2c) [0x55de50285f2c] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [20] monero-wallet-gui(+0x2874b5) [0x55de502b04b5] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [21] /nix/store/y3w2wzj83525frlak51nmjsvj2xialw0-qtbase-5.15.12/lib/libQt5Core.so.5(+0xe6efa) [0x7f991e6e6efa] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [22] /nix/store/y3w2wzj83525frlak51nmjsvj2xialw0-qtbase-5.15.12/lib/libQt5Core.so.5(+0xe386c) [0x7f991e6e386c] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [23] /nix/store/ddwyrxif62r8n6xclvskjyy6szdhvj60-glibc-2.39-5/lib/libc.so.6(+0x8e272) [0x7f991d47c272] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [24] /nix/store/ddwyrxif62r8n6xclvskjyy6szdhvj60-glibc-2.39-5/lib/libc.so.6(+0x109dcc) [0x7f991d4f7dcc] 
2024-05-22 10:17:42.262    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172  
2024-05-22 10:17:42.264    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:133  Exception: std::runtime_error
2024-05-22 10:17:42.264    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:134  Unwound call stack:
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [1]  0xb0) [0x55de5014f342]:__cxa_throw+0xb0) [0x55de5014f342]
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [2] monero-wallet-gui(+0x1ae4be) [0x55de501d74be] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [3] monero-wallet-gui(+0x4210c7) [0x55de5044a0c7] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [4] monero-wallet-gui(+0x311a32) [0x55de5033aa32] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [5] monero-wallet-gui(+0x337da5) [0x55de50360da5] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [6] monero-wallet-gui(+0x25c85e) [0x55de5028585e] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [7] monero-wallet-gui(+0x25cf2c) [0x55de50285f2c] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [8] monero-wallet-gui(+0x2874b5) [0x55de502b04b5] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [9] /nix/store/y3w2wzj83525frlak51nmjsvj2xialw0-qtbase-5.15.12/lib/libQt5Core.so.5(+0xe6efa) [0x7f991e6e6efa] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [10] /nix/store/y3w2wzj83525frlak51nmjsvj2xialw0-qtbase-5.15.12/lib/libQt5Core.so.5(+0xe386c) [0x7f991e6e386c] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [11] /nix/store/ddwyrxif62r8n6xclvskjyy6szdhvj60-glibc-2.39-5/lib/libc.so.6(+0x8e272) [0x7f991d47c272] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172     [12] /nix/store/ddwyrxif62r8n6xclvskjyy6szdhvj60-glibc-2.39-5/lib/libc.so.6(+0x109dcc) [0x7f991d4f7dcc] 
2024-05-22 10:17:42.266    7f99169786c0 INFO    stacktrace  src/common/stack_trace.cpp:172  
jiricmi commented 3 months ago

I have tried feather, which i installed through home manager, and it is working with Trezor safe 3