mirror of
https://github.com/monero-project/monero-gui.git
synced 2026-04-01 23:27:25 -04:00
Compare commits
31 Commits
v0.18.4.6
...
github-bui
| Author | SHA1 | Date | |
|---|---|---|---|
| 9ec4749244 | |||
| 7afe4a3136 | |||
| e3b20fa518 | |||
| 96e8503960 | |||
| c911d0166e | |||
| 4f5d81c88b | |||
| d2a96ccce9 | |||
| 426d9c32de | |||
| 60ad417b9e | |||
| 4ea34bb60d | |||
| 92bdbe8192 | |||
| 93b9b26d1d | |||
| 8b7ee2d8f0 | |||
| 099fc8e394 | |||
| 8c7c1dc9d7 | |||
| 6cfbb8559b | |||
| 8953c8c5f2 | |||
| 4df7f89c84 | |||
| e9c0de9e26 | |||
| 0371a26a56 | |||
| bc6e61c66c | |||
| 6c4c702722 | |||
| f77f96f5a9 | |||
| 53e4bde4c0 | |||
| 651a1a3169 | |||
| 91abd03fd3 | |||
| ab46af6cf9 | |||
| d08422420b | |||
| 0d801f5159 | |||
| f102dad609 | |||
| c6246962d8 |
36
.gitea/workflows/build.yml
Normal file
36
.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,36 @@
|
||||
name: Build
|
||||
run-name: Build Docker Image
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
|
||||
# Build image and push to container registry
|
||||
docker-build:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
- uses: satackey/action-docker-layer-caching@v0.0.11
|
||||
if: "!startsWith(github.ref, 'refs/tags/v')"
|
||||
continue-on-error: true
|
||||
with:
|
||||
key: docker-linux-static-{hash}
|
||||
restore-keys: |
|
||||
docker-linux-static-
|
||||
- name: install dependencies
|
||||
run: sudo apt -y install xvfb libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xkb1 libxcb-shape0 libxkbcommon-x11-0
|
||||
- name: prepare build environment
|
||||
run: docker build --tag monero:build-env-linux --build-arg THREADS=3 --file Dockerfile.linux .
|
||||
- name: build
|
||||
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'make release-static -j3'
|
||||
- name: sha256sum
|
||||
run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
|
||||
- name: test qml
|
||||
run: xvfb-run -a /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui --test-qml
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
/home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
|
||||
/home/runner/work/monero-gui/monero-gui/build/release/bin/monerod
|
||||
107
.github/verify_p2pool.py
vendored
107
.github/verify_p2pool.py
vendored
@@ -1,107 +0,0 @@
|
||||
import requests
|
||||
import subprocess
|
||||
from urllib.request import urlretrieve
|
||||
import difflib
|
||||
|
||||
sech_key = "https://p2pool.io/SChernykh.asc"
|
||||
sech_key_backup = "https://raw.githubusercontent.com/monero-project/gitian.sigs/master/gitian-pubkeys/SChernykh.asc"
|
||||
sech_key_fp = "1FCA AB4D 3DC3 310D 16CB D508 C47F 82B5 4DA8 7ADF"
|
||||
|
||||
p2pool_files = [{
|
||||
"os": "WIN",
|
||||
"filename": "windows-x64.zip",
|
||||
},
|
||||
{
|
||||
"os": "LINUX",
|
||||
"filename": "linux-x64.tar.gz"
|
||||
},
|
||||
{
|
||||
"os": "MACOS_AARCH64",
|
||||
"filename": "macos-aarch64.tar.gz",
|
||||
},
|
||||
{
|
||||
"os": "MACOS",
|
||||
"filename": "macos-x64.tar.gz",
|
||||
}]
|
||||
|
||||
def get_hash(fname):
|
||||
fhash = subprocess.check_output(["sha256sum", fname]).decode("utf-8")
|
||||
print(fhash.strip())
|
||||
return fhash.split()[0]
|
||||
|
||||
def main():
|
||||
global p2pool_files, sech_key, sech_key_backup, sech_key_fp
|
||||
p2pool_tag_api = "https://api.github.com/repos/SChernykh/p2pool/releases/latest"
|
||||
data = requests.get(p2pool_tag_api).json()
|
||||
tag = data["tag_name"]
|
||||
head = f"p2pool-{tag}-"
|
||||
url = f"https://github.com/SChernykh/p2pool/releases/download/{tag}/"
|
||||
|
||||
try:
|
||||
urlretrieve(sech_key,"SChernykh.asc")
|
||||
except:
|
||||
urlretrieve(sech_key_backup,"SChernykh.asc")
|
||||
|
||||
urlretrieve(f"{url}sha256sums.txt.asc","sha256sums.txt.asc")
|
||||
|
||||
subprocess.check_call(["gpg", "--import", "SChernykh.asc"])
|
||||
subprocess.check_call(["gpg", "--verify", "sha256sums.txt.asc"])
|
||||
fingerprint = subprocess.check_output(["gpg","--fingerprint", "SChernykh"]).decode("utf-8").splitlines()[1].strip()
|
||||
|
||||
assert fingerprint == sech_key_fp
|
||||
|
||||
with open("sha256sums.txt.asc","r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
signed_hashes = {}
|
||||
for line in lines:
|
||||
if "Name:" in line:
|
||||
signed_fname = line.split()[1]
|
||||
if "SHA256:" in line:
|
||||
signed_hashes[signed_fname] = line.split()[1].lower()
|
||||
|
||||
expected = ""
|
||||
for i in range(len(p2pool_files)):
|
||||
fname = p2pool_files[i]["filename"]
|
||||
str_os =p2pool_files[i]["os"]
|
||||
dl = f"{url}{head}{fname}"
|
||||
urlretrieve(dl,f"{head}{fname}")
|
||||
fhash = get_hash(f"{head}{fname}")
|
||||
assert signed_hashes[f"{head}{fname}"] == fhash
|
||||
if i == 0:
|
||||
expected += f" #ifdef Q_OS_{str_os}\n"
|
||||
else:
|
||||
expected += f" #elif defined(Q_OS_{str_os})\n"
|
||||
expected += f" url = \"https://github.com/SChernykh/p2pool/releases/download/{tag}/{head}{fname}\";\n"
|
||||
expected += f" fileName = m_p2poolPath + \"/{head}{fname}\";\n"
|
||||
expected += f" validHash = \"{fhash}\";\n"
|
||||
expected += " #endif\n"
|
||||
|
||||
print(f"Expected:\n{expected}")
|
||||
|
||||
with open("src/p2pool/P2PoolManager.cpp","r") as f:
|
||||
p2pool_lines = f.readlines()
|
||||
|
||||
unexpected = ""
|
||||
ignore = 1
|
||||
for line in p2pool_lines:
|
||||
if ignore == 0:
|
||||
unexpected += line
|
||||
if "QString validHash;" in line:
|
||||
ignore = 0
|
||||
if "#endif" in line and ignore == 0:
|
||||
break
|
||||
|
||||
d = difflib.Differ()
|
||||
diff = d.compare(str(unexpected).splitlines(True),str(expected).splitlines(True))
|
||||
|
||||
print("Unexpected:")
|
||||
for i in diff:
|
||||
if i.startswith("?"):
|
||||
continue
|
||||
print(i.replace("\n",""))
|
||||
|
||||
assert unexpected == expected
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
196
.github/workflows/build.yml
vendored
196
.github/workflows/build.yml
vendored
@@ -1,196 +0,0 @@
|
||||
name: ci/gh-actions/gui
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
env:
|
||||
FREE_DISKSPACE: |
|
||||
sudo rm -rf /usr/local/.ghcup /usr/share/dotnet /usr/share/swift /usr/share/miniconda
|
||||
QT_TAG: v5.15.17-lts-lgpl
|
||||
QT_PREFIX: ${{ github.workspace }}/qt-install
|
||||
|
||||
jobs:
|
||||
build-macos:
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: install dependencies
|
||||
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm libsodium miniupnpc expat libunwind-headers protobuf qt5 pkg-config
|
||||
- name: build
|
||||
run: DEV_MODE=ON make release -j3
|
||||
- name: test qml
|
||||
run: build/release/bin/monero-wallet-gui.app/Contents/MacOS/monero-wallet-gui --test-qml
|
||||
|
||||
build-ubuntu:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: remove bundled boost
|
||||
run: sudo rm -rf /usr/local/share/boost
|
||||
- name: set apt conf
|
||||
run: |
|
||||
echo "Acquire::Retries \"3\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom
|
||||
echo "Acquire::http::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom
|
||||
echo "Acquire::ftp::Timeout \"120\";" | sudo tee -a /etc/apt/apt.conf.d/80-custom
|
||||
- name: update apt
|
||||
run: sudo apt update
|
||||
- name: install monero dependencies
|
||||
run: sudo apt -y install build-essential cmake libboost-all-dev miniupnpc libunbound-dev graphviz doxygen libunwind8-dev pkg-config libssl-dev libzmq3-dev libsodium-dev libhidapi-dev libnorm-dev libusb-1.0-0-dev libpgm-dev libprotobuf-dev protobuf-compiler
|
||||
- name: install monero gui dependencies
|
||||
run: sudo apt -y install qtbase5-dev qtdeclarative5-dev qml-module-qtqml-models2 qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtquick-xmllistmodel qml-module-qt-labs-settings qml-module-qt-labs-platform qml-module-qt-labs-folderlistmodel qttools5-dev-tools qml-module-qtquick-templates2 libqt5svg5-dev libgcrypt20-dev xvfb
|
||||
- name: build
|
||||
run: DEV_MODE=ON make release -j3
|
||||
- name: test qml
|
||||
run: xvfb-run -a build/release/bin/monero-wallet-gui --test-qml
|
||||
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
defaults:
|
||||
run:
|
||||
shell: msys2 {0}
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- uses: eine/setup-msys2@v2
|
||||
with:
|
||||
update: true
|
||||
install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-pcre mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb mingw-w64-x86_64-unbound git mingw-w64-x86_64-qt5 mingw-w64-x86_64-libgcrypt mingw-w64-x86_64-angleproject
|
||||
- name: add qmake.exe and windeployqt.exe
|
||||
run: |
|
||||
cp -f "$MSYSTEM_PREFIX/bin/qmake-qt5.exe" "$MSYSTEM_PREFIX/bin/qmake.exe"
|
||||
cp -f "$MSYSTEM_PREFIX/bin/windeployqt-qt5.exe" "$MSYSTEM_PREFIX/bin/windeployqt.exe"
|
||||
- name: build
|
||||
run: DEV_MODE=ON make release-win64 -j2
|
||||
- name: deploy
|
||||
run: make deploy
|
||||
working-directory: build/release
|
||||
- name: test qml
|
||||
run: build/release/bin/monero-wallet-gui --test-qml
|
||||
|
||||
macos-bundle:
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: install dependencies
|
||||
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm miniupnpc expat libunwind-headers protobuf pkg-config
|
||||
- name: clone qt repo
|
||||
run: git clone -b "${QT_TAG}" --recursive --depth 1 --shallow-submodules https://github.com/qt/qt5
|
||||
- name: build qt from source
|
||||
run: |
|
||||
cd qt5
|
||||
mkdir build && cd build
|
||||
../configure -prefix "${QT_PREFIX}" -opensource -confirm-license -release -nomake examples -nomake tests -no-rpath -skip qtwebengine -skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtnetworkauth -skip qtpurchasing -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine
|
||||
make -j"$(sysctl -n hw.ncpu)"
|
||||
make install
|
||||
cd ../qttools/src/linguist/lrelease
|
||||
../../../../build/qtbase/bin/qmake
|
||||
make -j"$(sysctl -n hw.ncpu)"
|
||||
make install
|
||||
cd ../../../../qttools/src/macdeployqt/macdeployqt/
|
||||
../../../../build/qtbase/bin/qmake
|
||||
make -j"$(sysctl -n hw.ncpu)"
|
||||
make install
|
||||
- name: build monero-gui
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH="${QT_PREFIX}" ..
|
||||
make -j"$(sysctl -n hw.ncpu)"
|
||||
- name: deploy
|
||||
run: make deploy
|
||||
working-directory: build
|
||||
- name: test qml
|
||||
run: build/bin/monero-wallet-gui.app/Contents/MacOS/monero-wallet-gui --test-qml
|
||||
- name: create .tar
|
||||
run: tar -cf monero-wallet-gui.tar monero-wallet-gui.app
|
||||
working-directory: build/bin
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/bin/monero-wallet-gui.tar
|
||||
|
||||
docker-linux-static:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: install dependencies
|
||||
run: sudo apt -y install xvfb libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xkb1 libxcb-shape0 libxkbcommon-x11-0
|
||||
- name: free up diskspace
|
||||
run: ${{env.FREE_DISKSPACE}}
|
||||
- name: prepare build environment
|
||||
run: docker build --tag monero:build-env-linux --build-arg THREADS=3 --file Dockerfile.linux .
|
||||
- name: build
|
||||
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'make release-static -j3'
|
||||
- name: sha256sum
|
||||
run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
|
||||
- name: test qml
|
||||
run: xvfb-run -a /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui --test-qml
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
/home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
|
||||
/home/runner/work/monero-gui/monero-gui/build/release/bin/monerod
|
||||
|
||||
docker-windows-static:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: free up diskspace
|
||||
run: ${{env.FREE_DISKSPACE}}
|
||||
- name: prepare build environment
|
||||
run: docker build --tag monero:build-env-windows --build-arg THREADS=3 --file Dockerfile.windows .
|
||||
- name: build
|
||||
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-windows sh -c 'make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j3'
|
||||
- name: sha256sum
|
||||
run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monero-wallet-gui.exe
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
/home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monero-wallet-gui.exe
|
||||
/home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monerod.exe
|
||||
|
||||
docker-android:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: free up diskspace
|
||||
run: ${{env.FREE_DISKSPACE}}
|
||||
- name: prepare build environment
|
||||
run: docker build --tag monero:build-env-android --build-arg THREADS=3 --file Dockerfile.android .
|
||||
- name: build
|
||||
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -e THREADS=3 monero:build-env-android
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: /home/runner/work/monero-gui/monero-gui/build/Android/release/android-build/monero-gui.apk
|
||||
|
||||
source-archive:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: archive
|
||||
run: |
|
||||
pip install git-archive-all
|
||||
export VERSION="monero-gui-$(git describe)"
|
||||
export OUTPUT="$VERSION.tar"
|
||||
echo "OUTPUT=$OUTPUT" >> $GITHUB_ENV
|
||||
/home/runner/.local/bin/git-archive-all --prefix "$VERSION/" --force-submodules "$OUTPUT"
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ env.OUTPUT }}
|
||||
path: /home/runner/work/monero-gui/monero-gui/${{ env.OUTPUT }}
|
||||
174
.github/workflows/flatpak.yml
vendored
174
.github/workflows/flatpak.yml
vendored
@@ -1,174 +0,0 @@
|
||||
name: Flatpak
|
||||
|
||||
on:
|
||||
release:
|
||||
types: released
|
||||
|
||||
jobs:
|
||||
part1:
|
||||
name: Part 1/3
|
||||
if: github.repository == 'monero-project/monero-gui'
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: bilelmoussaoui/flatpak-github-actions:kde-5.15-22.08
|
||||
options: --privileged
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install deps
|
||||
run: dnf -y install docker
|
||||
|
||||
- name: Setup QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
with:
|
||||
platforms: arm64
|
||||
|
||||
- name: Build flatpak
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
||||
env:
|
||||
FLATPAK_BUILDER_N_JOBS: 3
|
||||
with:
|
||||
manifest-path: share/org.getmonero.Monero.yaml
|
||||
arch: ${{ matrix.arch }}
|
||||
cache: false
|
||||
stop-at-module: boost
|
||||
|
||||
- name: Tar flatpak-builder
|
||||
run: tar -cvf flatpak-builder.tar .flatpak-builder
|
||||
|
||||
- name: Save flatpak-builder
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: flatpak-builder-${{ matrix.arch }}
|
||||
path: flatpak-builder.tar
|
||||
|
||||
part2:
|
||||
name: Part 2/3
|
||||
if: github.repository == 'monero-project/monero-gui'
|
||||
needs: part1
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: bilelmoussaoui/flatpak-github-actions:kde-5.15-22.08
|
||||
options: --privileged
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install deps
|
||||
run: dnf -y install docker
|
||||
|
||||
- name: Setup QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
with:
|
||||
platforms: arm64
|
||||
|
||||
- name: Restore flatpak-builder
|
||||
uses: actions/download-artifact@v4.1.7
|
||||
with:
|
||||
name: flatpak-builder-${{ matrix.arch }}
|
||||
|
||||
- name: Untar flatpak-builder
|
||||
run: tar -xvf flatpak-builder.tar
|
||||
|
||||
- name: Build flatpak
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
||||
env:
|
||||
FLATPAK_BUILDER_N_JOBS: 3
|
||||
with:
|
||||
manifest-path: share/org.getmonero.Monero.yaml
|
||||
arch: ${{ matrix.arch }}
|
||||
cache: false
|
||||
stop-at-module: monero-gui
|
||||
|
||||
- name: Tar flatpak-builder
|
||||
run: tar -cvf flatpak-builder.tar .flatpak-builder
|
||||
|
||||
- name: Save flatpak-builder
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: flatpak-builder-${{ matrix.arch }}
|
||||
path: flatpak-builder.tar
|
||||
|
||||
part3:
|
||||
name: Part 3/3
|
||||
if: github.repository == 'monero-project/monero-gui'
|
||||
needs: [part1, part2]
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: bilelmoussaoui/flatpak-github-actions:kde-5.15-22.08
|
||||
options: --privileged
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [x86_64, aarch64]
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Add version and date
|
||||
run: |
|
||||
sed -i 's/<version>/${{ github.event.release.tag_name }}/g' $GITHUB_WORKSPACE/share/org.getmonero.Monero.metainfo.xml
|
||||
sed -i 's/<date>/'"$(date '+%F')"'/g' $GITHUB_WORKSPACE/share/org.getmonero.Monero.metainfo.xml
|
||||
|
||||
- name: Install deps
|
||||
run: dnf -y install docker
|
||||
|
||||
- name: Setup QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
with:
|
||||
platforms: arm64
|
||||
|
||||
- name: Restore flatpak-builder
|
||||
uses: actions/download-artifact@v4.1.7
|
||||
with:
|
||||
name: flatpak-builder-${{ matrix.arch }}
|
||||
|
||||
- name: Untar flatpak-builder
|
||||
run: tar -xvf flatpak-builder.tar
|
||||
|
||||
- name: Build flatpak
|
||||
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
|
||||
env:
|
||||
FLATPAK_BUILDER_N_JOBS: 3
|
||||
with:
|
||||
manifest-path: share/org.getmonero.Monero.yaml
|
||||
arch: ${{ matrix.arch }}
|
||||
cache: false
|
||||
|
||||
- name: Validate AppData
|
||||
working-directory: flatpak_app/files/share/appdata
|
||||
run: appstream-util validate org.getmonero.Monero.appdata.xml
|
||||
|
||||
- name: Delete flatpak-builder
|
||||
uses: geekyeggo/delete-artifact@v2
|
||||
with:
|
||||
name: flatpak-builder-${{ matrix.arch }}
|
||||
|
||||
- name: Print hashes
|
||||
working-directory: flatpak_app/files/bin
|
||||
run: |
|
||||
echo "Hashes of the ${{ matrix.arch }} binaries:" >> $GITHUB_STEP_SUMMARY
|
||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
||||
for bin in monero-blockchain-ancestry monero-blockchain-depth monero-blockchain-export monero-blockchain-import monero-blockchain-mark-spent-outputs monero-blockchain-prune monero-blockchain-prune-known-spent-data monero-blockchain-stats monero-blockchain-usage monerod monero-gen-ssl-cert monero-gen-trusted-multisig monero-wallet-cli monero-wallet-gui monero-wallet-rpc p2pool; do sha256sum $bin; done >> $GITHUB_STEP_SUMMARY
|
||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "An example command to check hashes:" >> $GITHUB_STEP_SUMMARY
|
||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "$ flatpak run --command=sha256sum org.getmonero.Monero /app/bin/monero-wallet-gui" >> $GITHUB_STEP_SUMMARY
|
||||
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Publish to Flathub Beta
|
||||
uses: flatpak/flatpak-github-actions/flat-manager@v6
|
||||
with:
|
||||
flat-manager-url: https://hub.flathub.org
|
||||
repository: beta
|
||||
token: ${{ secrets.FLATHUB_ }}
|
||||
16
.github/workflows/verify_p2pool.yml
vendored
16
.github/workflows/verify_p2pool.yml
vendored
@@ -1,16 +0,0 @@
|
||||
name: ci/gh-actions/verify
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'src/p2pool/P2PoolManager.cpp'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'src/p2pool/P2PoolManager.cpp'
|
||||
jobs:
|
||||
p2pool-hashes:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Verify Hashes
|
||||
run: |
|
||||
python3 .github/verify_p2pool.py
|
||||
@@ -4,8 +4,8 @@ project(monero-gui)
|
||||
message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}")
|
||||
|
||||
set(VERSION_MAJOR "18")
|
||||
set(VERSION_MINOR "4")
|
||||
set(VERSION_REVISION "6")
|
||||
set(VERSION_MINOR "3")
|
||||
set(VERSION_REVISION "3")
|
||||
set(VERSION "0.${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
|
||||
|
||||
option(STATIC "Link libraries statically, requires static Qt")
|
||||
@@ -16,14 +16,6 @@ option(WITH_DESKTOP_ENTRY "Ask to install desktop entry on first startup" ON)
|
||||
option(WITH_UPDATER "Regularly check for new updates" ON)
|
||||
option(DEV_MODE "Checkout latest monero master on build" OFF)
|
||||
|
||||
if(DEV_MODE)
|
||||
# DEV_MODE checks out the monero submodule to master, which requires C++17.
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
else()
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
|
||||
include(CheckCCompilerFlag)
|
||||
include(CheckCXXCompilerFlag)
|
||||
@@ -68,7 +60,6 @@ set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
|
||||
get_directory_property(ARCH_WIDTH DIRECTORY "monero" DEFINITION ARCH_WIDTH)
|
||||
get_directory_property(Boost_VERSION_STRING DIRECTORY "monero" DEFINITION Boost_VERSION_STRING)
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
add_definitions(-DQT_NO_DEBUG)
|
||||
@@ -150,8 +141,6 @@ if(UNIX)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(QT_MIN_VERSION "5.12")
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
# TODO: drop this once we switch to Qt 5.14+
|
||||
@@ -160,13 +149,14 @@ if(Qt5QmlModels_PKG_CONFIG_FOUND)
|
||||
list(APPEND QT5_LIBRARIES Qt5QmlModels)
|
||||
endif()
|
||||
|
||||
# TODO: drop this once we switch to Qt 5.12+
|
||||
find_package(Qt5XmlPatterns QUIET)
|
||||
if(Qt5XmlPatterns_FOUND)
|
||||
list(APPEND QT5_LIBRARIES Qt5XmlPatterns)
|
||||
endif()
|
||||
|
||||
foreach(QT5_MODULE ${QT5_LIBRARIES})
|
||||
find_package(${QT5_MODULE} ${QT_MIN_VERSION} REQUIRED)
|
||||
find_package(${QT5_MODULE} REQUIRED)
|
||||
include_directories(${${QT5_MODULE}_INCLUDE_DIRS})
|
||||
endforeach()
|
||||
|
||||
@@ -366,7 +356,7 @@ if(APPLE)
|
||||
endif()
|
||||
|
||||
if (APPLE AND NOT IOS)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default -std=c++11")
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
@@ -452,7 +442,7 @@ message(STATUS "Using C++ security hardening flags: ${CXX_SECURITY_FLAGS}")
|
||||
message(STATUS "Using linker security hardening flags: ${LD_SECURITY_FLAGS}")
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 ${C_SECURITY_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_SECURITY_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${CXX_SECURITY_FLAGS}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LD_SECURITY_FLAGS} ${STATIC_FLAGS}")
|
||||
|
||||
add_subdirectory(translations)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Use macOS 10.12 - 10.13 for better backwards compability.
|
||||
|
||||
1. `HOMEBREW_OPTFLAGS="-march=core2" HOMEBREW_OPTIMIZATION_LEVEL="O0" brew install boost zmq libpgm miniupnpc libsodium expat libunwind-headers protobuf@21 libgcrypt hidapi libusb cmake pkg-config && brew link protobuf@21`
|
||||
1. `HOMEBREW_OPTFLAGS="-march=core2" HOMEBREW_OPTIMIZATION_LEVEL="O0" brew install boost zmq libpgm miniupnpc libsodium expat libunwind-headers protobuf libgcrypt hidapi`
|
||||
|
||||
2. Get the latest LTS from here: https://www.qt.io/offline-installers and install
|
||||
|
||||
@@ -12,7 +12,7 @@ Use macOS 10.12 - 10.13 for better backwards compability.
|
||||
|
||||
```bash
|
||||
mkdir build && cd build
|
||||
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=/path/to/Qt5.12.8/5.12.8/clang_64 ..
|
||||
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=~/Qt5.12.8/5.12.8/clang_64 ..
|
||||
make
|
||||
make deploy
|
||||
```
|
||||
@@ -40,9 +40,9 @@ You can check if this step worked by using `codesign -dvvv monero-wallet-gui.app
|
||||
|
||||
3. `hdiutil create -fs HFS+ -srcfolder monero-gui-v0.X.Y.Z -volname monero-wallet-gui monero-gui-mac-x64-v0.X.Y.Z.dmg`
|
||||
|
||||
4. `xcrun notarytool submit monero-gui-mac-x64-v0.X.Y.Z.dmg --apple-id email@address.org --team-id XXXXXXXXXX`
|
||||
4. `xcrun altool -t osx --file monero-gui-mac-x64-v0.X.Y.Z.dmg --primary-bundle-id org.monero-project.monero-wallet-gui.dmg --notarize-app --username email@address.org`
|
||||
|
||||
5. `xcrun notarytool info aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee --apple-id email@address.org --team-id XXXXXXXXXX`
|
||||
5. `xcrun altool --notarization-info aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee -u email@address.org`
|
||||
|
||||
6. `xcrun stapler staple -v monero-gui-mac-x64-v0.X.Y.Z.dmg`
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
FROM ubuntu:20.04
|
||||
FROM debian:buster
|
||||
|
||||
ARG THREADS=1
|
||||
ARG ANDROID_NDK_REVISION=23c
|
||||
ARG ANDROID_NDK_HASH=e5053c126a47e84726d9f7173a04686a71f9a67a
|
||||
ARG ANDROID_NDK_REVISION=21e
|
||||
ARG ANDROID_NDK_HASH=c3ebc83c96a4d7f539bd72c241b2be9dcd29bda9
|
||||
ARG ANDROID_SDK_REVISION=7302050_latest
|
||||
ARG ANDROID_SDK_HASH=7a00faadc0864f78edd8f4908a629a46d622375cbe2e5814e82934aebecdb622
|
||||
ARG QT_VERSION=v5.15.18-lts-lgpl
|
||||
ARG QT_VERSION=v5.15.7-lts-lgpl
|
||||
|
||||
WORKDIR /opt/android
|
||||
ENV WORKDIR=/opt/android
|
||||
|
||||
ENV ANDROID_NATIVE_API_LEVEL=31
|
||||
ENV ANDROID_NATIVE_API_LEVEL=30
|
||||
ENV ANDROID_API=android-${ANDROID_NATIVE_API_LEVEL}
|
||||
ENV ANDROID_CLANG=aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang
|
||||
ENV ANDROID_CLANGPP=aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++
|
||||
@@ -20,7 +20,6 @@ ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
|
||||
ENV PATH=${JAVA_HOME}/bin:${PATH}
|
||||
ENV PREFIX=${WORKDIR}/prefix
|
||||
ENV TOOLCHAIN_DIR=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y ant automake build-essential ca-certificates-java file gettext git libc6 libncurses5 \
|
||||
@@ -33,7 +32,7 @@ RUN PACKAGE_NAME=commandlinetools-linux-${ANDROID_SDK_REVISION}.zip \
|
||||
&& unzip -q ${PACKAGE_NAME} \
|
||||
&& rm -f ${PACKAGE_NAME}
|
||||
|
||||
RUN PACKAGE_NAME=android-ndk-r${ANDROID_NDK_REVISION}-linux.zip \
|
||||
RUN PACKAGE_NAME=android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip \
|
||||
&& wget -q https://dl.google.com/android/repository/${PACKAGE_NAME} \
|
||||
&& echo "${ANDROID_NDK_HASH} ${PACKAGE_NAME}" | sha1sum -c \
|
||||
&& unzip -q ${PACKAGE_NAME} \
|
||||
@@ -99,25 +98,27 @@ RUN wget -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${ICONV_VERSION}.tar.gz
|
||||
&& make -j${THREADS} \
|
||||
&& make -j${THREADS} install
|
||||
|
||||
ARG BOOST_VERSION=1_85_0
|
||||
ARG BOOST_VERSION_DOT=1.85.0
|
||||
ARG BOOST_HASH=7009fe1faa1697476bdc7027703a2badb84e849b7b0baad5086b087b971f8617
|
||||
RUN wget -q https://archives.boost.io/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.bz2 \
|
||||
ARG BOOST_VERSION=1_74_0
|
||||
ARG BOOST_VERSION_DOT=1.74.0
|
||||
ARG BOOST_HASH=83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff025e116b1
|
||||
RUN wget -q https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.bz2 \
|
||||
&& echo "${BOOST_HASH} boost_${BOOST_VERSION}.tar.bz2" | sha256sum -c \
|
||||
&& tar -xf boost_${BOOST_VERSION}.tar.bz2 \
|
||||
&& rm -f boost_${BOOST_VERSION}.tar.bz2 \
|
||||
&& cd boost_${BOOST_VERSION} \
|
||||
&& PATH=${HOST_PATH} ./bootstrap.sh --prefix=${PREFIX} \
|
||||
&& printf "using clang : arm : ${ANDROID_CLANGPP} :\n<cxxflags>\"-fPIC\"\n<cflags>\"-fPIC\" ;" > user.jam \
|
||||
&& PATH=${TOOLCHAIN_DIR}/bin:${HOST_PATH} ./b2 --build-type=minimal link=static runtime-link=static \
|
||||
--with-chrono --with-date_time --with-filesystem --with-program_options --with-regex --with-serialization \
|
||||
--with-system --with-thread --with-locale --build-dir=android --stagedir=android toolset=clang-arm threading=multi \
|
||||
threadapi=pthread target-os=android -sICONV_PATH=${PREFIX} --user-config=user.jam architecture=arm address-model=64 \
|
||||
--with-system --with-thread --with-locale --build-dir=android --stagedir=android toolset=clang threading=multi \
|
||||
threadapi=pthread target-os=android -sICONV_PATH=${PREFIX} \
|
||||
cflags='--target=aarch64-linux-android' \
|
||||
cxxflags='--target=aarch64-linux-android' \
|
||||
linkflags='--target=aarch64-linux-android --sysroot=${ANDROID_NDK_ROOT}/platforms/${ANDROID_API}/arch-arm64 ${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so -nostdlib++' \
|
||||
install -j${THREADS} \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
ARG OPENSSL_VERSION=1.1.1w
|
||||
ARG OPENSSL_HASH=cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8
|
||||
ARG OPENSSL_VERSION=1.1.1u
|
||||
ARG OPENSSL_HASH=e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6
|
||||
RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
|
||||
&& echo "${OPENSSL_HASH} openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c \
|
||||
&& tar -xzf openssl-${OPENSSL_VERSION}.tar.gz \
|
||||
@@ -132,9 +133,9 @@ RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
|
||||
&& make -j${THREADS} install \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
ARG EXPAT_VERSION=2.6.4
|
||||
ARG EXPAT_HASH=8dc480b796163d4436e6f1352e71800a774f73dbae213f1860b60607d2a83ada
|
||||
RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-${EXPAT_VERSION}.tar.bz2 && \
|
||||
ARG EXPAT_VERSION=2.4.1
|
||||
ARG EXPAT_HASH=2f9b6a580b94577b150a7d5617ad4643a4301a6616ff459307df3e225bcfbf40
|
||||
RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_4_1/expat-${EXPAT_VERSION}.tar.bz2 && \
|
||||
echo "${EXPAT_HASH} expat-${EXPAT_VERSION}.tar.bz2" | sha256sum -c && \
|
||||
tar -xf expat-${EXPAT_VERSION}.tar.bz2 && \
|
||||
rm expat-${EXPAT_VERSION}.tar.bz2 && \
|
||||
@@ -144,8 +145,8 @@ RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-${
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
ARG UNBOUND_VERSION=1.22.0
|
||||
ARG UNBOUND_HASH=c5dd1bdef5d5685b2cedb749158dd152c52d44f65529a34ac15cd88d4b1b3d43
|
||||
ARG UNBOUND_VERSION=1.16.2
|
||||
ARG UNBOUND_HASH=2e32f283820c24c51ca1dd8afecfdb747c7385a137abe865c99db4b257403581
|
||||
RUN wget https://www.nlnetlabs.nl/downloads/unbound/unbound-${UNBOUND_VERSION}.tar.gz && \
|
||||
echo "${UNBOUND_HASH} unbound-${UNBOUND_VERSION}.tar.gz" | sha256sum -c && \
|
||||
tar -xzf unbound-${UNBOUND_VERSION}.tar.gz && \
|
||||
@@ -156,8 +157,8 @@ RUN wget https://www.nlnetlabs.nl/downloads/unbound/unbound-${UNBOUND_VERSION}.t
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
ARG ZMQ_VERSION=v4.3.5
|
||||
ARG ZMQ_HASH=622fc6dde99ee172ebaa9c8628d85a7a1995a21d
|
||||
ARG ZMQ_VERSION=v4.3.4
|
||||
ARG ZMQ_HASH=4097855ddaaa65ed7b5e8cb86d143842a594eebd
|
||||
RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} --depth 1 \
|
||||
&& cd libzmq \
|
||||
&& git checkout ${ZMQ_HASH} \
|
||||
@@ -168,8 +169,8 @@ RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} --depth 1 \
|
||||
&& make -j${THREADS} install \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
ARG SODIUM_VERSION=1.0.20-RELEASE
|
||||
ARG SODIUM_HASH=9511c982fb1d046470a8b42aa36556cdb7da15de
|
||||
ARG SODIUM_VERSION=1.0.18
|
||||
ARG SODIUM_HASH=4f5e89fa84ce1d178a6765b8b46f2b6f91216677
|
||||
RUN set -ex \
|
||||
&& git clone https://github.com/jedisct1/libsodium.git -b ${SODIUM_VERSION} --depth 1 \
|
||||
&& cd libsodium \
|
||||
@@ -197,20 +198,23 @@ RUN git clone -b libgcrypt-1.10.1 --depth 1 git://git.gnupg.org/libgcrypt.git \
|
||||
&& make -j${THREADS} install \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
RUN git clone -b v3.31.4 --depth 1 https://github.com/Kitware/CMake \
|
||||
RUN git clone -b v3.24.2 --depth 1 https://github.com/Kitware/CMake \
|
||||
&& cd CMake \
|
||||
&& git reset --hard 569b821a138a4d3f7f4cc42c0cf5ae5e68d56f96 \
|
||||
&& git reset --hard 31f835410efeea50acd43512eb9e5646a26ea177 \
|
||||
&& PATH=${HOST_PATH} ./bootstrap \
|
||||
&& PATH=${HOST_PATH} make -j${THREADS} \
|
||||
&& PATH=${HOST_PATH} make -j${THREADS} install \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
# Workaround
|
||||
ENV NEW_SDK_ROOT=${WORKDIR}/sdk
|
||||
RUN mkdir ${NEW_SDK_ROOT} \
|
||||
&& cp -r ${ANDROID_SDK_ROOT}/licenses ${NEW_SDK_ROOT} \
|
||||
&& cp -r ${ANDROID_SDK_ROOT}/platforms ${NEW_SDK_ROOT} \
|
||||
&& cp -r ${ANDROID_SDK_ROOT}/build-tools ${NEW_SDK_ROOT}
|
||||
RUN GRADLE_VERSION=5.6.4 \
|
||||
&& GRADLE_HASH=1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d \
|
||||
&& wget -q https\://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \
|
||||
&& echo "${GRADLE_HASH} gradle-${GRADLE_VERSION}-bin.zip" | sha256sum -c \
|
||||
&& GRADLE_LOCAL_PATH=gradle/wrapper/dists/gradle-${GRADLE_VERSION}-bin/bxirm19lnfz6nurbatndyydux \
|
||||
&& mkdir -p ${GRADLE_LOCAL_PATH} \
|
||||
&& mv gradle-${GRADLE_VERSION}-bin.zip ${GRADLE_LOCAL_PATH}
|
||||
|
||||
ENV GRADLE_USER_HOME=${WORKDIR}/gradle
|
||||
|
||||
CMD set -ex \
|
||||
&& cd /monero-gui \
|
||||
@@ -228,12 +232,10 @@ CMD set -ex \
|
||||
-DBoost_USE_STATIC_RUNTIME=ON \
|
||||
-DLRELEASE_PATH="${PREFIX}/bin" \
|
||||
-DQT_ANDROID_APPLICATION_BINARY="monero-wallet-gui" \
|
||||
-DANDROID_SDK="${NEW_SDK_ROOT}" \
|
||||
-DANDROID_SDK="${ANDROID_SDK_ROOT}" \
|
||||
-DWITH_SCANNER=ON \
|
||||
-DWITH_DESKTOP_ENTRY=OFF \
|
||||
../../.. \
|
||||
&& PATH=${HOST_PATH} make generate_translations_header \
|
||||
&& sed -i -e "s#../monero/external/randomx/librandomx.a##" src/CMakeFiles/monero-wallet-gui.dir/link.txt \
|
||||
&& sed -i -e "s#-lm#-lm ../monero/external/randomx/librandomx.a#" src/CMakeFiles/monero-wallet-gui.dir/link.txt \
|
||||
&& make -j${THREADS} -C src \
|
||||
&& make -j${THREADS} apk
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
FROM ubuntu:18.04
|
||||
FROM ubuntu:16.04
|
||||
|
||||
ARG THREADS=1
|
||||
ARG QT_VERSION=v5.15.18-lts-lgpl
|
||||
ARG QT_VERSION=v5.15.13-lts-lgpl
|
||||
|
||||
ENV CFLAGS="-fPIC"
|
||||
ENV CPPFLAGS="-fPIC"
|
||||
@@ -10,7 +10,7 @@ ENV SOURCE_DATE_EPOCH=1397818193
|
||||
|
||||
RUN apt update && \
|
||||
apt install -y automake autopoint bison gettext git gperf libgl1-mesa-dev libglib2.0-dev \
|
||||
libpng-dev libpthread-stubs0-dev libsodium-dev libtool-bin libudev-dev libusb-1.0-0-dev mesa-common-dev \
|
||||
libpng12-dev libpthread-stubs0-dev libsodium-dev libtool-bin libudev-dev libusb-1.0-0-dev mesa-common-dev \
|
||||
pkg-config python wget xutils-dev
|
||||
|
||||
RUN git clone -b xorgproto-2020.1 --depth 1 https://gitlab.freedesktop.org/xorg/proto/xorgproto && \
|
||||
@@ -121,8 +121,8 @@ RUN git clone -b v1.3 --depth 1 https://github.com/madler/zlib && \
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
RUN git clone -b VER-2-10-2 --depth 1 https://gitlab.freedesktop.org/freetype/freetype.git && \
|
||||
cd freetype && \
|
||||
RUN git clone -b VER-2-10-2 --depth 1 https://git.savannah.gnu.org/git/freetype/freetype2.git && \
|
||||
cd freetype2 && \
|
||||
git reset --hard 132f19b779828b194b3fede187cee719785db4d8 && \
|
||||
./autogen.sh && \
|
||||
./configure --disable-shared --enable-static --with-zlib=no && \
|
||||
@@ -156,7 +156,7 @@ RUN git clone -b release-64-2 --depth 1 https://github.com/unicode-org/icu && \
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
RUN wget https://archives.boost.io/release/1.80.0/source/boost_1_80_0.tar.gz && \
|
||||
RUN wget https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz && \
|
||||
echo "4b2136f98bdd1f5857f1c3dea9ac2018effe65286cf251534b6ae20cc45e1847 boost_1_80_0.tar.gz" | sha256sum -c && \
|
||||
tar -xzf boost_1_80_0.tar.gz && \
|
||||
rm boost_1_80_0.tar.gz && \
|
||||
@@ -233,9 +233,9 @@ RUN git clone -b v1.0.26 --depth 1 https://github.com/libusb/libusb && \
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
RUN git clone -b hidapi-0.15.0 --depth 1 https://github.com/libusb/hidapi && \
|
||||
RUN git clone -b hidapi-0.13.1 --depth 1 https://github.com/libusb/hidapi && \
|
||||
cd hidapi && \
|
||||
git reset --hard d6b2a974608dec3b76fb1e36c189f22b9cf3650c && \
|
||||
git reset --hard 4ebce6b5059b086d05ca7e091ce04a5fd08ac3ac && \
|
||||
./bootstrap && \
|
||||
./configure --disable-shared --enable-static && \
|
||||
make -j$THREADS && \
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
FROM ubuntu:20.04
|
||||
|
||||
ARG THREADS=1
|
||||
ARG QT_VERSION=v5.15.18-lts-lgpl
|
||||
ARG QT_VERSION=v5.15.13-lts-lgpl
|
||||
ENV SOURCE_DATE_EPOCH=1397818193
|
||||
|
||||
RUN apt update && \
|
||||
@@ -12,9 +12,9 @@ RUN apt update && \
|
||||
RUN update-alternatives --set x86_64-w64-mingw32-g++ $(which x86_64-w64-mingw32-g++-posix) && \
|
||||
update-alternatives --set x86_64-w64-mingw32-gcc $(which x86_64-w64-mingw32-gcc-posix)
|
||||
|
||||
RUN git clone -b v0.18.4.6 --depth 1 https://github.com/monero-project/monero && \
|
||||
RUN git clone -b v0.18.2.0 --depth 1 https://github.com/monero-project/monero && \
|
||||
cd monero && \
|
||||
git reset --hard dbcc7d212c094bd1a45f7291dbb99a4b4627a96d && \
|
||||
git reset --hard 99be9a044f3854f339548e2d99c539c18d7b1b01 && \
|
||||
cp -a contrib/depends / && \
|
||||
cd .. && \
|
||||
rm -rf monero
|
||||
|
||||
17
README.md
17
README.md
@@ -60,7 +60,9 @@ The Bitcoin donation address is: `1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H`
|
||||
GUI development funding and/or some supporting services are also graciously provided by [sponsors](https://www.getmonero.org/community/sponsorships/):
|
||||
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/tarilabs.png"/>](https://tarilabs.com/)
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/globee.png"/>](https://globee.com/)
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/symas.png"/>](https://symas.com/)
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/forked_logo.png"/>](http://www.forked.net/)
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/macstadium.png"/>](https://www.macstadium.com/)
|
||||
|
||||
There are also several mining pools that kindly donate a portion of their fees, [a list of them can be found on our Bitcointalk post](https://bitcointalk.org/index.php?topic=583449.0).
|
||||
@@ -94,9 +96,9 @@ Packaging for your favorite distribution would be a welcome contribution!
|
||||
|
||||
## Compiling the Monero GUI from source
|
||||
|
||||
*Note*: Qt 5.12 is the minimum version required to build the GUI.
|
||||
*Note*: Qt 5.9.7 is the minimum version required to build the GUI.
|
||||
|
||||
*Note*: Official GUI releases use monero-wallet-gui from this process alongside the supporting binaries (monerod, etc) from the [CLI deterministic builds](https://github.com/monero-project/monero/blob/release-v0.18/contrib/gitian/README.md).
|
||||
*Note*: Official GUI releases use monero-wallet-gui from this process alongside the supporting binaries (monerod, etc) from the [CLI deterministic builds](https://github.com/monero-project/monero/blob/master/contrib/gitian/README.md).
|
||||
|
||||
### Building Reproducible Windows static binaries with Docker (any OS)
|
||||
|
||||
@@ -105,7 +107,7 @@ Packaging for your favorite distribution would be a welcome contribution!
|
||||
```
|
||||
git clone --branch master --recursive https://github.com/monero-project/monero-gui.git
|
||||
```
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.4.6`) to build the release binaries.
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.3.3`) to build the release binaries.
|
||||
3. Prepare build environment
|
||||
```
|
||||
cd monero-gui
|
||||
@@ -128,7 +130,7 @@ Packaging for your favorite distribution would be a welcome contribution!
|
||||
```
|
||||
git clone --branch master --recursive https://github.com/monero-project/monero-gui.git
|
||||
```
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.4.6`) to build the release binaries.
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.3.3`) to build the release binaries.
|
||||
3. Prepare build environment
|
||||
```
|
||||
cd monero-gui
|
||||
@@ -142,9 +144,8 @@ Packaging for your favorite distribution would be a welcome contribution!
|
||||
```
|
||||
\* `<MONERO_GUI_DIR_FULL_PATH>` - absolute path to `monero-gui` directory
|
||||
\* `4` - number of CPU threads to use
|
||||
5. Monero GUI Linux static binary will be placed in `monero-gui/build/release/bin` directory
|
||||
6. (*Note*) This process is only for building `monero-wallet-gui`, `monerod` has to be built separately according to the instructions in the `monero` repository.
|
||||
7. (*Optional*) Compare `monero-wallet-gui` SHA-256 hash to the one obtained from a trusted source
|
||||
5. Monero GUI Linux static binaries will be placed in `monero-gui/build/release/bin` directory
|
||||
6. (*Optional*) Compare `monero-wallet-gui` SHA-256 hash to the one obtained from a trusted source
|
||||
```
|
||||
docker run --rm -it -v <MONERO_GUI_DIR_FULL_PATH>:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'shasum -a 256 /monero-gui/build/release/bin/monero-wallet-gui'
|
||||
```
|
||||
@@ -309,7 +310,7 @@ The Monero GUI on Windows is 64 bits only; 32-bit Windows GUI builds are not off
|
||||
3. Install MSYS2 packages for Monero dependencies; the needed 64-bit packages have `x86_64` in their names
|
||||
|
||||
```
|
||||
pacman -S mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb mingw-w64-x86_64-libgcrypt mingw-w64-x86_64-unbound mingw-w64-x86_64-pcre mingw-w64-x86_64-angleproject
|
||||
pacman -S mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb mingw-w64-x86_64-libgcrypt mingw-w64-x86_64-unbound mingw-w64-x86_64-pcre
|
||||
```
|
||||
|
||||
You find more details about those dependencies in the [Monero documentation](https://github.com/monero-project/monero). Note that that there is no more need to compile Boost from source; like everything else, you can install it now with a MSYS2 package.
|
||||
|
||||
@@ -26,19 +26,16 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
||||
)
|
||||
endif()
|
||||
|
||||
# Copy Boost dylibs that macdeployqt doesn't pick up
|
||||
find_package(Boost QUIET COMPONENTS atomic container date_time)
|
||||
set(_boost_extras Boost::atomic Boost::container Boost::date_time)
|
||||
foreach(_tgt IN LISTS _boost_extras)
|
||||
if(TARGET ${_tgt})
|
||||
add_custom_command(TARGET deploy POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"$<TARGET_FILE:${_tgt}>"
|
||||
"$<TARGET_FILE_DIR:monero-wallet-gui>/../Frameworks/"
|
||||
COMMENT "Copying $<TARGET_FILE_NAME:${_tgt}>"
|
||||
)
|
||||
endif()
|
||||
endforeach()
|
||||
# libbost_filesyste-mt.dylib has a dependency on libboost_atomic-mt.dylib, maydeployqt does not copy it by itself
|
||||
find_package(Boost COMPONENTS atomic)
|
||||
get_target_property(BOOST_ATOMIC_LIB_PATH Boost::atomic LOCATION)
|
||||
if(EXISTS ${BOOST_ATOMIC_LIB_PATH})
|
||||
add_custom_command(TARGET deploy
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${BOOST_ATOMIC_LIB_PATH}" "$<TARGET_FILE_DIR:monero-wallet-gui>/../Frameworks/"
|
||||
COMMENT "Copying libboost_atomic-mt.dylib"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Apple Silicon requires all binaries to be codesigned
|
||||
find_program(CODESIGN_EXECUTABLE NAMES codesign)
|
||||
@@ -51,12 +48,8 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
||||
endif()
|
||||
|
||||
elseif(WIN32)
|
||||
find_program(QMAKE_EXECUTABLE qmake HINTS "${_qt_bin_dir}")
|
||||
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}")
|
||||
if(NOT QMAKE_EXECUTABLE OR NOT WINDEPLOYQT_EXECUTABLE)
|
||||
message(WARNING "Deploy requires qmake.exe and windeployqt.exe (no -qt5 suffix) in ${_qt_bin_dir}")
|
||||
endif()
|
||||
add_custom_command(TARGET deploy POST_BUILD
|
||||
add_custom_command(TARGET monero-wallet-gui POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}" "$<TARGET_FILE:monero-wallet-gui>" -no-translations -qmldir="${CMAKE_SOURCE_DIR}"
|
||||
COMMENT "Running windeployqt..."
|
||||
)
|
||||
@@ -65,6 +58,7 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
||||
libboost_filesystem-mt.dll
|
||||
libboost_locale-mt.dll
|
||||
libboost_program_options-mt.dll
|
||||
libboost_regex-mt.dll
|
||||
libboost_serialization-mt.dll
|
||||
libboost_thread-mt.dll
|
||||
libprotobuf.dll
|
||||
@@ -103,18 +97,12 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
||||
libssl-3-x64.dll
|
||||
libcrypto-3-x64.dll
|
||||
#icu
|
||||
libicudt78.dll
|
||||
libicuin78.dll
|
||||
libicuio78.dll
|
||||
libicutu78.dll
|
||||
libicuuc78.dll
|
||||
libicudt74.dll
|
||||
libicuin74.dll
|
||||
libicuio74.dll
|
||||
libicutu74.dll
|
||||
libicuuc74.dll
|
||||
)
|
||||
|
||||
# Boost Regex is header-only since 1.77
|
||||
if (Boost_VERSION_STRING VERSION_LESS 1.77.0)
|
||||
list(APPEND WIN_DEPLOY_DLLS libboost_regex-mt.dll)
|
||||
endif()
|
||||
|
||||
list(TRANSFORM WIN_DEPLOY_DLLS PREPEND "$ENV{MSYSTEM_PREFIX}/bin/")
|
||||
add_custom_command(TARGET deploy
|
||||
POST_BUILD
|
||||
|
||||
@@ -38,7 +38,7 @@ import "." as MoneroComponents
|
||||
import "effects/" as MoneroEffects
|
||||
import "../js/Utils.js" as Utils
|
||||
|
||||
FocusScope {
|
||||
Item {
|
||||
id: root
|
||||
visible: false
|
||||
|
||||
@@ -50,7 +50,6 @@ FocusScope {
|
||||
property bool passwordDialogMode
|
||||
property bool passphraseDialogMode
|
||||
property bool newPasswordDialogMode
|
||||
property bool backgroundSyncing
|
||||
|
||||
// same signals as Dialog has
|
||||
signal accepted()
|
||||
@@ -65,6 +64,8 @@ FocusScope {
|
||||
capsLockTextLabel.visible = oshelper.isCapsLock();
|
||||
passwordInput1.reset();
|
||||
passwordInput2.reset();
|
||||
if(!appWindow.currentWallet || appWindow.active)
|
||||
passwordInput1.input.forceActiveFocus();
|
||||
root.walletName = walletName ? walletName : ""
|
||||
errorTextLabel.text = errorText ? errorText : "";
|
||||
leftPanel.enabled = false
|
||||
@@ -74,14 +75,12 @@ FocusScope {
|
||||
root.visible = true;
|
||||
appWindow.hideBalanceForced = true;
|
||||
appWindow.updateBalance();
|
||||
Qt.callLater(() => passwordInput1.input.forceActiveFocus())
|
||||
}
|
||||
|
||||
function open(walletName, errorText, okButtonText, okButtonIcon, backgroundSyncOn) {
|
||||
function open(walletName, errorText, okButtonText, okButtonIcon) {
|
||||
passwordDialogMode = true;
|
||||
passphraseDialogMode = false;
|
||||
newPasswordDialogMode = false;
|
||||
backgroundSyncing = backgroundSyncOn || false;
|
||||
root.okButtonText = okButtonText;
|
||||
root.okButtonIcon = okButtonIcon ? okButtonIcon : "";
|
||||
_openInit(walletName, errorText);
|
||||
@@ -91,7 +90,6 @@ FocusScope {
|
||||
passwordDialogMode = false;
|
||||
passphraseDialogMode = true;
|
||||
newPasswordDialogMode = false;
|
||||
backgroundSyncing = false;
|
||||
_openInit("", "");
|
||||
}
|
||||
|
||||
@@ -99,7 +97,6 @@ FocusScope {
|
||||
passwordDialogMode = false;
|
||||
passphraseDialogMode = false;
|
||||
newPasswordDialogMode = true;
|
||||
backgroundSyncing = false;
|
||||
_openInit("", "");
|
||||
}
|
||||
|
||||
@@ -207,13 +204,12 @@ FocusScope {
|
||||
font.family: MoneroComponents.Style.fontLight.name
|
||||
Layout.fillWidth: true
|
||||
wrapMode: Text.Wrap
|
||||
text: qsTr("CAPS LOCK IS ON.") + translationManager.emptyString;
|
||||
text: qsTr("CAPSLOCKS IS ON.") + translationManager.emptyString;
|
||||
}
|
||||
|
||||
MoneroComponents.LineEdit {
|
||||
id: passwordInput1
|
||||
password: true
|
||||
input.focus: root.visible && (appWindow.active || Qt.application.state === Qt.ApplicationActive)
|
||||
Layout.topMargin: 6
|
||||
Layout.fillWidth: true
|
||||
KeyNavigation.tab: {
|
||||
@@ -304,18 +300,6 @@ FocusScope {
|
||||
onClicked: onOk()
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
visible: backgroundSyncing
|
||||
text: qsTr("Syncing in the background...") + translationManager.emptyString;
|
||||
Layout.fillWidth: true
|
||||
|
||||
font.pixelSize: 14
|
||||
font.family: MoneroComponents.Style.fontLight.name
|
||||
font.italic: true
|
||||
|
||||
color: MoneroComponents.Style.defaultFontColor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 56 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 418 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 305 KiB |
@@ -23,7 +23,7 @@ You would think timestamp preservation is no problem when unpacking the zip arch
|
||||
|
||||
In any case, after unpacking, check the file dates in the `bin` directory where the installer script looks for them with the dates of the files in the zip file: They must be identical.
|
||||
|
||||
Note that the following line in `Monero.iss` is also important regarding file timestamps:
|
||||
Note that the the following line in `Monero.iss` is also important regarding file timestamps:
|
||||
|
||||
TimeStampsInUTC=yes
|
||||
|
||||
|
||||
@@ -21,6 +21,7 @@ function addressTruncatePretty(address, blocks){
|
||||
if(typeof(address) === "undefined") return "";
|
||||
if(typeof(blocks) === "undefined") blocks = 2;
|
||||
blocks = blocks <= 1 ? 1 : blocks >= 23 ? 23 : blocks;
|
||||
var ret = "";
|
||||
return address.substring(0, 4 * blocks).match(/.{1,4}/g).join(' ') + " .. " + address.substring(address.length - 4 * blocks).match(/.{1,4}/g).join(' ');
|
||||
}
|
||||
|
||||
@@ -69,7 +70,7 @@ function checkSignature(signature) {
|
||||
}
|
||||
|
||||
function isValidOpenAliasAddress(address) {
|
||||
var regex = /^[A-Za-z0-9-@]+(\.[A-Za-z0-9-]+)+$/; // Basic domain structure, allow email-like address
|
||||
var regex = /^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+$/; // Basic domain structure
|
||||
|
||||
if (!regex.test(address)) {
|
||||
return false;
|
||||
|
||||
@@ -53,7 +53,7 @@ function ago(epoch) {
|
||||
// Returns '<delta> [seconds|minutes|hours|days] ago' string given an epoch
|
||||
|
||||
var now = new Date().getTime() / 1000;
|
||||
var delta = Math.max(now - epoch, 0);
|
||||
var delta = now - epoch;
|
||||
|
||||
if(delta < 60)
|
||||
return qsTr("%n second(s) ago", "0", Math.floor(delta))
|
||||
|
||||
@@ -166,7 +166,7 @@ function getApproximateBlockchainHeight(_date, _nettype){
|
||||
|
||||
if(_nettype == "Testnet" || _nettype == "Stagenet"){
|
||||
// testnet got some huge rollbacks, so the estimation is way off
|
||||
var approximateTestnetRolledBackBlocks = _nettype == "Testnet" ? 342100 : _nettype == "Stagenet" ? 60000 : 30000;
|
||||
var approximateTestnetRolledBackBlocks = _nettype == "Testnet" ? 342100 : 30000;
|
||||
if(approxBlockchainHeight > approximateTestnetRolledBackBlocks)
|
||||
approxBlockchainHeight -= approximateTestnetRolledBackBlocks
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -22,7 +22,7 @@ Lojban
|
||||
<!-- <language display_name="English (ZA)" locale="en_SA" wallet_language="English" flag="/lang/flags/za.png" qs="none"/> -->
|
||||
<!-- <language display_name="العربية (PS)" locale="ar_PS" wallet_language="English" flag="/lang/flags/ps.png" qs="none"/> -->
|
||||
<language display_name="Deutsch" locale="de_DE" wallet_language="Deutsch" flag="/lang/flags/de.png" qs="none"/>
|
||||
<language display_name="Esperanto" locale="eo_EO" wallet_language="Esperanto" flag="/lang/flags/eo.png" qs="none"/>
|
||||
<language display_name="Esperanto" locale="eo" wallet_language="Esperanto" flag="/lang/flags/esperanto.png" qs="none"/>
|
||||
<language display_name="Español" locale="es_ES" wallet_language="Español" flag="/lang/flags/es.png" qs="none"/>
|
||||
<language display_name="Français" locale="fr_FR" wallet_language="Français" flag="/lang/flags/fr.png" qs="none"/>
|
||||
<language display_name="Svenska" locale="sv_SE" wallet_language="English" flag="/lang/flags/se.png" qs="none"/>
|
||||
|
||||
122
main.qml
122
main.qml
@@ -94,13 +94,11 @@ ApplicationWindow {
|
||||
readonly property string localDaemonAddress : "localhost:" + getDefaultDaemonRpcPort(persistentSettings.nettype)
|
||||
property string currentDaemonAddress;
|
||||
property int disconnectedEpoch: 0
|
||||
property int estimatedBlockchainSize: persistentSettings.pruneBlockchain ? 110 : 270 // GB
|
||||
property int estimatedBlockchainSize: persistentSettings.pruneBlockchain ? 55 : 150 // GB
|
||||
property alias viewState: rootItem.state
|
||||
property string prevSplashText;
|
||||
property bool splashDisplayedBeforeButtonRequest;
|
||||
property bool themeTransition: false
|
||||
property int backgroundSyncType: Wallet.BackgroundSync_Off;
|
||||
property bool isQuitting: false
|
||||
|
||||
// fiat price conversion
|
||||
property real fiatPrice: 0
|
||||
@@ -135,12 +133,6 @@ ApplicationWindow {
|
||||
}
|
||||
|
||||
function lock() {
|
||||
if (currentWallet && currentWallet.getBackgroundSyncType() != Wallet.BackgroundSync_Off) {
|
||||
appWindow.showProcessingSplash(qsTr("Locking..."));
|
||||
currentWallet.startBackgroundSync()
|
||||
return;
|
||||
}
|
||||
|
||||
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
|
||||
passwordDialog.onAcceptedCallback = function() {
|
||||
if(walletPassword === passwordDialog.password)
|
||||
@@ -283,15 +275,6 @@ ApplicationWindow {
|
||||
persistentSettings.kdfRounds);
|
||||
}
|
||||
|
||||
function gracefulQuit() {
|
||||
if (isQuitting)
|
||||
return;
|
||||
isQuitting = true;
|
||||
closeWallet(function() {
|
||||
Qt.quit();
|
||||
})
|
||||
}
|
||||
|
||||
function closeWallet(callback) {
|
||||
|
||||
// Disconnect all listeners
|
||||
@@ -305,9 +288,6 @@ ApplicationWindow {
|
||||
currentWallet.heightRefreshed.disconnect(onHeightRefreshed);
|
||||
currentWallet.refreshed.disconnect(onWalletRefresh)
|
||||
currentWallet.updated.disconnect(onWalletUpdate)
|
||||
currentWallet.backgroundSyncSetup.disconnect(onBackgroundSyncSetup)
|
||||
currentWallet.backgroundSyncStarted.disconnect(onBackgroundSyncStarted)
|
||||
currentWallet.backgroundSyncStopped.disconnect(onBackgroundSyncStopped)
|
||||
currentWallet.newBlock.disconnect(onWalletNewBlock)
|
||||
currentWallet.moneySpent.disconnect(onWalletMoneySent)
|
||||
currentWallet.moneyReceived.disconnect(onWalletMoneyReceived)
|
||||
@@ -344,7 +324,6 @@ ApplicationWindow {
|
||||
walletName = usefulName(wallet.path)
|
||||
|
||||
viewOnly = currentWallet.viewOnly;
|
||||
backgroundSyncType = currentWallet.getBackgroundSyncType();
|
||||
|
||||
// New wallets saves the testnet flag in keys file.
|
||||
if(persistentSettings.nettype != currentWallet.nettype) {
|
||||
@@ -356,9 +335,6 @@ ApplicationWindow {
|
||||
currentWallet.heightRefreshed.connect(onHeightRefreshed);
|
||||
currentWallet.refreshed.connect(onWalletRefresh)
|
||||
currentWallet.updated.connect(onWalletUpdate)
|
||||
currentWallet.backgroundSyncSetup.connect(onBackgroundSyncSetup)
|
||||
currentWallet.backgroundSyncStarted.connect(onBackgroundSyncStarted)
|
||||
currentWallet.backgroundSyncStopped.connect(onBackgroundSyncStopped)
|
||||
currentWallet.newBlock.connect(onWalletNewBlock)
|
||||
currentWallet.moneySpent.connect(onWalletMoneySent)
|
||||
currentWallet.moneyReceived.connect(onWalletMoneyReceived)
|
||||
@@ -568,15 +544,6 @@ ApplicationWindow {
|
||||
}
|
||||
}
|
||||
|
||||
// Don't allow opening background wallets in the GUI
|
||||
if (wallet.isBackgroundWallet()) {
|
||||
passwordDialog.onCancel();
|
||||
appWindow.showStatusMessage(qsTr("Can't open background wallets in the GUI"),6);
|
||||
console.log("closing background wallet");
|
||||
closeWallet();
|
||||
return;
|
||||
}
|
||||
|
||||
// wallet opened successfully, subscribing for wallet updates
|
||||
connectWallet(wallet)
|
||||
|
||||
@@ -618,17 +585,16 @@ ApplicationWindow {
|
||||
devicePassphraseDialog.open(on_device)
|
||||
}
|
||||
|
||||
function onWalletUpdate(stoppedBackgroundSync) {
|
||||
function onWalletUpdate() {
|
||||
if (!currentWallet)
|
||||
return;
|
||||
|
||||
console.log(">>> wallet updated")
|
||||
updateBalance();
|
||||
// Update history if new block found since last update or background sync was just stopped
|
||||
if(foundNewBlock || stoppedBackgroundSync) {
|
||||
if (foundNewBlock)
|
||||
console.log("New block found - updating history")
|
||||
// Update history if new block found since last update
|
||||
if(foundNewBlock) {
|
||||
foundNewBlock = false;
|
||||
console.log("New block found - updating history")
|
||||
currentWallet.history.refresh(currentWallet.currentSubaddressAccount)
|
||||
|
||||
if(middlePanel.state == "History")
|
||||
@@ -636,61 +602,6 @@ ApplicationWindow {
|
||||
}
|
||||
}
|
||||
|
||||
function onBackgroundSyncSetup() {
|
||||
console.log(">>> background sync setup");
|
||||
hideProcessingSplash();
|
||||
if (currentWallet.status !== Wallet.Status_Ok) {
|
||||
console.error("Error setting up background sync: ", currentWallet.errorString);
|
||||
appWindow.showStatusMessage(currentWallet.errorString, 5);
|
||||
return;
|
||||
}
|
||||
appWindow.backgroundSyncType = currentWallet.getBackgroundSyncType();
|
||||
}
|
||||
|
||||
function onBackgroundSyncStarted() {
|
||||
console.log(">>> background sync started");
|
||||
hideProcessingSplash();
|
||||
var started = currentWallet.status === Wallet.Status_Ok;
|
||||
if (!started) {
|
||||
console.error("Error starting background sync: ", currentWallet.errorString);
|
||||
appWindow.showStatusMessage(currentWallet.errorString, 5);
|
||||
}
|
||||
|
||||
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
|
||||
passwordDialog.onAcceptedCallback = function() {
|
||||
if(walletPassword === passwordDialog.password) {
|
||||
if (currentWallet && started) {
|
||||
appWindow.showProcessingSplash(qsTr("Unlocking..."));
|
||||
currentWallet.stopBackgroundSync(walletPassword);
|
||||
} else {
|
||||
passwordDialog.close();
|
||||
}
|
||||
} else {
|
||||
passwordDialog.showError(qsTr("Wrong password") + translationManager.emptyString);
|
||||
}
|
||||
}
|
||||
passwordDialog.open(usefulName(persistentSettings.wallet_path), "", "", "", started);
|
||||
}
|
||||
|
||||
function onBackgroundSyncStopped() {
|
||||
console.log(">>> background sync stopped");
|
||||
var stopped = currentWallet.status === Wallet.Status_Ok;
|
||||
if (!stopped) {
|
||||
hideProcessingSplash();
|
||||
console.error("Error stopping background sync: ", currentWallet.errorString);
|
||||
|
||||
// If there is an error stopping background sync, the spend key
|
||||
// won't be loaded and the wallet will be in a broken state. Don't
|
||||
// let the user continue normal wallet operations in this state.
|
||||
passwordDialog.showError(qsTr("Error stopping background sync: ") + currentWallet.errorString);
|
||||
return;
|
||||
}
|
||||
|
||||
onWalletUpdate(stopped);
|
||||
hideProcessingSplash();
|
||||
passwordDialog.close();
|
||||
}
|
||||
|
||||
function connectRemoteNode() {
|
||||
console.log("connecting remote node");
|
||||
|
||||
@@ -1747,7 +1658,7 @@ ApplicationWindow {
|
||||
onRejected: console.log("data dir selection canceled")
|
||||
onAccepted: {
|
||||
var dataDir = walletManager.urlToLocalPath(blockchainFileDialog.fileUrl)
|
||||
var validator = daemonManager.validateDataDir(dataDir, estimatedBlockchainSize);
|
||||
var validator = daemonManager.validateDataDir(dataDir);
|
||||
if(validator.valid) {
|
||||
persistentSettings.blockchainDataDir = dataDir;
|
||||
} else {
|
||||
@@ -2347,20 +2258,6 @@ ApplicationWindow {
|
||||
var inactivity = Utils.epoch() - appWindow.userLastActive;
|
||||
if(inactivity < (persistentSettings.lockOnUserInActivityInterval * 60)) return;
|
||||
|
||||
if (inputDialogVisible) inputDialog.close()
|
||||
remoteNodeDialog.close();
|
||||
informationPopup.close()
|
||||
txConfirmationPopup.close()
|
||||
txConfirmationPopup.clearFields()
|
||||
txConfirmationPopup.rejected()
|
||||
successfulTxPopup.close();
|
||||
|
||||
if (currentWallet && currentWallet.getBackgroundSyncType() != Wallet.BackgroundSync_Off) {
|
||||
appWindow.showProcessingSplash(qsTr("Locking..."));
|
||||
currentWallet.startBackgroundSync()
|
||||
return;
|
||||
}
|
||||
|
||||
passwordDialog.onAcceptedCallback = function() {
|
||||
if(walletPassword === passwordDialog.password){
|
||||
passwordDialog.close();
|
||||
@@ -2373,6 +2270,13 @@ ApplicationWindow {
|
||||
}
|
||||
|
||||
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
|
||||
if (inputDialogVisible) inputDialog.close()
|
||||
remoteNodeDialog.close();
|
||||
informationPopup.close()
|
||||
txConfirmationPopup.close()
|
||||
txConfirmationPopup.clearFields()
|
||||
txConfirmationPopup.rejected()
|
||||
successfulTxPopup.close();
|
||||
passwordDialog.open();
|
||||
}
|
||||
|
||||
|
||||
2
monero
2
monero
Submodule monero updated: dbcc7d212c...81d4db08eb
@@ -1447,6 +1447,7 @@ Rectangle {
|
||||
var txs = [];
|
||||
for (var i = 0; i < root.txData.length; i++){
|
||||
var item = root.txData[i];
|
||||
var matched = "";
|
||||
|
||||
// daterange filtering
|
||||
if(item.timestamp < fromDate || item.timestamp > toDate){
|
||||
@@ -1542,7 +1543,6 @@ Rectangle {
|
||||
function updateTransactionsFromModel() {
|
||||
// This function copies the items of `appWindow.currentWallet.historyModel` to `root.txModelData`, as a list of javascript objects
|
||||
if(currentWallet == null || typeof currentWallet.history === "undefined" ) return;
|
||||
if(currentWallet.isBackgroundSyncing()) return;
|
||||
|
||||
var _model = root.model;
|
||||
var total = 0
|
||||
|
||||
@@ -384,7 +384,6 @@ Rectangle {
|
||||
|
||||
ListElement { column1: qsTr("Mini") ; column2: ""; priority: 0}
|
||||
ListElement { column1: qsTr("Main") ; column2: ""; priority: 1}
|
||||
ListElement { column1: qsTr("Nano") ; column2: ""; priority: 2}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
@@ -401,7 +400,7 @@ Rectangle {
|
||||
|
||||
MoneroComponents.Tooltip {
|
||||
id: chainsHelpTooltip
|
||||
text: qsTr("Use the mini or nano chains if you have a low hashrate.") + translationManager.emptyString
|
||||
text: qsTr("Use the mini chain if you have a low hashrate.") + translationManager.emptyString
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
@@ -449,43 +448,26 @@ Rectangle {
|
||||
id: flagsHelpTooltip
|
||||
text: "
|
||||
Usage:<br>
|
||||
--wallet Wallet address to mine to. Subaddresses and integrated addresses are not supported!<br>
|
||||
--host IP address of your Monero node, default is 127.0.0.1<br>
|
||||
--rpc-port monerod RPC API port number, default is 18081<br>
|
||||
--zmq-port monerod ZMQ pub port number, default is 18083 (same port as in monerod\'s \"--zmq-pub\" command line parameter)<br>
|
||||
--stratum Comma-separated list of IP:port for stratum server to listen on<br>
|
||||
--p2p Comma-separated list of IP:port for p2p server to listen on<br>
|
||||
--addpeers Comma-separated list of IP:port of other p2pool nodes to connect to<br>
|
||||
--stratum-ban-time N Number of seconds to ban misbehaving stratum client, default is 600<br>
|
||||
--light-mode Don't allocate RandomX dataset, saves 2GB of RAM<br>
|
||||
--loglevel Verbosity of the log, integer number between 0 and 6<br>
|
||||
--data-dir Path to store general p2pool files (log, cache, peer data, etc.), default is current directory<br>
|
||||
--sidechain-config Name of the p2pool sidechain parameters file (only use it if you run your own sidechain)<br>
|
||||
--data-api Path to the p2pool JSON data (use it in tandem with an external web-server)<br>
|
||||
--local-api Enable /local/ path in api path for Stratum Server and built-in miner statistics<br>
|
||||
--stratum-api An alias for --local-api<br>
|
||||
--no-cache Disable p2pool.cache<br>
|
||||
--no-color Disable colors in console output<br>
|
||||
--no-randomx Disable internal RandomX hasher: p2pool will use RPC calls to monerod to check PoW hashes<br>
|
||||
--out-peers N Maximum number of outgoing connections for p2p server (any value between 10 and 1000)<br>
|
||||
--in-peers N Maximum number of incoming connections for p2p server (any value between 10 and 1000)<br>
|
||||
--start-mining N Start built-in miner using N threads (any value between 1 and 64)<br>
|
||||
--no-autodiff Disable automatic difficulty adjustment for miners connected to stratum (WARNING: incompatible with Nicehash and MRR)<br>
|
||||
--rpc-login Specify username[:password] required for Monero RPC server<br>
|
||||
--socks5 Specify IP:port of a SOCKS5 proxy to use for outgoing connections<br>
|
||||
--no-dns Disable DNS queries, use only IP addresses to connect to peers (seed node DNS will be unavailable too)<br>
|
||||
--p2p-external-port Port number that your router uses for mapping to your local p2p port. Use it if you are behind a NAT and still want to accept incoming connections<br>
|
||||
--no-upnp Disable UPnP port forwarding<br>
|
||||
--no-igd An alias for --no-upnp<br>
|
||||
--upnp-stratum Port forward Stratum port (it's not forwarded by default)<br>
|
||||
--merge-mine IP:port and wallet address for another blockchain to merge mine with<br>
|
||||
--version Print p2pool's version and build details<br>
|
||||
--tls-cert file Load TLS certificate chain from \"file\" in the PEM format<br>
|
||||
--tls-cert-key file Load TLS certificate private key from \"file\" in the PEM format<br>
|
||||
--rpc-ssl Enable SSL on RPC connections to the Monero node<br>
|
||||
--rpc-ssl-fingerprint base64-encoded fingerprint of the Monero node's certificate (optional, use it for certificate pinning)<br>
|
||||
--no-stratum-http Disable HTTP on Stratum ports<br>
|
||||
--help Show this help message
|
||||
--wallet Wallet address to mine to. Subaddresses and integrated addresses are not supported!<br>
|
||||
--host IP address of your Monero node, default is 127.0.0.1<br>
|
||||
--rpc-port monerod RPC API port number, default is 18081<br>
|
||||
--zmq-port monerod ZMQ pub port number, default is 18083 (same port as in monerod\'s \"--zmq-pub\" command line parameter)<br>
|
||||
--stratum Comma-separated list of IP:port for stratum server to listen on<br>
|
||||
--p2p Comma-separated list of IP:port for p2p server to listen on<br>
|
||||
--addpeers Comma-separated list of IP:port of other p2pool nodes to connect to<br>
|
||||
--light-mode Don't allocate RandomX dataset, saves 2GB of RAM<br>
|
||||
--loglevel Verbosity of the log, integer number between 0 and 6<br>
|
||||
--config Name of the p2pool config file<br>
|
||||
--data-api Path to the p2pool JSON data (use it in tandem with an external web-server)<br>
|
||||
--local-api Enable /local/ path in api path for Stratum Server and built-in miner statistics<br>
|
||||
--stratum-api An alias for --local-api<br>
|
||||
--no-cache Disable p2pool.cache<br>
|
||||
--no-color Disable colors in console output<br>
|
||||
--no-randomx Disable internal RandomX hasher: p2pool will use RPC calls to monerod to check PoW hashes<br>
|
||||
--out-peers N Maximum number of outgoing connections for p2p server (any value between 10 and 1000)<br>
|
||||
--in-peers N Maximum number of incoming connections for p2p server (any value between 10 and 1000)<br>
|
||||
--start-mining N Start built-in miner using N threads (any value between 1 and 64)<br>
|
||||
--help Show this help message
|
||||
"
|
||||
}
|
||||
|
||||
@@ -648,9 +630,6 @@ allArgs = allArgs.filter( ( el ) => !defaultArgs.includes( el.split(" ")[0] ) )
|
||||
if (chainDropdown.currentIndex === 1) {
|
||||
chain = "main"
|
||||
}
|
||||
if (chainDropdown.currentIndex === 2) {
|
||||
chain = "nano"
|
||||
}
|
||||
var p2poolArgs = persistentSettings.p2poolFlags;
|
||||
var success = p2poolManager.start(p2poolArgs, address, chain, threads);
|
||||
if (success)
|
||||
|
||||
@@ -31,8 +31,6 @@ import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Dialogs 1.2
|
||||
|
||||
import moneroComponents.Wallet 1.0
|
||||
|
||||
import "../../js/Utils.js" as Utils
|
||||
import "../../js/Windows.js" as Windows
|
||||
import "../../components" as MoneroComponents
|
||||
@@ -157,28 +155,6 @@ Rectangle {
|
||||
onMoved: persistentSettings.lockOnUserInActivityInterval = value
|
||||
}
|
||||
|
||||
MoneroComponents.CheckBox {
|
||||
id: backgroundSyncCheckbox
|
||||
visible: !!currentWallet && !currentWallet.isHwBacked() && !appWindow.viewOnly
|
||||
checked: appWindow.backgroundSyncType != Wallet.BackgroundSync_Off
|
||||
text: qsTr("Sync in the background when locked") + translationManager.emptyString
|
||||
toggleOnClick: false
|
||||
onClicked: {
|
||||
if (currentWallet && appWindow) {
|
||||
appWindow.showProcessingSplash(qsTr("Updating settings..."))
|
||||
|
||||
// TODO: add support for custom background password option
|
||||
var newBackgroundSyncType = Wallet.BackgroundSync_Off
|
||||
if (currentWallet.getBackgroundSyncType() === Wallet.BackgroundSync_Off)
|
||||
newBackgroundSyncType = Wallet.BackgroundSync_ReusePassword
|
||||
|
||||
// TODO: don't keep the wallet password in memory on the appWindow
|
||||
// https://github.com/monero-project/monero-gui/issues/1537#issuecomment-410055329
|
||||
currentWallet.setupBackgroundSync(newBackgroundSyncType, appWindow.walletPassword)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MoneroComponents.CheckBox {
|
||||
checked: persistentSettings.askStopLocalNode
|
||||
onClicked: persistentSettings.askStopLocalNode = !persistentSettings.askStopLocalNode
|
||||
|
||||
5
qml.qrc
5
qml.qrc
@@ -64,7 +64,7 @@
|
||||
<file>lang/flags/cz.png</file>
|
||||
<file>lang/flags/dk.png</file>
|
||||
<file>lang/flags/eg.png</file>
|
||||
<file>lang/flags/eo.png</file>
|
||||
<file>lang/flags/esperanto.png</file>
|
||||
<file>lang/flags/fi.png</file>
|
||||
<file>lang/flags/fr.png</file>
|
||||
<file>lang/flags/de.png</file>
|
||||
@@ -281,11 +281,8 @@
|
||||
<file>images/ledgerNanoS.png</file>
|
||||
<file>images/ledgerNanoSPlus.png</file>
|
||||
<file>images/ledgerNanoX.png</file>
|
||||
<file>images/ledgerNanoGen5.png</file>
|
||||
<file>images/ledgerStax.png</file>
|
||||
<file>images/ledgerFlex.png</file>
|
||||
<file>images/trezor3.png</file>
|
||||
<file>images/trezor5.png</file>
|
||||
<file>images/trezorT.png</file>
|
||||
<file>images/trezorT@2x.png</file>
|
||||
<file>qtquickcontrols2.conf</file>
|
||||
|
||||
@@ -38,6 +38,9 @@
|
||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||
<true/>
|
||||
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<string>True</string>
|
||||
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
||||
@@ -297,7 +297,7 @@ void DaemonManager::exit()
|
||||
m_app_exit = true;
|
||||
}
|
||||
|
||||
QVariantMap DaemonManager::validateDataDir(const QString &dataDir, const int estimatedBlockchainSize) const
|
||||
QVariantMap DaemonManager::validateDataDir(const QString &dataDir) const
|
||||
{
|
||||
QVariantMap result;
|
||||
bool valid = true;
|
||||
@@ -312,8 +312,9 @@ QVariantMap DaemonManager::validateDataDir(const QString &dataDir, const int est
|
||||
valid = false;
|
||||
}
|
||||
|
||||
// Make sure there is 75GB storage available
|
||||
storageAvailable = storage.bytesAvailable()/1000/1000/1000;
|
||||
if (storageAvailable < estimatedBlockchainSize) {
|
||||
if (storageAvailable < 75) {
|
||||
valid = false;
|
||||
}
|
||||
} else {
|
||||
@@ -338,7 +339,7 @@ bool DaemonManager::checkLmdbExists(QString datadir) {
|
||||
if (datadir.isEmpty() || datadir.isNull()) {
|
||||
datadir = QString::fromStdString(tools::get_default_data_dir());
|
||||
}
|
||||
return QDir(datadir + "/lmdb").exists();
|
||||
return validateDataDir(datadir).value("lmdbExists").value<bool>();
|
||||
}
|
||||
|
||||
QString DaemonManager::getArgs(const QString &dataDir) {
|
||||
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
// Send daemon command from qml and prints output in console window.
|
||||
Q_INVOKABLE void sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const;
|
||||
Q_INVOKABLE void exit();
|
||||
Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir, const int estimatedBlockchainSizeGb) const;
|
||||
Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir) const;
|
||||
Q_INVOKABLE bool checkLmdbExists(QString datadir);
|
||||
Q_INVOKABLE QString getArgs(const QString &dataDir);
|
||||
|
||||
|
||||
@@ -529,69 +529,6 @@ bool Wallet::scanTransactions(const QVector<QString> &txids)
|
||||
return m_walletImpl->scanTransactions(c);
|
||||
}
|
||||
|
||||
void Wallet::setupBackgroundSync(const Wallet::BackgroundSyncType background_sync_type, const QString &wallet_password)
|
||||
{
|
||||
qDebug() << "Setting up background sync";
|
||||
bool refreshEnabled = m_refreshEnabled;
|
||||
pauseRefresh();
|
||||
|
||||
// run inside scheduler because of lag when stopping/starting refresh
|
||||
m_scheduler.run([this, refreshEnabled, background_sync_type, &wallet_password] {
|
||||
m_walletImpl->setupBackgroundSync(
|
||||
static_cast<Monero::Wallet::BackgroundSyncType>(background_sync_type),
|
||||
wallet_password.toStdString(),
|
||||
Monero::optional<std::string>());
|
||||
if (refreshEnabled)
|
||||
startRefresh();
|
||||
emit backgroundSyncSetup();
|
||||
});
|
||||
}
|
||||
|
||||
Wallet::BackgroundSyncType Wallet::getBackgroundSyncType() const
|
||||
{
|
||||
return static_cast<BackgroundSyncType>(m_walletImpl->getBackgroundSyncType());
|
||||
}
|
||||
|
||||
bool Wallet::isBackgroundWallet() const
|
||||
{
|
||||
return m_walletImpl->isBackgroundWallet();
|
||||
}
|
||||
|
||||
bool Wallet::isBackgroundSyncing() const
|
||||
{
|
||||
return m_walletImpl->isBackgroundSyncing();
|
||||
}
|
||||
|
||||
void Wallet::startBackgroundSync()
|
||||
{
|
||||
qDebug() << "Starting background sync";
|
||||
bool refreshEnabled = m_refreshEnabled;
|
||||
pauseRefresh();
|
||||
|
||||
// run inside scheduler because of lag when stopping/starting refresh
|
||||
m_scheduler.run([this, refreshEnabled] {
|
||||
m_walletImpl->startBackgroundSync();
|
||||
if (refreshEnabled)
|
||||
startRefresh();
|
||||
emit backgroundSyncStarted();
|
||||
});
|
||||
}
|
||||
|
||||
void Wallet::stopBackgroundSync(const QString &password)
|
||||
{
|
||||
qDebug() << "Stopping background sync";
|
||||
bool refreshEnabled = m_refreshEnabled;
|
||||
pauseRefresh();
|
||||
|
||||
// run inside scheduler because of lag when stopping/starting refresh
|
||||
m_scheduler.run([this, password, refreshEnabled] {
|
||||
m_walletImpl->stopBackgroundSync(password.toStdString());
|
||||
if (refreshEnabled)
|
||||
startRefresh();
|
||||
emit backgroundSyncStopped();
|
||||
});
|
||||
}
|
||||
|
||||
bool Wallet::refresh(bool historyAndSubaddresses /* = true */)
|
||||
{
|
||||
refreshingSet(true);
|
||||
|
||||
@@ -112,14 +112,6 @@ public:
|
||||
|
||||
Q_ENUM(ConnectionStatus)
|
||||
|
||||
enum BackgroundSyncType {
|
||||
BackgroundSync_Off = Monero::Wallet::BackgroundSync_Off,
|
||||
BackgroundSync_ReusePassword = Monero::Wallet::BackgroundSync_ReusePassword,
|
||||
BackgroundSync_CustomPassword = Monero::Wallet::BackgroundSync_CustomPassword
|
||||
};
|
||||
|
||||
Q_ENUM(BackgroundSyncType)
|
||||
|
||||
//! returns mnemonic seed
|
||||
QString getSeed() const;
|
||||
|
||||
@@ -223,17 +215,6 @@ public:
|
||||
//! scan transactions
|
||||
Q_INVOKABLE bool scanTransactions(const QVector<QString> &txids);
|
||||
|
||||
Q_INVOKABLE void setupBackgroundSync(const BackgroundSyncType background_sync_type, const QString &wallet_password);
|
||||
Q_INVOKABLE BackgroundSyncType getBackgroundSyncType() const;
|
||||
Q_INVOKABLE bool isBackgroundWallet() const;
|
||||
Q_INVOKABLE bool isBackgroundSyncing() const;
|
||||
|
||||
//! scan in the background with just the view key (wipe the spend key)
|
||||
Q_INVOKABLE void startBackgroundSync();
|
||||
|
||||
//! bring the spend key back and process background synced txs
|
||||
Q_INVOKABLE void stopBackgroundSync(const QString &password);
|
||||
|
||||
//! refreshes the wallet
|
||||
Q_INVOKABLE bool refresh(bool historyAndSubaddresses = true);
|
||||
|
||||
@@ -388,9 +369,6 @@ signals:
|
||||
void moneyReceived(const QString &txId, quint64 amount);
|
||||
void unconfirmedMoneyReceived(const QString &txId, quint64 amount);
|
||||
void newBlock(quint64 height, quint64 targetHeight);
|
||||
void backgroundSyncSetup() const;
|
||||
void backgroundSyncStarted() const;
|
||||
void backgroundSyncStopped() const;
|
||||
void addressBookChanged() const;
|
||||
void historyModelChanged() const;
|
||||
void walletCreationHeightChanged();
|
||||
|
||||
@@ -38,11 +38,6 @@ filter::filter(QObject *parent) :
|
||||
}
|
||||
|
||||
bool filter::eventFilter(QObject *obj, QEvent *ev) {
|
||||
if (ev->type() == QEvent::Quit) {
|
||||
emit quitRequested();
|
||||
return true;
|
||||
}
|
||||
|
||||
// macOS sends fileopen signal for incoming uri handlers
|
||||
if (ev->type() == QEvent::FileOpen) {
|
||||
QFileOpenEvent *openEvent = static_cast<QFileOpenEvent *>(ev);
|
||||
|
||||
@@ -44,7 +44,6 @@ protected:
|
||||
bool eventFilter(QObject *obj, QEvent *ev);
|
||||
|
||||
signals:
|
||||
void quitRequested();
|
||||
void sequencePressed(const QVariant &o, const QVariant &seq);
|
||||
void sequenceReleased(const QVariant &o, const QVariant &seq);
|
||||
void mousePressed(const QVariant &o, const QVariant &x, const QVariant &y);
|
||||
|
||||
@@ -562,7 +562,6 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
|
||||
qCritical() << "QrCodeScanner : something went wrong !";
|
||||
#endif
|
||||
|
||||
QObject::connect(eventFilter, &filter::quitRequested, rootObject, [rootObject]{ QMetaObject::invokeMethod(rootObject, "gracefulQuit", Qt::QueuedConnection); });
|
||||
QObject::connect(eventFilter, SIGNAL(sequencePressed(QVariant,QVariant)), rootObject, SLOT(sequencePressed(QVariant,QVariant)));
|
||||
QObject::connect(eventFilter, SIGNAL(sequenceReleased(QVariant,QVariant)), rootObject, SLOT(sequenceReleased(QVariant,QVariant)));
|
||||
QObject::connect(eventFilter, SIGNAL(mousePressed(QVariant,QVariant,QVariant)), rootObject, SLOT(mousePressed(QVariant,QVariant,QVariant)));
|
||||
|
||||
@@ -43,8 +43,6 @@
|
||||
#include <QFileInfo>
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
#include <QByteArray>
|
||||
#include <QRandomGenerator>
|
||||
#ifdef Q_OS_MAC
|
||||
#include "qt/macoshelper.h"
|
||||
#endif
|
||||
@@ -72,6 +70,9 @@ namespace
|
||||
|
||||
QPixmap screenshot()
|
||||
{
|
||||
#ifdef Q_OS_MAC
|
||||
return MacOSHelper::screenshot();
|
||||
#else
|
||||
std::unordered_set<QWindow *> hidden;
|
||||
const QWindowList windows = QGuiApplication::allWindows();
|
||||
for (QWindow *window : windows)
|
||||
@@ -90,6 +91,7 @@ QPixmap screenshot()
|
||||
});
|
||||
|
||||
return QGuiApplication::primaryScreen()->grabWindow(0);
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace
|
||||
@@ -248,18 +250,6 @@ QString OSHelper::temporaryPath() const
|
||||
return QDir::tempPath();
|
||||
}
|
||||
|
||||
QString OSHelper::randomPassword(int numBytes) const
|
||||
{
|
||||
numBytes = qBound(16, numBytes, 128);
|
||||
|
||||
QByteArray buf(numBytes, Qt::Uninitialized);
|
||||
auto *rng = QRandomGenerator::system();
|
||||
for (int i = 0; i < numBytes; ++i)
|
||||
buf[i] = char(rng->generate() & 0xFF);
|
||||
|
||||
return QString::fromLatin1(buf.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals));
|
||||
}
|
||||
|
||||
bool OSHelper::installed() const
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
@@ -317,7 +307,7 @@ std::pair<quint8, QString> OSHelper::getNetworkTypeAndAddressFromFile(const QStr
|
||||
address = _address;
|
||||
if(address.startsWith("5") || address.startsWith("7")){
|
||||
networkType = NetworkType::STAGENET;
|
||||
} else if(address.startsWith("9") || address.startsWith("A")){
|
||||
} else if(address.startsWith("9") || address.startsWith("B")){
|
||||
networkType = NetworkType::TESTNET;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,6 @@ public:
|
||||
Q_INVOKABLE QString openSaveFileDialog(const QString &title, const QString &folder, const QString &filename) const;
|
||||
Q_INVOKABLE QString temporaryFilename() const;
|
||||
Q_INVOKABLE QString temporaryPath() const;
|
||||
Q_INVOKABLE QString randomPassword(int numBytes = 32) const;
|
||||
Q_INVOKABLE bool removeTemporaryWallet(const QString &walletName) const;
|
||||
Q_INVOKABLE bool isCapsLock() const;
|
||||
Q_INVOKABLE quint8 getNetworkTypeFromFile(const QString &keysPath) const;
|
||||
|
||||
@@ -53,21 +53,21 @@ void P2PoolManager::download() {
|
||||
QString fileName;
|
||||
QString validHash;
|
||||
#ifdef Q_OS_WIN
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.13/p2pool-v4.13-windows-x64.zip";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.13-windows-x64.zip";
|
||||
validHash = "267006cd1259253052e64e9ac5ae27532cf238e71588444c14624b9432325e9f";
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v3.10/p2pool-v3.10-windows-x64.zip";
|
||||
fileName = m_p2poolPath + "/p2pool-v3.10-windows-x64.zip";
|
||||
validHash = "2b5a37576ac6e73a6f26a0112d9a51360babef765199fbe06a6bfc513ed45581";
|
||||
#elif defined(Q_OS_LINUX)
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.13/p2pool-v4.13-linux-x64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.13-linux-x64.tar.gz";
|
||||
validHash = "d02361ee5f18e3e53af79436af6dc1772b71aa5ad8582ad88b0764ae2c9289c3";
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v3.10/p2pool-v3.10-linux-x64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v3.10-linux-x64.tar.gz";
|
||||
validHash = "441969c999e860231b2e48651747866754bad17292331fb22c5340c8a250168a";
|
||||
#elif defined(Q_OS_MACOS_AARCH64)
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.13/p2pool-v4.13-macos-aarch64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.13-macos-aarch64.tar.gz";
|
||||
validHash = "fddd309566395a8297738f3fd5cd0fe9d792c3005bb664a1a61befa029e802ad";
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v3.10/p2pool-v3.10-macos-aarch64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v3.10-macos-aarch64.tar.gz";
|
||||
validHash = "f8ff6de7b2ac38f0d3ac23e30cc8827d5a1b83c4190f4e79e8db695acc742a68";
|
||||
#elif defined(Q_OS_MACOS)
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.13/p2pool-v4.13-macos-x64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.13-macos-x64.tar.gz";
|
||||
validHash = "374c42bbb409ed2ef3e5e0b4359441929cc574b2fa9bc8b3bdf7695471f8f94d";
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v3.10/p2pool-v3.10-macos-x64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v3.10-macos-x64.tar.gz";
|
||||
validHash = "9b20656556fe4bfe3df1df9a6f2c7c8bc9aa0dd2c4ac66ebca2c8580581ff9f6";
|
||||
#endif
|
||||
QFile file(fileName);
|
||||
epee::net_utils::http::http_simple_client http_client;
|
||||
@@ -182,10 +182,6 @@ bool P2PoolManager::start(const QString &flags, const QString &address, const QS
|
||||
arguments << "--start-mining" << threads;
|
||||
}
|
||||
|
||||
if (chain == "nano") {
|
||||
arguments << "--nano";
|
||||
}
|
||||
|
||||
if (chain == "mini") {
|
||||
arguments << "--mini";
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ class MacOSHelper
|
||||
public:
|
||||
static bool isCapsLock();
|
||||
static bool openFolderAndSelectItem(const QUrl &path);
|
||||
static QPixmap screenshot();
|
||||
static QString bundlePath();
|
||||
static void disableWindowTabbing();
|
||||
};
|
||||
|
||||
@@ -68,6 +68,41 @@ bool MacOSHelper::openFolderAndSelectItem(const QUrl &path)
|
||||
return true;
|
||||
}
|
||||
|
||||
QPixmap MacOSHelper::screenshot()
|
||||
{
|
||||
std::unordered_set<uintptr_t> appWindowIds;
|
||||
for (NSWindow *window in [NSApp windows])
|
||||
{
|
||||
appWindowIds.insert((uintptr_t)[window windowNumber]);
|
||||
}
|
||||
|
||||
CFArrayRef onScreenWindows = CGWindowListCreate(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
|
||||
const auto onScreenWindowsClenaup = sg::make_scope_guard([&onScreenWindows]() {
|
||||
CFRelease(onScreenWindows);
|
||||
});
|
||||
|
||||
CFMutableArrayRef foreignWindows = CFArrayCreateMutable(NULL, CFArrayGetCount(onScreenWindows), NULL);
|
||||
const auto foreignWindowsClenaup = sg::make_scope_guard([&foreignWindows]() {
|
||||
CFRelease(foreignWindows);
|
||||
});
|
||||
|
||||
for (CFIndex index = 0, count = CFArrayGetCount(onScreenWindows); index < count; ++index)
|
||||
{
|
||||
const uintptr_t windowId = reinterpret_cast<const uintptr_t>(CFArrayGetValueAtIndex(onScreenWindows, index));
|
||||
if (appWindowIds.find(windowId) == appWindowIds.end())
|
||||
{
|
||||
CFArrayAppendValue(foreignWindows, reinterpret_cast<const void *>(windowId));
|
||||
}
|
||||
}
|
||||
|
||||
CGImageRef image = CGWindowListCreateImageFromArray(CGRectInfinite, foreignWindows, kCGWindowListOptionAll);
|
||||
const auto imageClenaup = sg::make_scope_guard([&image]() {
|
||||
CFRelease(image);
|
||||
});
|
||||
|
||||
return QtMac::fromCGImageRef(image);
|
||||
}
|
||||
|
||||
QString MacOSHelper::bundlePath()
|
||||
{
|
||||
NSBundle *main = [NSBundle mainBundle];
|
||||
|
||||
164
src/qt/utils.cpp
164
src/qt/utils.cpp
@@ -29,8 +29,6 @@
|
||||
#include <QtCore>
|
||||
#include <QCoreApplication>
|
||||
#include <QtGlobal>
|
||||
#include <QRandomGenerator>
|
||||
#include <QStringList>
|
||||
|
||||
#include "TailsOS.h"
|
||||
#include "utils.h"
|
||||
@@ -98,7 +96,7 @@ QString xdgMime(){
|
||||
"X-GNOME-FullName=Monero-GUI\n"
|
||||
"Comment=Monero GUI\n"
|
||||
"Keywords=Monero;\n"
|
||||
"Exec=\"%1\" %u\n"
|
||||
"Exec=%1 %u\n"
|
||||
"Terminal=false\n"
|
||||
"Type=Application\n"
|
||||
"Icon=monero\n"
|
||||
@@ -136,87 +134,83 @@ void registerXdgMime(){
|
||||
}
|
||||
#endif
|
||||
|
||||
QString randomUserAgent()
|
||||
{
|
||||
const QStringList userAgents = {
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1",
|
||||
"Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0",
|
||||
"Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0",
|
||||
"Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0",
|
||||
"Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0",
|
||||
"Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0",
|
||||
"Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0",
|
||||
"Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/19.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/18.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0",
|
||||
"Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1",
|
||||
"Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2",
|
||||
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20120427 Firefox/15.0a1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1",
|
||||
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko/20120910144328 Firefox/15.0.2",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1",
|
||||
"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:15.0) Gecko/20121011 Firefox/15.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:14.0) Gecko/20120405 Firefox/14.0a1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20120405 Firefox/14.0a1",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20120405 Firefox/14.0a1",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows; U; Windows NT 6.1; WOW64; en-US; rv:2.0.4) Gecko/20120718 AskTbAVR-IDW/3.12.5.17700 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/ 20120405 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/13.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; de;rv:12.0) Gecko/20120403211507 Firefox/12.0"
|
||||
};
|
||||
QString randomUserAgent(){
|
||||
QStringList urand;
|
||||
urand << "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0"
|
||||
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0"
|
||||
<< "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0"
|
||||
<< "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0"
|
||||
<< "Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"
|
||||
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0"
|
||||
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0"
|
||||
<< "Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0"
|
||||
<< "Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/19.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/18.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
|
||||
<< "Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1"
|
||||
<< "Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2"
|
||||
<< "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20120427 Firefox/15.0a1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko/20120910144328 Firefox/15.0.2"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1"
|
||||
<< "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:15.0) Gecko/20121011 Firefox/15.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:14.0) Gecko/20120405 Firefox/14.0a1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20120405 Firefox/14.0a1"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20120405 Firefox/14.0a1"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows; U; Windows NT 6.1; WOW64; en-US; rv:2.0.4) Gecko/20120718 AskTbAVR-IDW/3.12.5.17700 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/ 20120405 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/13.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; de;rv:12.0) Gecko/20120403211507 Firefox/12.0";
|
||||
|
||||
if (userAgents.isEmpty())
|
||||
return {};
|
||||
|
||||
const int idx = QRandomGenerator::global()->bounded(userAgents.size());
|
||||
return userAgents.at(idx);
|
||||
// @TODO: Qt 5.10 - QRandomGenerator
|
||||
int irand = rand() % urand.length();
|
||||
return urand.at(irand);
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ ColumnLayout {
|
||||
return passwordInput.text === passwordInputConfirm.text;
|
||||
}
|
||||
|
||||
function calcPasswordStrength() {
|
||||
function calcPasswordStrength(inp) {
|
||||
if(!progressLayout.visible) return;
|
||||
if(passwordInput.text.length <= 1){
|
||||
root.passwordFill = 0;
|
||||
|
||||
@@ -345,7 +345,7 @@ Rectangle {
|
||||
console.log("Creating temporary wallet", tmp_wallet_filename)
|
||||
var nettype = appWindow.persistentSettings.nettype;
|
||||
var kdfRounds = appWindow.persistentSettings.kdfRounds;
|
||||
var wallet = walletManager.createWallet(tmp_wallet_filename, oshelper.randomPassword(), persistentSettings.language_wallet, nettype, kdfRounds)
|
||||
var wallet = walletManager.createWallet(tmp_wallet_filename, "", persistentSettings.language_wallet, nettype, kdfRounds)
|
||||
|
||||
wizardController.walletOptionsSeed = wallet.seed
|
||||
|
||||
@@ -479,7 +479,7 @@ Rectangle {
|
||||
var deviceName = wizardController.walletOptionsDeviceName;
|
||||
|
||||
connect();
|
||||
walletManager.createWalletFromDeviceAsync(tmpWalletFilename, oshelper.randomPassword(), nettype, deviceName, restoreHeight, subaddressLookahead, kdfRounds);
|
||||
walletManager.createWalletFromDeviceAsync(tmpWalletFilename, "", nettype, deviceName, restoreHeight, subaddressLookahead, kdfRounds);
|
||||
creatingWalletDeviceSplash();
|
||||
}
|
||||
|
||||
|
||||
@@ -55,12 +55,9 @@ Rectangle {
|
||||
ListElement { column1: "Ledger Nano S"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Nano S Plus"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Nano X"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Nano Gen5"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Stax"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Flex"; column2: "Ledger";}
|
||||
ListElement { column1: "Trezor Model T"; column2: "Trezor";}
|
||||
ListElement { column1: "Trezor Safe 3"; column2: "Trezor";}
|
||||
ListElement { column1: "Trezor Safe 5"; column2: "Trezor";}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
@@ -172,8 +169,6 @@ Rectangle {
|
||||
return "qrc:///images/trezorT.png";
|
||||
} else if (trezorType == "Trezor Safe 3") {
|
||||
return "qrc:///images/trezor3.png";
|
||||
} else if (trezorType == "Trezor Safe 5") {
|
||||
return "qrc:///images/trezor5.png";
|
||||
}
|
||||
} else if (hardwareWalletType == "Ledger") {
|
||||
if (ledgerType == "Ledger Nano S") {
|
||||
@@ -182,12 +177,8 @@ Rectangle {
|
||||
return "qrc:///images/ledgerNanoSPlus.png";
|
||||
} else if (ledgerType == "Ledger Nano X") {
|
||||
return "qrc:///images/ledgerNanoX.png";
|
||||
} else if (ledgerType == "Ledger Nano Gen5") {
|
||||
return "qrc:///images/ledgerNanoGen5.png";
|
||||
} else if (ledgerType == "Ledger Stax") {
|
||||
return "qrc:///images/ledgerStax.png";
|
||||
} else if (ledgerType == "Ledger Flex") {
|
||||
return "qrc:///images/ledgerFlex.png";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
|
||||
@@ -86,7 +86,7 @@ Rectangle {
|
||||
visible: false
|
||||
text: qsTr("Print this paper, fill it out, and keep it in a safe location. Never share your recovery phrase with anybody, especially with strangers offering technical support.") +
|
||||
qsTr("Recovery phrase (mnemonic seed)") +
|
||||
qsTr("These words are a backup of your wallet. They are the only thing needed to access your funds and restore your Monero wallet, so keep this paper in a safe place and do not disclose it to anybody! It is strongly not recommended to store your recovery phrase digitally (in an email, online service, screenshot, photo, or any other type of computer file).") +
|
||||
qsTr("These words are are a backup of your wallet. They are the only thing needed to access your funds and restore your Monero wallet, so keep this paper in a safe place and do not disclose it to anybody! It is strongly not recommended to store your recovery phrase digitally (in an email, online service, screenshot, photo, or any other type of computer file).") +
|
||||
qsTr("Wallet creation date") +
|
||||
qsTr("Wallet restore height") +
|
||||
qsTr("For instructions on how to restore this wallet, visit www.getmonero.org and go to Resources > User Guides > \"How to restore a wallet from mnemonic seed\". Use only Monero wallets that are trusted and recommended by the Monero community (see a list of them in www.getmonero.org/downloads).") + translationManager.emptyString
|
||||
|
||||
@@ -149,7 +149,7 @@ Rectangle {
|
||||
imageIcon: "qrc:///images/local-node-full.png"
|
||||
|
||||
onMenuClicked: {
|
||||
appWindow.persistentSettings.pruneBlockchain = true;
|
||||
appWindow.persistentSettings.pruneBlockchain = false; // can be toggled on next page
|
||||
applyWalletMode(2, 'wizardHome');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ Rectangle {
|
||||
return false;
|
||||
}
|
||||
|
||||
var valid = false;
|
||||
if(wizardController.walletRestoreMode === "keys") {
|
||||
return wizardWalletInput.verify() && wizardRestoreWallet1.verifyFromKeys();
|
||||
} else if(wizardController.walletRestoreMode === "seed") {
|
||||
|
||||
@@ -72,7 +72,6 @@ Rectangle {
|
||||
progress: appWindow.walletMode <= 1 ? 2 : 3
|
||||
|
||||
onPrevClicked: {
|
||||
btnNext.enabled = true;
|
||||
if (appWindow.walletMode <= 1){
|
||||
wizardStateView.state = "wizardRestoreWallet1";
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user