diff --git a/README.md b/README.md
index 0f76053f..28015de1 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,35 @@
-
PEPE POW
- PEPEPOW Coin is a cryptocurrency based on memes and utilizes the POW consensus algorithm for network security and decentralization. The coin is named after a popular internet meme that represents a frog, hence its mascot is also a frog..
-
PEPEPOW is set to become the second proof-of-work (PoW) driven meme coin!
+# PEPEPOW
+
+PEPEW (PEPEPOW) is a cryptocurrency with no owner or central authority. Based on memes and utilizing the Dash hybrid PoW / Masternode consensus algorithm for network security and decentralization. The coin is named after a popular internet meme that represents a frog, hence its mascot is also a frog who wants to dig for coins. Anyone can be a governor of PEPEW Proof of Work and share ownership of the coin, by deploying a master node or participating in mining with your home computer.
+
+
+ on Feb 12th 2024 my Discord account (Foztor#2490) had its auth token stolen, and the account has since been banned. I'm back as Foztor_ and we believe no integrity was compromised - the crooks were just trying to fleece on you various scams.
+
+With enough support - PEPEPOW is set to become the second most popular proof-of-work (PoW) driven meme coin, behind DogeCoin!
-

+
-
Important links:
- - Website [PEPEPOW](https://pepecore.com/)
- - Block Explorer [PEPEPOW-EXPLORER](https://explorer.pepecore.com/)
- - Join community in [DISCORD](https://discord.gg/jJgV73w8Zs)
- - Github [GITHUB](https://github.com/avgttt/PePe-core)
- - Twitter [TWITTER](https://twitter.com/pepepow_coin)
-
+##
Documents:
+ - Mining on Windows [MINE WINDOWS](https://github.com/MattF42/PePe-core/blob/master/doc/howtominewindows.md)
+ - Setup Masternode [MASTERNODE](https://github.com/MattF42/PePe-core/blob/master/doc/runningamasternode.md)
+ - The PEPEW Story [PROOF OF WORK STORY](https://github.com/MattF42/PePe-core/blob/master/doc/pepeproofofworkstory.md)
+
+##
Important links:
+ - Github [GITHUB](https://github.com/MattF42/PePe-core/)
+ - Website [PEPEPOW](https://pepepow.org/)
+ - Web Wallet [WALLET](https://wallet-pepepow.foztor.net/)
+ - Faucet [FREE PEPEW](https://pepepow.foztor.net/faucet/#)
+ - Dice Game [DICE](https://dice-pepepow.foztor.net/)
+ - Mining Pool [COMMUNITY POOL](https://community-pool.pepepow.org/)
+ - Block Explorer [PEPEPOW-EXPLORER](https://explorer.pepepow.org/)
+ - M4P Block Explorer [PEPEPOW-EXPLORER](https://explorer2.pepepow.org/)
+ - Reborn Discord [DISCORD] https://discord.gg/pxKvp4GJh5
+ - Twitter [TWITTER](https://twitter.com/PEPEWCommunity)
+ - Reddit [REDDIT](https://www.reddit.com/r/PEPEWCommunity/)
-Coins Specifications:
+## Coins Specifications:
@@ -23,7 +38,7 @@
Algorithm |
-memehash |
+memehash until block 1930000 then XelisV2 |
Block Time |
@@ -43,7 +58,7 @@
Subsidy halving interval |
-each 1 months,3 times |
+See table below |
Block initial reward |
@@ -55,8 +70,41 @@
Block reward structure |
-After block 129601 Pow-75%, Masternode-20%, Foundation-5% |
+After block 129601 Pow-75%, Masternode-20% Dev-5% |
+After v2.2 HardFork (c block 384000) Pow-65%, Masternode-35% |
+
+Community HARD FORK occurred on 18th August 2023 to version 2.2.0.1 Protocol version 70301
+Future and Historical Reward Structure:
+
+
+Blocks | Reward |
+
+
+1-129600 | 100000 |
+129601-259200 | 50000 |
+259201-385000 | 5000 |
+>385000-514600 | 25000 |
+>514600-644200 | 12500 |
+ >644200-773800 | 6250 |
+>773800-1930000 | 5000 |
+>1930000-2059600 | 17000 |
+>2059600-2189200 | 16500 |
+>2189200-2318800 | 16000 |
+>Then reducing by 500 every 129600 Blocks until a minimum of | 5000 |
+
+
+
+
+## DONATIONS:
+
+The original dev fee was removed from this chain and it is now entirely community-maintained / run. To thank or support those who contribute to this project please consider making a contribution. Any amount helps!
+
+Foztor : PLR6rHLZQwK3Jrbtja6VFnXEn8gvqmrBFx
+
+Setvin : PNT3qZ2sshPvyS5egaCpfEQZmfHoZEA1Bu
+
+Mining4People : PNb6mBbGdudbM7UXGouazzUQZZTf9kzReW
diff --git a/autogen.sh b/autogen.sh
old mode 100644
new mode 100755
diff --git a/configure.ac b/configure.ac
old mode 100644
new mode 100755
index 09ec2cbb..3999454d
--- a/configure.ac
+++ b/configure.ac
@@ -1,12 +1,12 @@
dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N)
AC_PREREQ([2.60])
-define(_CLIENT_VERSION_MAJOR, 1)
-define(_CLIENT_VERSION_MINOR, 5)
+define(_CLIENT_VERSION_MAJOR, 2)
+define(_CLIENT_VERSION_MINOR, 6)
define(_CLIENT_VERSION_REVISION, 1)
define(_CLIENT_VERSION_BUILD, 1)
define(_CLIENT_VERSION_IS_RELEASE, true)
-define(_COPYRIGHT_YEAR, 2023)
-AC_INIT([PEPEPOW Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/PEPEPOWpay/PEPEPOW/issues],[PEPEPOWcore])
+define(_COPYRIGHT_YEAR, 2024)
+AC_INIT([PEPEPOW Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[https://github.com/MattF42/PePe-core/issues],[PEPEPOWcore])
AC_CONFIG_SRCDIR([src/validation.cpp])
AC_CONFIG_HEADERS([src/config/PEPEPOW-config.h])
AC_CONFIG_AUX_DIR([build-aux])
diff --git a/contrib/devtools/optimize-pngs.py b/contrib/devtools/optimize-pngs.py
index e760b57d..2be5264a 100644
--- a/contrib/devtools/optimize-pngs.py
+++ b/contrib/devtools/optimize-pngs.py
@@ -23,7 +23,7 @@ def content_hash(filename):
pngcrush = 'pngcrush'
git = 'git'
-folders = ["src/qt/res/movies", "src/qt/res/icons", "src/qt/res/icons/crownium", "src/qt/res/icons/drkblue", "src/qt/res/icons/light", "src/qt/res/icons/trad", "src/qt/res/images", "src/qt/res/images/crownium", "src/qt/res/images/drkblue", "src/qt/res/images/light", "src/qt/res/images/trad", "share/pixmaps"]
+folders = ["src/qt/res/movies", "src/qt/res/icons", "src/qt/res/icons/crownium", "src/qt/res/icons/drkblue", "src/qt/res/icons/light", "src/qt/res/icons/trad", "src/qt/res/images", "src/qt/res/images/crownium", "src/qt/res/images/drkblue", "src/qt/res/images/light", "src/qt/res/images/trad", "share/pixmaps", "src/qt/res/images/mosaicco", "src/qt/res/icons/mosaicco"]
basePath = subprocess.check_output([git, 'rev-parse', '--show-toplevel']).rstrip('\n')
totalSaveBytes = 0
noHashChange = True
diff --git a/contrib/seeds/nodes_main.txt b/contrib/seeds/nodes_main.txt
index f1854b27..080237d5 100644
--- a/contrib/seeds/nodes_main.txt
+++ b/contrib/seeds/nodes_main.txt
@@ -1,937 +1,35 @@
-5.2.145.201:8333
-5.22.142.214:8333
-5.53.172.197:8333
-5.189.161.164:8333
-5.230.140.166:8333
-5.231.3.130:8333
-5.255.80.103:8333
-14.202.230.49:8333
-18.85.11.130:8333
-23.91.97.25:8333
-23.94.100.122:8333
-23.95.99.132:8333
-24.115.8.206:8333
-24.127.128.191:8333
-24.154.178.25:8333
-24.207.103.43:8333
-24.207.104.105:8333
-24.210.230.150:8333
-24.224.18.84:8333
-24.246.168.106:8333
-27.254.64.47:8333
-31.6.71.123:8333
-31.6.71.124:8333
-31.14.134.13:8333
-31.30.36.220:8333
-31.164.6.104:8333
-31.170.106.203:8333
-31.185.134.201:8333
-31.204.128.99:8333
-31.204.128.219:8333
-37.1.219.88:8333
-37.97.132.109:8333
-37.120.160.55:8333
-37.120.169.123:8333
-37.139.32.46:8333
-37.221.163.218:8333
-38.130.192.72:8333
-41.75.96.80:8333
-45.3.0.49:8333
-45.33.72.185:8333
-45.33.96.129:8333
-45.56.4.63:8333
-45.79.0.127:8333
-45.79.80.102:8333
-45.79.97.30:8333
-45.79.132.219:8333
-46.21.97.135:8333
-46.28.205.67:8333
-46.28.206.188:8333
-46.29.20.209:8333
-46.50.234.179:8333
-46.101.160.168:8333
-46.166.161.35:8333
-46.166.161.103:8333
-46.182.132.100:8333
-46.218.227.92:8333
-46.226.109.20:8333
-46.227.66.132:8333
-46.227.66.138:8333
-46.229.165.154:8333
-46.229.165.155:8333
-46.229.238.187:8333
-46.234.104.48:8333
-46.239.107.74:8333
-46.244.0.138:8333
-46.254.72.195:8333
-50.5.13.44:8333
-50.7.37.114:8333
-50.30.37.103:8333
-50.39.105.60:8333
-50.106.40.231:8333
-52.29.0.37:8333
-52.76.192.246:8333
-54.152.192.179:8333
-54.169.64.174:8333
-54.175.160.22:8333
-54.199.128.0:8333
-58.96.171.129:8333
-58.161.238.57:8333
-60.251.195.221:8333
-61.35.225.19:8333
-62.43.130.178:8333
-62.65.39.12:8333
-62.107.200.30:8333
-62.133.194.2:8333
-62.181.238.186:8333
-62.183.22.50:8333
-62.210.85.120:8333
-62.210.162.89:8333
-62.238.34.125:8333
-64.25.171.73:8333
-64.27.166.30:8333
-64.53.137.101:8333
-64.71.72.44:8333
-64.83.225.146:8333
-64.121.3.163:8333
-64.203.102.86:8333
-65.94.131.59:8333
-65.188.136.233:8333
-66.11.162.218:8333
-66.23.228.133:8333
-66.90.137.89:8333
-66.114.33.49:8333
-66.150.105.77:8333
-66.172.10.4:8333
-66.194.38.250:8333
-66.194.38.253:8333
-66.194.38.254:8333
-66.231.97.172:8333
-66.240.237.155:8333
-67.159.13.34:8333
-67.205.74.206:8333
-67.221.193.55:8333
-67.227.72.17:8333
-68.65.120.53:8333
-68.65.205.226:9000
-68.144.4.34:8333
-69.39.49.199:8333
-69.50.171.205:8333
-69.65.41.21:8333
-69.113.98.61:8333
-69.119.97.39:8333
-69.146.70.124:8333
-69.193.71.2:8333
-70.46.10.237:8333
-70.80.200.187:8333
-70.185.97.117:8333
-71.254.160.25:8333
-72.28.203.5:8333
-72.52.130.110:8333
-72.83.194.122:8333
-72.128.32.167:8333
-72.179.136.80:8333
-72.235.38.70:8333
-74.50.44.193:8333
-74.72.60.83:8333
-74.80.234.116:8333
-74.207.233.193:8333
-75.112.233.128:8333
-75.118.166.197:8333
-75.140.0.241:8333
-75.159.240.66:8333
-75.174.5.26:8333
-76.72.160.252:8333
-76.72.160.254:8333
-76.74.170.112:8333
-76.79.201.54:8333
-76.175.166.164:8333
-76.179.105.27:8333
-77.68.37.200:8333
-77.234.49.196:8333
-77.247.229.93:8333
-78.24.72.78:8333
-78.47.32.147:8333
-78.84.100.95:8333
-78.121.69.23:8333
-78.129.167.5:8333
-78.193.96.155:8333
-79.19.37.179:8333
-79.132.230.144:8333
-79.133.43.63:8333
-79.134.201.66:8333
-79.169.35.235:8333
-80.57.227.14:8333
-80.64.65.87:8333
-80.86.92.70:8333
-80.100.203.151:8333
-80.101.32.121:8333
-80.161.178.73:8333
-80.240.129.170:8333
-81.7.11.50:8333
-81.7.11.55:8333
-81.17.17.40:9333
-81.30.39.83:8333
-81.90.36.7:9444
-81.136.224.77:8333
-81.162.231.211:8333
-81.184.0.143:8333
-81.198.128.86:8333
-82.11.33.229:8333
-82.79.128.134:8333
-82.118.233.111:8333
-82.135.139.30:8333
-82.199.102.10:8333
-82.221.106.17:8333
-82.221.108.21:8333
-82.221.108.27:8333
-83.137.41.3:8333
-83.142.197.168:8333
-83.143.130.19:8333
-83.150.9.196:8333
-83.183.17.191:8333
-83.227.173.83:8333
-83.230.5.15:8333
-83.233.105.151:443
-83.246.75.8:8333
-83.250.133.158:8333
-83.255.66.118:8334
-84.24.69.59:8333
-84.42.193.6:8333
-84.45.98.87:8333
-84.54.128.11:8333
-84.212.200.24:8333
-84.215.198.109:8333
-84.230.4.177:8333
-85.95.228.83:8333
-85.95.228.123:8333
-85.114.128.134:8333
-85.214.66.168:8333
-85.214.147.162:8333
-85.243.168.4:8333
-86.1.0.18:8333
-87.79.77.106:8333
-87.91.156.110:8333
-87.236.196.222:8333
-88.85.75.152:8333
-88.87.1.230:8333
-88.87.92.102:8333
-88.89.69.202:8333
-88.97.72.229:8333
-88.164.117.99:8333
-88.198.32.131:8333
-88.202.230.87:8333
-88.214.193.154:8343
-88.214.194.226:8343
-89.10.155.88:8333
-89.46.101.44:8333
-89.163.224.212:8333
-89.174.248.20:8333
-89.202.231.198:8333
-89.212.75.6:8333
-90.149.38.172:8333
-90.169.106.139:8333
-91.64.101.150:8333
-91.65.196.179:8333
-91.121.80.17:8333
-91.126.77.77:8333
-91.145.76.156:8333
-91.152.150.35:8333
-91.192.137.17:8333
-91.196.170.110:8333
-91.197.44.133:8333
-91.207.68.144:8333
-91.210.105.28:8333
-91.211.102.101:8333
-91.211.106.34:8333
-91.214.200.205:8333
-91.220.43.146:8333
-91.222.71.89:8333
-91.224.140.242:8333
-91.229.76.14:8333
-92.27.7.209:8333
-92.51.167.88:8333
-92.247.229.163:8333
-93.84.114.106:8333
-93.113.36.172:8333
-93.188.224.253:8333
-94.75.239.69:8333
-94.190.227.112:8333
-94.214.2.74:8333
-94.224.162.65:8333
-94.236.198.253:8333
-94.242.229.158:8333
-95.84.138.99:8333
-95.95.168.87:8333
-95.110.234.93:8333
-95.130.9.200:8333
-95.165.168.168:8333
-95.170.235.254:8333
-95.211.130.154:8333
-96.46.68.104:8333
-96.127.202.148:8333
-97.76.171.35:8333
-98.160.160.67:8333
-99.126.197.187:8333
-99.198.173.1:8333
-101.100.174.138:8333
-101.164.201.208:8333
-103.224.165.48:8333
-104.128.225.223:8333
-104.128.228.252:8333
-104.131.192.94:8333
-104.155.45.201:8334
-104.194.28.195:8663
-104.211.1.27:8333
-104.221.38.177:8333
-104.236.9.79:8333
-104.236.129.178:8333
-104.236.186.249:8333
-104.236.194.15:8333
-104.238.128.214:8333
-104.238.130.182:8333
-106.38.234.84:8333
-106.185.36.204:8333
-106.185.38.67:8333
-107.6.4.145:8333
-107.150.2.6:8333
-107.150.40.234:8333
-107.170.13.184:8333
-107.181.250.216:8333
-107.191.101.111:8333
-107.191.106.115:8333
-108.59.12.163:8333
-108.161.129.247:8333
-109.193.160.140:8333
-109.197.13.54:8333
-109.230.7.248:8333
-109.234.106.191:8333
-109.236.137.80:8333
-109.251.161.121:8333
-112.65.231.226:8333
-115.70.166.57:8333
-115.159.42.80:8333
-117.18.73.34:8333
-118.67.201.40:8333
-118.100.86.246:8333
-118.110.104.152:8333
-119.224.64.141:8333
-120.55.193.136:8333
-122.106.169.178:8333
-123.203.174.15:8333
-123.255.232.94:8333
-124.148.165.165:8333
-124.232.141.31:8333
-128.30.92.69:8333
-128.39.141.182:8333
-128.84.167.20:8333
-128.111.73.10:8333
-128.127.38.195:8333
-128.140.224.162:8333
-128.199.101.104:8333
-128.233.224.35:8333
-128.253.3.193:20020
-130.180.228.138:8333
-130.185.144.213:8333
-130.255.73.207:8333
-133.218.233.11:8333
-134.249.128.23:8333
-136.159.234.234:8333
-137.116.160.176:8333
-139.162.2.145:8333
-139.162.23.117:8333
-141.134.69.253:8333
-141.255.162.215:8333
-144.122.163.187:8333
-145.131.3.54:8333
-145.255.4.94:8333
-146.0.32.101:8337
-147.83.72.91:8333
-148.103.28.68:8333
-149.5.32.102:8333
-149.210.164.195:8333
-150.101.163.241:8333
-151.236.11.189:8333
-152.3.136.56:8333
-154.20.208.25:8333
-158.181.104.149:8333
-159.253.96.226:8333
-160.36.130.180:8333
-162.209.1.233:8333
-162.209.4.125:8333
-162.209.106.123:8333
-162.210.198.184:8333
-162.248.99.164:53011
-162.248.102.117:8333
-162.251.108.53:8333
-163.44.2.48:8333
-163.158.36.17:8333
-166.230.71.67:8333
-167.160.36.62:8333
-167.160.169.92:8333
-168.93.129.220:8333
-169.55.99.84:8333
-169.228.66.43:8333
-172.9.169.242:8333
-173.32.11.194:8333
-173.230.228.136:8333
-173.246.107.34:8333
-173.254.235.34:8333
-174.0.128.222:8333
-174.25.130.148:8333
-174.50.64.101:8333
-175.140.232.141:8333
-176.36.37.62:8333
-176.46.9.96:8333
-176.124.110.27:8333
-177.39.16.102:8333
-178.17.173.2:8333
-178.62.5.248:8333
-178.62.70.16:8333
-178.62.203.185:8333
-178.79.160.118:8333
-178.169.206.244:8333
-178.193.234.62:8333
-178.199.96.108:8333
-178.254.18.96:8333
-178.254.34.161:8333
-178.255.41.123:8333
-180.210.34.58:9801
-182.92.226.212:8333
-182.171.246.142:8333
-184.23.8.9:8333
-184.58.162.35:8333
-184.154.9.170:8333
-185.8.238.165:8333
-185.24.97.11:8333
-185.31.137.139:8333
-185.38.44.64:8333
-185.53.128.180:8333
-185.53.129.244:8333
-185.77.129.119:8333
-185.77.129.156:8333
-185.82.203.92:8333
-188.20.97.18:8333
-188.126.8.14:8333
-188.138.33.239:8333
-188.155.136.70:8333
-188.166.229.112:8333
-188.182.108.129:8333
-188.226.225.174:8010
-188.242.171.8:8333
-188.243.4.139:8333
-190.10.9.234:8333
-190.10.10.147:8333
-190.81.160.184:8333
-190.85.201.37:8333
-192.34.227.230:8333
-192.77.189.200:8333
-192.124.224.7:8333
-192.146.137.1:8333
-192.203.228.71:8333
-192.206.202.20:8333
-193.0.109.3:8333
-193.41.229.130:8333
-193.41.229.156:8333
-193.49.43.219:8333
-193.147.71.120:8333
-193.179.65.233:8333
-193.183.99.46:8333
-193.192.37.135:8333
-193.234.224.195:8333
-194.58.108.213:8333
-194.187.96.2:8333
-194.255.31.59:8333
-195.36.6.101:8333
-195.58.238.243:8333
-195.197.175.190:8333
-195.239.1.66:8333
-198.48.196.230:8333
-198.50.192.160:8333
-198.57.210.27:8333
-198.84.195.179:8333
-198.167.140.8:8333
-198.204.224.106:8333
-199.127.226.245:8333
-199.201.110.8:8333
-199.233.234.90:8333
-200.116.98.185:8333
-202.60.70.18:8333
-203.151.140.14:8333
-204.112.203.52:8333
-205.200.247.149:8333
-207.226.141.253:8333
-207.255.42.202:8333
-208.53.164.19:8333
-208.66.68.127:8333
-208.66.68.130:8333
-208.71.171.232:8341
-208.76.200.200:8333
-208.82.98.189:8333
-208.85.193.31:8333
-208.111.48.41:8333
-208.111.48.45:8333
-209.34.232.72:8333
-209.81.9.223:8333
-209.90.224.2:8333
-209.90.224.4:8333
-209.126.98.174:8333
-209.136.72.69:8333
-209.195.4.74:8333
-209.197.13.62:8333
-211.72.227.8:8333
-212.51.144.42:8333
-212.71.233.127:8333
-212.126.14.122:8333
-212.159.44.50:8333
-213.5.36.58:8333
-213.57.33.10:8333
-213.66.205.194:8333
-213.136.73.125:8333
-213.155.3.216:8333
-213.155.7.24:8333
-213.167.17.6:8333
-213.223.138.13:8333
-216.15.78.182:8333
-216.38.129.164:8333
-216.48.168.8:8333
-216.169.141.169:8333
-216.245.206.181:8333
-216.249.204.161:8333
-216.250.138.230:8333
-217.11.225.189:8333
-217.12.34.158:8333
-217.12.202.33:8333
-217.20.171.43:8333
-217.23.1.126:8333
-217.23.11.138:8333
-217.111.66.79:8333
-217.155.202.191:8333
-217.158.9.102:8333
-217.172.32.18:20993
-220.245.196.37:8333
-[2001:1291:2bf:1::100]:8333
-[2001:1620:f00:282::2]:8333
-[2001:1620:f00:8282::1]:8333
-[2001:19f0:5000:8de8:5400:ff:fe12:55e4]:8333
-[2001:19f0:6c00:9103:5400:ff:fe10:a8d3]:8333
-[2001:1b60:3:172:142b:6dff:fe7a:117]:8333
-[2001:410:a000:4050:8463:90b0:fffb:4e58]:8333
-[2001:4128:6135:2010:21e:bff:fee8:a3c0]:8333
-[2001:41d0:1008:761::17c]:8333
-[2001:41d0:1:45d8::1]:8333
-[2001:41d0:1:6cd3::]:8333
-[2001:41d0:1:8b26::1]:8333
-[2001:41d0:1:afda::]:8200
-[2001:41d0:1:b26b::1]:8333
-[2001:41d0:1:c139::1]:8333
-[2001:41d0:1:c8d7::1]:8333
-[2001:41d0:1:f59f::33]:8333
-[2001:41d0:1:f7cc::1]:8333
-[2001:41d0:2:1021::1]:8333
-[2001:41d0:2:37c3::]:8200
-[2001:41d0:2:4797:2323:2323:2323:2323]:8333
-[2001:41d0:2:53df::]:8333
-[2001:41d0:2:9c94::1]:8333
-[2001:41d0:2:9d3e::1]:8333
-[2001:41d0:2:a24f::]:8333
-[2001:41d0:2:a35a::]:8333
-[2001:41d0:2:b2b8::]:8333
-[2001:41d0:2:c1d9::]:8333
-[2001:41d0:2:c6e::]:8333
-[2001:41d0:2:c9bf::]:8333
-[2001:41d0:2:f1a5::]:8333
-[2001:41d0:52:a00::105f]:8333
-[2001:41d0:52:cff::6f5]:8333
-[2001:41d0:52:d00::6e2]:8333
-[2001:41d0:8:3e75::1]:8333
-[2001:41d0:8:62ab::1]:8333
-[2001:41d0:8:6728::]:8333
-[2001:41d0:8:b30a::1]:8333
-[2001:41d0:8:bc26::1]:8333
-[2001:41d0:8:be9a::1]:8333
-[2001:41d0:8:d984::]:8333
-[2001:41d0:8:eb8b::]:8333
-[2001:41d0:a:13a2::1]:8333
-[2001:41d0:a:2b18::1]:8333
-[2001:41d0:a:2d14::]:8333
-[2001:41d0:a:4558::1df2:76d3]:8333
-[2001:41d0:a:4aaa::]:8333
-[2001:41d0:a:635b::1]:8333
-[2001:41d0:a:63d8::1]:8333
-[2001:41d0:a:6c29::1]:8333
-[2001:41d0:a:f9cd::1]:8333
-[2001:41d0:d:20a4::]:8333
-[2001:41d0:e:26b::1]:8333
-[2001:41d0:fc8c:a200:7a24:afff:fe9d:c69b]:8333
-[2001:41f0:61::7]:8333
-[2001:41f0::2]:8333
-[2001:44b8:41bd:6101:148e:4022:4950:e861]:8333
-[2001:470:1:2f9:0:1:107a:a301]:8333
-[2001:470:1f0b:ad6::2]:8333
-[2001:470:1f11:12d5::ae1:5611]:8333
-[2001:470:1f14:7d::2]:8333
-[2001:470:27:ce::2]:8333
-[2001:470:41:6::2]:8333
-[2001:470:507d:0:6ab5:99ff:fe73:ac18]:8333
-[2001:470:583e::2a]:8333
-[2001:470:5f:5f::232]:8333
-[2001:470:66:119::2]:8333
-[2001:470:6c4f::cafe]:8333
-[2001:470:6f:327:913b:7fe:8545:a4f5]:8333
-[2001:470:7dda:1::1]:8333
-[2001:470:95c1::2]:8333
-[2001:470:b1d0:ffff::1000]:8333
-[2001:470:d00d:0:3664:a9ff:fe9a:5150]:8333
-[2001:470:fab7:1::1]:8333
-[2001:4800:7819:104:be76:4eff:fe05:c828]:8333
-[2001:4800:7819:104:be76:4eff:fe05:c9a0]:8333
-[2001:4801:7819:74:b745:b9d5:ff10:a61a]:8333
-[2001:4801:7819:74:b745:b9d5:ff10:aaec]:8333
-[2001:4801:7828:104:be76:4eff:fe10:1325]:8333
-[2001:4802:7800:1:be76:4eff:fe20:f023]:8333
-[2001:4802:7800:2:30d7:1775:ff20:1858]:8333
-[2001:4802:7800:2:be76:4eff:fe20:6c26]:8333
-[2001:4802:7802:101:be76:4eff:fe20:256]:8333
-[2001:4802:7802:103:be76:4eff:fe20:2de8]:8333
-[2001:4830:1100:2e8::2]:8333
-[2001:4b98:dc2:41:216:3eff:fe56:f659]:8333
-[2001:4ba0:fffa:5d::93]:8333
-[2001:4ba0:ffff:1be:1:1005:0:1]:8333
-[2001:4dd0:ff00:867f::3]:8333
-[2001:4dd0:ff00:9a67::9]:8333
-[2001:5c0:1400:b::3cc7]:8333
-[2001:610:1b19::3]:8333
-[2001:610:600:a41::2]:8333
-[2001:67c:26b4::]:8333
-[2001:8d8:840:500::39:1ae]:8333
-[2001:8d8:965:4a00::10:9343]:8333
-[2001:980:4650:1:2e0:53ff:fe13:2449]:8333
-[2001:981:46:1:ba27:ebff:fe5b:edee]:8333
-[2001:9c8:53e9:369a:226:2dff:fe1b:7472]:8333
-[2001:9d8:cafe:3::87]:8333
-[2001:b10:11:21:3e07:54ff:fe48:7248]:8333
-[2001:ba8:1f1:f34c::2]:8333
-[2001:bc8:2310:100::1]:8333
-[2001:bc8:3427:101:7a4f:8be:2611:6e79]:8333
-[2001:bc8:3505:200::1]:8333
-[2001:cc0:a004::30:1d]:8333
-[2001:e42:102:1209:153:121:76:171]:8333
-[2002:17ea:14eb::17ea:14eb]:8333
-[2002:2f8:2bc5::2f8:2bc5]:8333
-[2002:4047:482c::4047:482c]:8333
-[2002:45c3:8cca::45c3:8cca]:8333
-[2002:46bb:8a41:0:226:b0ff:feed:5f12]:8888
-[2002:46bb:8c3c:0:8d55:8fbb:15fa:f4e0]:8765
-[2002:4c48:a0fe::4c48:a0fe]:8333
-[2002:4d44:25c8::4d44:25c8]:8333
-[2002:505f:aaa2::505f:aaa2]:8333
-[2002:5bc1:799d::5bc1:799d]:8333
-[2002:6dec:5472::6dec:5472]:8333
-[2002:8c6d:6521:9617:12bf:48ff:fed8:1724]:8333
-[2002:ac52:94e2::ac52:94e2]:8333
-[2002:af7e:3eca::af7e:3eca]:8333
-[2002:b009:20c5::b009:20c5]:8333
-[2002:c06f:39a0::c06f:39a0]:8333
-[2002:c23a:738a::c23a:738a]:8333
-[2002:c70f:7442::c70f:7442]:8333
-[2002:cec5:be4f::cec5:be4f]:8333
-[2002:d149:9e3a::d149:9e3a]:8333
-[2002:d917:ca5::d917:ca5]:8333
-[2400:8900::f03c:91ff:fe50:153f]:8333
-[2400:8900::f03c:91ff:fe6e:823e]:8333
-[2400:8900::f03c:91ff:fea8:1934]:8333
-[2400:8901::f03c:91ff:fe26:c4d6]:8333
-[2400:8901::f03c:91ff:fec8:4280]:8333
-[2400:8901::f03c:91ff:fec8:660f]:8333
-[2401:1800:7800:102:be76:4eff:fe1c:559]:8333
-[2401:1800:7800:102:be76:4eff:fe1c:a7d]:8333
-[2405:aa00:2::40]:8333
-[2600:3c00::f03c:91ff:fe18:59b2]:8333
-[2600:3c00::f03c:91ff:fe26:bfb6]:8333
-[2600:3c00::f03c:91ff:fe33:88e3]:8333
-[2600:3c00::f03c:91ff:fe6e:7297]:8333
-[2600:3c00::f03c:91ff:fe84:8a6e]:8333
-[2600:3c01::f03c:91ff:fe18:6adf]:8333
-[2600:3c01::f03c:91ff:fe26:c4b8]:8333
-[2600:3c01::f03c:91ff:fe3b:1f76]:8333
-[2600:3c01::f03c:91ff:fe50:5e06]:8333
-[2600:3c01::f03c:91ff:fe61:289b]:8333
-[2600:3c01::f03c:91ff:fe69:89e9]:8333
-[2600:3c01::f03c:91ff:fe84:ac15]:8333
-[2600:3c01::f03c:91ff:fe98:68bb]:8333
-[2600:3c02::f03c:91ff:fe26:713]:8333
-[2600:3c02::f03c:91ff:fe26:c49e]:8333
-[2600:3c02::f03c:91ff:fe84:97d8]:8333
-[2600:3c02::f03c:91ff:fec8:8feb]:8333
-[2600:3c03::f03c:91ff:fe18:da80]:8333
-[2600:3c03::f03c:91ff:fe26:c49b]:8333
-[2600:3c03::f03c:91ff:fe50:5fa7]:8333
-[2600:3c03::f03c:91ff:fe67:d2e]:8333
-[2600:3c03::f03c:91ff:fe6e:1803]:8333
-[2600:3c03::f03c:91ff:fec8:4bbe]:8333
-[2600:3c03::f03c:91ff:fee4:4e16]:8333
-[2601:18d:8300:58a6::2e4]:8333
-[2601:240:4600:40c0:250:56ff:fea4:6305]:8333
-[2601:581:c200:a719:542c:9cd5:4852:f7d9]:8333
-[2601:647:4900:85f1:ca2a:14ff:fe51:bb35]:8333
-[2601:c2:c002:b300:54a0:15b5:19f7:530d]:8333
-[2602:306:ccff:ad7f:b116:52be:64ba:db3a]:8333
-[2602:ae:1982:9400:846:f78c:fec:4d57]:8333
-[2602:ffc5:1f::1f:2d61]:8333
-[2602:ffc5:1f::1f:9211]:8333
-[2602:ffc5::75d5:c1c3]:8333
-[2602:ffc5::ffc5:b844]:8333
-[2602:ffe8:100:2::457:936b]:8333
-[2602:ffe8:100:2::9d20:2e3c]:8333
-[2602:ffea:1001:72b::578b]:8333
-[2602:ffea:a::24c4:d9fd]:8333
-[2604:0:c1:100:1ec1:deff:fe54:2235]:8333
-[2604:180:1:1af::42a9]:8333
-[2604:180:3:702::c9de]:8333
-[2604:4080:1114:0:3285:a9ff:fe93:850c]:8333
-[2604:6000:ffc0:3c:64a3:94d0:4f1d:1da8]:8333
-[2605:6000:f380:9a01:ba09:8aff:fed4:3511]:8333
-[2605:6001:e00f:7b00:c587:6d91:6eff:eeba]:8333
-[2605:f700:c0:1::25c3:2a3e]:8333
-[2606:6000:a441:9903:5054:ff:fe78:66ff]:8333
-[2607:5300:100:200::1c83]:9334
-[2607:5300:10::a1]:8333
-[2607:5300:60:1c2f::1]:8333
-[2607:5300:60:2b90::1]:8333
-[2607:5300:60:3320::1]:8333
-[2607:5300:60:385::1]:8333
-[2607:5300:60:4a85::]:8333
-[2607:5300:60:65e4::]:8333
-[2607:5300:60:6918::]:8333
-[2607:5300:60:711a:78::a7b5]:8333
-[2607:5300:60:714::1]:8333
-[2607:5300:60:870::1]:8333
-[2607:5300:60:952e:3733::1414]:8333
-[2607:f1c0:848:1000::48:943c]:8333
-[2607:f2e0:f:5df::2]:8333
-[2607:f748:1200:f8:21e:67ff:fe99:8f07]:8333
-[2607:f948:0:1::7]:8333
-[2607:ff68:100:36::131]:8333
-[2803:6900:1::117]:8333
-[2a00:1098:0:80:1000:25:0:1]:8333
-[2a00:1178:2:43:5054:ff:fe84:f86f]:8333
-[2a00:1178:2:43:5054:ff:fee7:2eb6]:8333
-[2a00:1178:2:43:8983:cc27:d72:d97a]:8333
-[2a00:1328:e100:cc42:230:48ff:fe92:55c]:8333
-[2a00:14f0:e000:80d2:cd1a::1]:8333
-[2a00:1630:2:1802:188:122:91:11]:8333
-[2a00:18e0:0:1800::1]:8333
-[2a00:18e0:0:dcc5:109:234:106:191]:8333
-[2a00:1a28:1157:87::94c7]:8333
-[2a00:1ca8:37::a5fc:40d1]:8333
-[2a00:1ca8:37::ab6d:ce2c]:8333
-[2a00:7143:100:0:216:3eff:fe2e:74a3]:8333
-[2a00:7143:100:0:216:3eff:fed3:5c21]:8333
-[2a00:7c80:0:45::123]:8333
-[2a00:dcc0:eda:98:183:193:c382:6bdb]:8333
-[2a00:dcc0:eda:98:183:193:f72e:d943]:8333
-[2a00:f820:17::4af:1]:8333
-[2a00:f940:2:1:2::101d]:8333
-[2a00:f940:2:1:2::6ac]:8333
-[2a01:1b0:7999:402::131]:8333
-[2a01:238:42dd:f900:7a6c:2bc6:4041:c43]:8333
-[2a01:238:4313:6300:2189:1c97:696b:5ea]:8333
-[2a01:488:66:1000:5c33:91f9:0:1]:8333
-[2a01:488:66:1000:b01c:178d:0:1]:8333
-[2a01:4f8:100:34ce::2]:8333
-[2a01:4f8:100:34e4::2]:8333
-[2a01:4f8:100:44e7::2]:8333
-[2a01:4f8:100:510e::2]:8333
-[2a01:4f8:100:5128::2]:8333
-[2a01:4f8:110:5105::2]:8333
-[2a01:4f8:110:516c::2]:8333
-[2a01:4f8:120:43e4::2]:8333
-[2a01:4f8:120:62e6::2]:8333
-[2a01:4f8:120:702e::2]:8333
-[2a01:4f8:120:8203::2]:8333
-[2a01:4f8:121:234d::2]:8333
-[2a01:4f8:121:261::2]:8333
-[2a01:4f8:130:11ea::2]:8333
-[2a01:4f8:130:3332::2]:8333
-[2a01:4f8:130:40ab::2]:8333
-[2a01:4f8:130:632c::2]:8333
-[2a01:4f8:130:6366::2]:8333
-[2a01:4f8:130:934f::2]:8333
-[2a01:4f8:131:33ad:fea1::666]:8333
-[2a01:4f8:140:2195::2]:8333
-[2a01:4f8:140:6333::2]:8333
-[2a01:4f8:140:930d::2]:8333
-[2a01:4f8:140:93b0::2]:8333
-[2a01:4f8:141:1167::2]:8333
-[2a01:4f8:141:186::2]:8333
-[2a01:4f8:141:53f0::2]:8333
-[2a01:4f8:150:336a::2]:8333
-[2a01:4f8:150:72ee::4202]:8333
-[2a01:4f8:150:8324::2]:9001
-[2a01:4f8:151:21ca::2]:8333
-[2a01:4f8:151:41c2:0:5404:a67e:f250]:8333
-[2a01:4f8:151:5128::2]:8333
-[2a01:4f8:151:52c6::154]:8333
-[2a01:4f8:151:6347::2]:9001
-[2a01:4f8:160:5136::2]:8333
-[2a01:4f8:160:72c5::2858:e1c5]:8333
-[2a01:4f8:160:72c5::593b:60d5]:8333
-[2a01:4f8:160:814f::2]:8333
-[2a01:4f8:161:13d0::2]:8333
-[2a01:4f8:161:228f::2]:8333
-[2a01:4f8:161:51c4::2]:8333
-[2a01:4f8:161:60a7::2]:8333
-[2a01:4f8:161:7026::2]:8333
-[2a01:4f8:161:9184::2]:8333
-[2a01:4f8:162:2108::2]:8333
-[2a01:4f8:162:218c::2]:8333
-[2a01:4f8:162:4443::2]:8333
-[2a01:4f8:162:51a3::2]:8333
-[2a01:4f8:171:b93::2]:8333
-[2a01:4f8:190:1483::1]:8333
-[2a01:4f8:190:4495::2]:8333
-[2a01:4f8:190:64c9::2]:8333
-[2a01:4f8:190:91ce::2]:8333
-[2a01:4f8:191:2194::83]:8333
-[2a01:4f8:191:40e8::2]:8333
-[2a01:4f8:191:44b4::2]:8333
-[2a01:4f8:191:8242::2]:8333
-[2a01:4f8:191:83a2::2]:8333
-[2a01:4f8:192:11b2::2]:8333
-[2a01:4f8:192:216c::2]:8333
-[2a01:4f8:192:22b3::2]:8333
-[2a01:4f8:192:440b::2]:8333
-[2a01:4f8:192:db::2]:8333
-[2a01:4f8:200:1012::2]:8333
-[2a01:4f8:200:23d1::dead:beef]:8333
-[2a01:4f8:200:506d::2]:8333
-[2a01:4f8:200:51f0::2]:8333
-[2a01:4f8:200:5389::2]:8333
-[2a01:4f8:200:53e3::2]:8333
-[2a01:4f8:200:6344::2]:8333
-[2a01:4f8:200:6396::2]:8333
-[2a01:4f8:200:63af::119]:8333
-[2a01:4f8:200:71e3:78b4:f3ff:fead:e8cf]:8333
-[2a01:4f8:201:214c::2]:8333
-[2a01:4f8:201:233:1::3]:8333
-[2a01:4f8:201:3e3::2]:8333
-[2a01:4f8:201:6011::4]:8333
-[2a01:4f8:201:60d5::2]:8333
-[2a01:4f8:202:265::2]:8333
-[2a01:4f8:202:3115::2]:8333
-[2a01:4f8:202:31e3::2]:8333
-[2a01:4f8:202:31ef::2]:8333
-[2a01:4f8:202:3392::2]:8333
-[2a01:4f8:202:53c3::2]:8333
-[2a01:4f8:202:63f4::2]:8333
-[2a01:4f8:202:7227::2]:8333
-[2a01:4f8:210:2227::2]:8333
-[2a01:4f8:210:24aa::2]:8333
-[2a01:4f8:211:14cf::2]:8333
-[2a01:4f8:211:181b::2]:8333
-[2a01:4f8:212:289e::2]:8333
-[2a01:4f8:212:33db::2]:18333
-[2a01:4f8:a0:112f::2]:8333
-[2a01:4f8:a0:3174::2]:8333
-[2a01:4f8:a0:328c::2]:8333
-[2a01:4f8:a0:5243::2]:8333
-[2a01:4f8:c17:19b9::2]:8333
-[2a01:4f8:c17:1a41::2]:8333
-[2a01:4f8:c17:1a92::2]:8333
-[2a01:4f8:c17:273::2]:8333
-[2a01:4f8:c17:435::2]:8333
-[2a01:4f8:c17:755::2]:8333
-[2a01:4f8:c17:b54::2]:8333
-[2a01:4f8:d16:9384::2]:8333
-[2a01:608:ffff:a009:8bf5:879d:e51a:f837]:8333
-[2a01:680:10:10:f2de:f1ff:fec9:dc0]:8333
-[2a01:7c8:aaac:1f6:5054:ff:fe30:e585]:8333
-[2a01:7c8:aaac:20b:5054:ff:fe24:435e]:8333
-[2a01:7c8:aaac:43d:5054:ff:fe4e:3dd4]:8333
-[2a01:7c8:aaad:256::1]:8333
-[2a01:7c8:aab6:ea:5054:ff:feff:eac3]:8333
-[2a01:7c8:aab9:5a:5054:ff:fe89:7b26]:8333
-[2a01:7c8:aabc:2c8:5054:ff:fe35:6581]:8333
-[2a01:7e00::f03c:91ff:fe18:301e]:8333
-[2a01:7e00::f03c:91ff:fe18:3942]:8333
-[2a01:7e00::f03c:91ff:fe26:8c87]:8333
-[2a01:7e00::f03c:91ff:fe50:6206]:8333
-[2a01:7e00::f03c:91ff:fe67:559d]:8333
-[2a01:7e00::f03c:91ff:fe84:434f]:8333
-[2a01:7e00::f03c:91ff:fe89:1143]:8333
-[2a01:7e00::f03c:91ff:fe98:2505]:8333
-[2a01:7e00::f03c:91ff:fedb:352e]:8333
-[2a01:7e01::f03c:91ff:fec8:d7b5]:8333
-[2a01:e34:ee33:1640:c504:f677:b28a:ba42]:8333
-[2a01:e35:2e7e:bc0:e079:f55e:cef3:b5d7]:8333
-[2a01:e35:2ee5:610:21f:d0ff:fe4e:7460]:8333
-[2a01:e35:8a3f:47c0:c617:feff:fe3c:9fbd]:8333
-[2a01:e35:8aca:6a0:211:aff:fe5e:295e]:8333
-[2a02:180:a:18:81:7:11:50]:8333
-[2a02:1810:1d87:6a00:5604:a6ff:fe60:d87d]:8333
-[2a02:2168:1144:5c01:d63d:7eff:fedd:4f8e]:8333
-[2a02:2498:6d7b:7001:b508:b39d:2cea:5b7a]:8333
-[2a02:2528:503:2::15]:8333
-[2a02:2528:fa:1a56:216:44ff:fe6a:d112]:8333
-[2a02:27f8:2012:0:e9f7:268f:c441:6129]:8333
-[2a02:348:86:3011::1]:8333
-[2a02:4780:1:1::1:8a01]:8333
-[2a02:578:5002:116::2]:8333
-[2a02:6080::1:190b:69e3]:8333
-[2a02:6080::1:e893:d9d6]:8333
-[2a02:770:4000::139]:8333
-[2a02:7aa0:1201::deb3:81a2]:8333
-[2a02:8010:b001::5860:59b5]:8333
-[2a02:810d:21c0:f00:a248:1cff:feb8:5348]:8333
-[2a02:a50::21b:24ff:fe93:4e39]:8333
-[2a02:a80:0:1200::2]:8333
-[2a02:c200:0:10:2:1:5830:1]:8333
-[2a02:c200:0:10:2:5:4692:1]:8333
-[2a02:c200:0:10:3:0:7158:1]:8333
-[2a02:c200:0:10::2244:1]:8333
-[2a02:c200:1:10:2:3:3339:1]:8333
-[2a02:c200:1:10:2:3:7844:1]:8333
-[2a02:c200:1:10:2:5:6288:1]:8333
-[2a02:c200:1:10:3:0:5912:1]:8333
-[2a03:4000:2:496::8]:8333
-[2a03:4000:6:8009::1]:8333
-[2a03:4000:6:8063::bcd0]:8333
-[2a03:4900:fffc:b::2]:8333
-[2a03:b0c0:1:d0::d:5001]:8333
-[2a03:f80:ed15:149:154:155:235:1]:8333
-[2a03:f80:ed15:149:154:155:241:1]:8333
-[2a03:f80:ed16:ca7:ea75:b12d:2af:9e2a]:8333
-[2a04:1980:3100:1aab:290:faff:fe70:a3d8]:8333
-[2a04:1980:3100:1aab:e61d:2dff:fe29:f590]:8333
-[2a04:2f80:6:200::89]:8333
-[2a04:ac00:1:4a0b:5054:ff:fe00:5af5]:8333
-[2a04:ad80:0:68::35da]:8333
-3ffk7iumtx3cegbi.onion:8333
-3nmbbakinewlgdln.onion:8333
-4j77gihpokxu2kj4.onion:8333
-546esc6botbjfbxb.onion:8333
-5at7sq5nm76xijkd.onion:8333
-77mx2jsxaoyesz2p.onion:8333
-7g7j54btiaxhtsiy.onion:8333
-a6obdgzn67l7exu3.onion:8333
-ab64h7olpl7qpxci.onion:8333
-am2a4rahltfuxz6l.onion:8333
-azuxls4ihrr2mep7.onion:8333
-bitcoin7bi4op7wb.onion:8333
-bitcoinostk4e4re.onion:8333
-bk7yp6epnmcllq72.onion:8333
-bmutjfrj5btseddb.onion:8333
-ceeji4qpfs3ms3zc.onion:8333
-clexmzqio7yhdao4.onion:8333
-gb5ypqt63du3wfhn.onion:8333
-h2vlpudzphzqxutd.onion:8333
-n42h7r6oumcfsbrs.onion:4176
-ncwk3lutemffcpc4.onion:8333
-okdzjarwekbshnof.onion:8333
-pjghcivzkoersesd.onion:8333
-rw7ocjltix26mefn.onion:8333
-uws7itep7o3yinxo.onion:8333
-vk3qjdehyy4dwcxw.onion:8333
-vqpye2k5rcqvj5mq.onion:8333
-wpi7rpvhnndl52ee.onion:8333
+101.37.28.146:8833
+109.205.212.243:8833
+121.36.243.160:8833
+132.145.29.145:8833
+141.147.71.107:8833
+141.147.73.58:8833
+141.98.90.157:8833
+146.190.23.5:8833
+157.245.45.154:8833
+165.227.173.101:8833
+167.172.107.0:8833
+167.99.253.72:8833
+172.104.5.209:8833
+178.128.227.12:8833
+181.45.56.1:8833
+182.43.92.100:8833
+186.12.200.15:8833
+192.46.215.125:8833
+5.188.238.193:8833
+5.9.151.50:8833
+51.161.131.90:8833
+54.39.49.96:8833
+173.249.12.11:8833
+207.180.227.207:8833
+167.86.91.2:8833
+167.86.87.54:8833
+167.86.85.148:8833
+167.86.124.240:8833
+18.215.33.154:8833
+23.239.15.91:8833
+193.122.107.175
+13.40.57.124
+[2603:c020:c00c:ab7e:fb40:f9f6:8078:4aa8]:8833
+[2600:1f18:da7:7900:e0e:7371:c000:89]:8833
+
diff --git a/depends/config.guess b/depends/config.guess
old mode 100644
new mode 100755
diff --git a/depends/config.site.in b/depends/config.site.in
old mode 100644
new mode 100755
diff --git a/depends/config.sub b/depends/config.sub
old mode 100644
new mode 100755
diff --git a/depends/packages/expat.mk b/depends/packages/expat.mk
index 1ac44353..758da52f 100644
--- a/depends/packages/expat.mk
+++ b/depends/packages/expat.mk
@@ -1,8 +1,8 @@
package=expat
-$(package)_version=2.1.0
+$(package)_version=2.6.2
$(package)_download_path=http://sourceforge.net/projects/expat/files/expat/$($(package)_version)
$(package)_file_name=$(package)-$($(package)_version).tar.gz
-$(package)_sha256_hash=823705472f816df21c8f6aa026dd162b280806838bb55b3432b0fb1fcca7eb86
+$(package)_sha256_hash=d4cf38d26e21a56654ffe4acd9cd5481164619626802328506a2869afab29ab3
define $(package)_set_vars
$(package)_config_opts=--disable-static
diff --git a/depends/packages/fontconfig.mk b/depends/packages/fontconfig.mk
index 2cf553ed..12430ad2 100644
--- a/depends/packages/fontconfig.mk
+++ b/depends/packages/fontconfig.mk
@@ -1,8 +1,8 @@
package=fontconfig
-$(package)_version=2.11.1
+$(package)_version=2.12.3
$(package)_download_path=http://www.freedesktop.org/software/fontconfig/release/
-$(package)_file_name=$(package)-$($(package)_version).tar.bz2
-$(package)_sha256_hash=dc62447533bca844463a3c3fd4083b57c90f18a70506e7a9f4936b5a1e516a99
+$(package)_file_name=$(package)-$($(package)_version).tar.gz
+$(package)_sha256_hash=ffc3cbf6dd9fcd516ee42f48306a715e66698b238933d6fa7cef02ea8b3b818e
$(package)_dependencies=freetype expat
define $(package)_set_vars
diff --git a/depends/packages/freetype.mk b/depends/packages/freetype.mk
index f7d6e0f9..84a9c11d 100644
--- a/depends/packages/freetype.mk
+++ b/depends/packages/freetype.mk
@@ -1,8 +1,8 @@
package=freetype
-$(package)_version=2.5.3
+$(package)_version=2.13.1
$(package)_download_path=http://downloads.sourceforge.net/$(package)
-$(package)_file_name=$(package)-$($(package)_version).tar.bz2
-$(package)_sha256_hash=c0848b29d52ef3ca27ad92e08351f023c5e24ce8cea7d8fe69fc96358e65f75e
+$(package)_file_name=$(package)-$($(package)_version).tar.gz
+$(package)_sha256_hash=0b109c59914f25b4411a8de2a506fdd18fa8457eb86eca6c7b15c19110a92fa5
define $(package)_set_vars
$(package)_config_opts=--without-zlib --without-png --disable-static
diff --git a/depends/packages/qt.mk b/depends/packages/qt.mk
index 84526d36..1d869e39 100644
--- a/depends/packages/qt.mk
+++ b/depends/packages/qt.mk
@@ -1,6 +1,6 @@
PACKAGE=qt
$(package)_version=5.5.0
-$(package)_download_path=http://download.qt.io/archive/qt/5.5/$($(package)_version)/submodules
+$(package)_download_path=http://download.qt.io/new_archive/qt/5.5/$($(package)_version)/submodules
$(package)_suffix=opensource-src-$($(package)_version).tar.gz
$(package)_file_name=qtbase-$($(package)_suffix)
$(package)_sha256_hash=7e82b1318f88e56a2a9376e069aa608d4fd96b48cb0e1b880ae658b0a1af0561
diff --git a/doc/howtominewindows.md b/doc/howtominewindows.md
new file mode 100644
index 00000000..ee3b92dd
--- /dev/null
+++ b/doc/howtominewindows.md
@@ -0,0 +1,92 @@
+# How to mine PEPEPOW (memehash) on Windows
+
+## Introduction:
+This guide will be a simple and basic walk-through for new or inexperienced window users to begin mining the proof of work cryptocurrency PepePoW for the first time. Proof-of-work cryptocurrencies are valued because they are decentralized and more fair and equitable due to the ability to earn and participate in the network by mining.
+
+You will need to set up a wallet to store your PepePoW coins, prepare the Windows environment to mine, download the mining software, and then use the interface on the pool website to view your mining earnings after you have started mining. Mining with a pool is recommended for most users, especially if you have something like a laptop or just not many graphics cards.
+
+By mining shared with the pool, you get part of the block working together with other miners. You get a percent of the block based on the weight and values of the shares your computer hardware delivers to the pool, based on its overall efficiency.
+
+PepePoW is a decentralized cryptocurrency with no central authority. As a miner, you are maintaining the ledger ensuring transactions are legitimate, and also getting rewarded for your effort. This means you have an easy and low-risk way to gain exposure and equity in most cryptocurrencies, simply by using the power of your own computer!
+
+## Creating your wallet
+If you have not already and would like to set up your PepePoW wallet - you can find the official wallet release below:
+https://github.com/MattF42/PePe-core/releases
+
+As a wallet owner, you are the sole custodian of your own funds, if you fail to secure your wallet data file properly you will lose access to your funds. That means If it is lost or stolen, no one can help you restore your funds! They will be lost forever!
+
+If you already have a wallet from another crypto, for example, Bitcoin Cash, and would prefer to mine PepePoW with your GPU and get paid out in Bitcoin Cash, you may do that as well. The section about setting up SRBMiner listed below will teach you how to connect your miner, Make sure to remember to change the username and password settings to the appropriate BCH wallet when you setup your miner.
+
+## Preparation:
+You will need to prepare the folder where you will install the mining software. If you are new to mining and want to try on a Windows operating system, please keep in mind that Windows anti-virus is incredibly hostile to all forms of mining and will always flag miners as malicious software, even if you have downloaded it from a trusted source such as GitHub. If you find that you are having trouble getting mining software to run on Windows, try this workaround:
+
+Press the "Windows" key on the taskbar or on your keyboard. Once the menu pulls up, start typing in "exclusions" on your keyboard. The tab will automatically recognize your typing and a page to the Windows settings for anti-virus exclusions will appear. Click on this option.
+
+This will take you to the "virus and threat protection" options menu. Under "Virus and threat protection settings" there is a blue link that says "manage settings." Click this and then scroll down until you find "Exclusions." Click on the blue link that says "add or remove exclusions"
+
+This will bring up another tab, which has a box with a plus arrow stating "+ add an exclusion" Clicking this gives a drop-down selection. Please select the option "Folder." Now a pop-up appears that will show you the entire computer directory. Navigate to the "documents" director and create a new folder by right-clicking in the inside area and choosing "new folder." Name this new folder anything like "mining" and then choose "Select folder" with the option on the bottom right until you have chosen this new folder.
+
+Once you are done you will return to the Windows security tab which we were in before and you should now see the new exclusion folder directory path appear. This will allow any program running from this folder to avoid antivirus scans which may affect mining, but not affect the security of the rest of your system.
+Another thing to consider doing at this point is taking advantage of a tool known as "O+O Windows Shutup." This removes certain tasks that Windows uses to track you. This adds security to your computer, as well as freeing up a bit of your processor to mine more efficiently than would otherwise be running these tasks.
+
+O+O Windows Shutup for removing Windows bloatware:
+https://www.oo-software.com/en/shutup10
+
+Windows 10 Debloater
+https://github.com/Sycnex/Windows10Debloater
+
+Now that you have created an area within your files to safely store and run mining software, download SRBMiner.
+
+## SRBMiner for GPUs
+Download and extract SRBMiner into the exclusion folder you created earlier
+https://github.com/doktor83/SRBMiner-Multi/releases
+
+After extracting, look in the folder and find the list of example batch files. Right-click to Rename one of the available example batch files anything that you will be able to remember. Then right-click again and click "Edit" (pick notepad if asked). Erase the example text and Copy and Paste from the below code instead. Remember to change the YOUR_WORKER_NAME value to your wallet address. This is how the pool knows where to send your rewards for mining.
+
+```
+setx GPU_MAX_HEAP_SIZE 100
+setx GPU_MAX_USE_SYNC_OBJECTS 1
+setx GPU_SINGLE_ALLOC_PERCENT 100
+setx GPU_MAX_ALLOC_PERCENT 100
+setx GPU_MAX_SINGLE_ALLOC_PERCENT 100
+@echo off
+cd %~dp0
+cls
+SRBMiner-MULTI.exe --disable-cpu --algorithm memehash --pool stratum-eu.pepepow.foztor.net:3332 --tls true --wallet YOUR_WALLET_ADDRESS --password RIG_NAME
+pause
+```
+
+Once this is complete, hit "File" and "Save as." Notepad will default the batch file as a text file, which will not run and instead will just open as a text file. To correct this you must change the "save as type" from .txt to "All files" or the batch file will not work. (see the example image below)
+Remember to "save as" the batch file as "all files"
+
+You can right-click on the batch file, and send it to the desktop (shortcut) to create a shortcut link on your desktop to your GPU mining software. Close out of everything and attempt to start the shortcut batch file on your desktop. It should start the SRBMiner in a command line box. It may ask you to accept some internet connection settings. The software will spit out a lot of information, so take a few minutes to observe. If everything was configured correctly you should see that your miner has connected to the pool, is hashing, and is also sometimes finding shares.
+
+Now that you know the connection and software works, you may want to spend some time to more finely tune your GPU devices.
+The best tool to adjust your GPU clock rate on Windows would be MSI afterburner for both AMD and NVIDIA:
+https://www.msi.com/Landing/afterburner/graphics-cards
+
+This part may require a lot of testing to make perfect. At the end of this guide, there are social links where you can get more detailed assistance with your specific hardware.
+
+After you are satisfied with your clock rates and can confirm you are hashing, head over to "https://pepepow.foztor.net/" and type in your wallet address under the "wallet" tab. You will see a variety of detailed information, primarily your workers and your percentage of shares submitted. Once the pool has found a block, you will earn a share of the rewards!
+
+## Conclusion:
+You made it to the end, great job! You are now mining with your GPU , maximizing the profitability of your computer's hardware!
+
+Click here to learn how to mine with your CPU and get paid in PEPEW
+PepePoW Discord: https://discord.gg/9BeGufq9ft
+SRBMiner Discord: https://discord.gg/az6wFepY8s
+
+How to sell your accumulated coins? Try XeggeX
+https://xeggex.com?ref=64a1904880f795c0d59a288b
+XeggeX Discord: https://discord.gg/dEAyJEHdHR
+
+Did you find this article to be informative? You should consider supporting decentralized initiatives by rewarding those who contribute to the ecosystem. By using the refcodes in this guide or even contributing a small donation - you would give me a big smile!
+
+My PePePoW Donation Address:
+ PT1JWC8cS89z3KFwRL46HS9ghjzSEJsYZ1
+Don't have any PEPEW yet?
+ bitcoin: bc1q5elx437hnz0l9qau8afxj9l234ps6lj60tr35s
+ litecoin: ltc1qdyt7augpzdkk4fzvaerrj3ren8pvvjhvy8cyz6
+ bitcoincash: qr609gkq7mnjqzh9j0nwjgy3xl4l6ezzmq7xj43mm4
+ dogecoin: DCnXGACgdYoNngjoufPTQ1DDNk71qGBW9D
+ monero: 86nye5vAP182z5tcDcmmapKsiFSNHnbyeGb7cDPnC4z4Bx1nfkVtAdEZwKy4Mde1TfNAaLuxc944kFA8QAXuE7gsHJkDefL
diff --git a/doc/pepeproofofworkstory.md b/doc/pepeproofofworkstory.md
new file mode 100644
index 00000000..06c3f8fc
--- /dev/null
+++ b/doc/pepeproofofworkstory.md
@@ -0,0 +1,186 @@
+# The PEPE Proof of Work Story
+
+## English
+ The PEPE POW story is about decentralization and the utility of code as law. Find out how the PEPEW network freed itself of central authority.
+
+ PEPE POW layer 1 blockchain core originated in early May 2023 in the form of a cryptocurrency code fork (DASH) produced by an unknown developer. Likely using AI-assisted tools and hoping to capitalize on the popularity of the PEPE Ethereum token which was growing (at the time) - a frog-themed dash fork was produced that claimed to one day rival doge-coin as the “second best” proof of work meme coin.
+
+ In the post-ETH-merge mining environment of 2023, the few miners who had not yet sold their cards or shut down their operations were desperate for something to believe in. They checked mining pool stats and Bitcoin talk forum every morning to find the newest coins – as the competition was so fierce and the rewards so sparsely distributed.
+
+ PEPE POW billed itself as a community coin which would align itself with the greats among decentralized meme coins. As the miners began to discover this new coin, the community grew and began to form a life of its own. A tipping point came when multiple commercial mining software developers released new mining software that supported the PEPE Pow algorithm “memehash” for GPUs.
+
+ Though the project was PEPE “Proof of Work” it included additional features borrowed from DASH, such as a proof of stake governance layer (which rewards master node owners with part of the block rewards) and of course, a developer fee. With the availability of commercial mining software, more pools and more miners became interested.
+
+ Though there was a developer fee on a “community coin” – the network participants were still motivated and interest grew rapidly, at a point doing so exponentially. As more and more miners began to onboard, the network hash rate grew and soon PEPE POW was on the top of the hashrate no charts as a top-performing proof of work asset for home graphics cards.
+
+ As the joy from the peaks subsided, real issues began to emerge. The code was botched, resulting in issues maintaining consensus. As the need for development rose, the original developer became quieter until eventually disappearing altogether, unable or unwilling to fix the issues of the chain, likely already selling everything he had earned.
+
+ Leaving the chain for dead, the community however refused to die. A band of organized community members, including a willing developer who was motivated to help, began the process of slowly taking over the chain. Exchanges and pool owners were notified of the change and more than once it seemed that there was no hope.
+
+ Like rescuing a patient from a certain death, many members rushed to the aid of the coin – proving that there was much more value in the meme cryptocurrency protocol than what was dumped on the market. With the proper work being done correctly (including the help of many contributors) the community was able to fork PEPE POW into a new master branch.
+
+ The original developer fee was removed and the chain managed to survive. PEPE POW now exists as a testament to the effectiveness of decentralization, specifically in the context of using computer code to solve the “Byzantine general” problem. PEPEW is able to survive with competing interests all existing together cohesively, “trustlessly.” (operating confidently with trust, without actually trusting any individual to be honest)
+
+ PEPEW has shown that open-source systems such as Bitcoin can be used by individuals to establish and maintain trustless decentralized networks without the need for a central authority, or a developer to skim from the top. Using the governance feature of smart nodes to incentivize node holders, as well as the ability to mine and earn using a home computer – PEPE Proof of Work is set to become the next best Proof of Work Memecoin!
+
+## Spanish
+
+¡Crea una cuenta en Github para comenzar a contribuir con esta traducción! Comuníquese con el equipo de desarrollo si necesita más información.
+
+## Finnish
+
+Luo tili Githubissa, jotta voit alkaa osallistua tähän käännökseen! Ota yhteyttä kehitystiimiin, jos tarvitset lisätietoja.
+
+## Swahili
+
+Fungua akaunti kwenye Github ili kuanza kuchangia tafsiri hii! Tafadhali wasiliana na timu ya maendeleo ikiwa unahitaji maelezo zaidi.
+
+## Amharic
+
+ለዚህ ትርጉም ማበርከት ለመጀመር በ Github ላይ መለያ ይፍጠሩ! ተጨማሪ መረጃ ከፈለጉ እባክዎን የልማት ቡድኑን ያግኙ።
+
+## Yoruba
+
+Ṣẹda akọọlẹ kan lori Github lati bẹrẹ idasi si itumọ yii! Jọwọ kan si ẹgbẹ idagbasoke ti o ba nilo alaye diẹ sii.
+
+## Hindi
+
+इस अनुवाद में योगदान शुरू करने के लिए Github पर एक खाता बनाएँ! यदि आपको अधिक जानकारी चाहिए तो कृपया विकास टीम से संपर्क करें।
+
+## Urdu
+
+اس ترجمے میں تعاون شروع کرنے کے لیے Github پر ایک اکاؤنٹ بنائیں! اگر آپ کو مزید معلومات درکار ہوں تو براہ کرم ترقیاتی ٹیم سے رابطہ کریں۔
+
+## Bengali
+
+এই অনুবাদে অবদান রাখা শুরু করতে Github-এ একটি অ্যাকাউন্ট তৈরি করুন! আপনার আরও তথ্যের প্রয়োজন হলে অনুগ্রহ করে উন্নয়ন দলের সাথে যোগাযোগ করুন।
+
+## Russian
+ История PEPE POW посвещена децентрализации и полезности кода как закона. Узнайте о том, как сеть PEPEW освободилась от центральной власти.
+
+ Ядро блокчейна PEPE POW Layer 1 возникло в начале Мая 2023 года в виде форка кода криптовалюты(DASH), которое было создано неизвестным разработчиком. Вероятно, используя инструменты с поддержкой искусственного интеллекта и надеясь извлечь выгоду из популярности токена PEPE Ethereum, которая росла (в то время) - был выпущен форк dash на тему лягушки, который претендовал на то, чтобы однажды конкурировать с doge-coin как “второй лучший” мем-коин с доказательством работы.
+
+ В условиях пост-эфирного слияния в 2023 году, те немногие майнеры, что еще не продали свои карты или не прекратили свою деятельность, отчаянно искали что-то, во что можно было бы верить. Они каждое утро проверяли майнинг пулы и посещали форумы, посвященные биткойну в поисках новых монет - поскольку конкуренция была очень жестокой, а награды распределялись так скудно.
+
+ PEPE POW объявила себя как монета сообщества, которая должна была стать одной из величайших среди децентрализованных мем-коинов. По мере того, как майнеры открывали для себя эту новую монету, сообщество росло и начинало жить своей собственной жизнью. Переломный момент наступил тогда, когда несколько разработчиков коммерческого программного обеспечения для майнинга выпустили новое ПО для майнинга, поддерживающее PEPE POW алгоритм "memhash" для графических карт.
+
+ Хотя проект и носил название PEPE "Proof of Work"(доказательство работы), он включал в себя дополнительные функции, которые были заимствованы у DASH, такие как уровень управления Proof of Stake (который вознаграждал владельцев мастер нод частью вознаграждения за блок) и, конечно же, плату разработчику. С появлением коммерческого программного обеспечения для майнинга, им заинтересовалось все больше пулов и майнеров.
+
+ И не смотря на то, что с "монеты сообщества" шла плата разработчику - участники сети все еще были мотивированы и их интерес рос, в моменте рост был даже в геометрической прогрессии. По мере того, как все больше и больше майнеров подключалось к сети, хешрейт сети увеличивался, и вскоре PEPE POW оказался на вершине чартов hashrate no как наиболее высокоэффективный актив с доказательством работы для домашних видеокарт.
+
+ Когда радость от вершин утихала, начали возникать реальные проблемы. Код был ошибочным, что привело к проблемам с поддержанием консенсуса. По мере того как потребность в разработке возрастала, первоначальный разработчик становился все тише, пока в конце концов не исчез вовсе, не сумев или не пожелав устранить проблемы в цепочке и вероятно, уже продав все, что заработал.
+
+ Оставив блокчейн на погибель, сообщество, однако, отказалось умирать. Группа организованных членов сообщества, включая добровольного разработчика, мотивированного помочь, начала процесс постепенного захвата сети. Биржи и владельцы пулов были уведомлены об изменениях, и не раз казалось, что уже надежды нет.
+
+ Подобно спасению пациента от неминуемой смерти, многие участники бросились на помощь монете, доказав, что в протоколе мем-криптовалюты гораздо больше ценности, чем в том, что было выброшено на рынок. При правильной работе, выполненной соответственно(включая помощь многих участников), сообщество смогло разветвить PEPE POW в новую основную ветку.
+
+ Первоначальная плата разработчику была удалена и цепи удалось выжить. Теперь PEPE POW существует как свидетельство эффективности децентрализации, особенно в контексте использования компьютерного кода для решения проблемы “Византийского генерала”. PEPEW способен выживать, когда конкурирующие интересы существуют вместе, сплоченно, «без доверия».(действуя уверенно и доверяя, фактически не доверяя ни одному человеку, если быть честным)
+
+ PEPEW показал, что системы с открытым исходным кодом, такие как Биткойн, могут использоваться отдельными людьми для создания и поддержания не требующих доверия децентрализованных сетей без необходимости в центральном органе власти или разработчике, который будет руководить сверху. Используя фунции управления смарт-нодами для стимулирования держателей этих узлов, а так же возможность майнить и зарабатывать на домамшнем компьютере - PEPE Proof-of-Work станет следующим лучшим мем-коином с алгоритмом доказательства работы!
+
+## Simple Chinese
+PEPE POW的故事涉及到"去中心化"和"代码即法律"的概念。让我们看看PEPEW网络是如何摆脱中央授权的。
+
+PEPE POW的第1层区块链核心始于2023年5月初,由一个神秘的开发团队使用加密货币代码分叉(Dash)开发。该开发人员可能使用了人工智能工具,并希望利用当时正在增长的PEPE以太坊代币的热度,创建了一个以青蛙为主题的Dash分叉,声称将有一天超越Dogecoin成为“第二大”工作量证明的迷因币。
+
+在2023年5月以太坊合并后,那些尚未出售显卡或关闭挖矿业务的少数幸存的矿工,迫切需要一些可以信任的东西。他们每天早上都会查看矿池统计数据和Bitcoin Talk论坛,以寻找最新的币。但由于竞争非常激烈,导致奖励也非常稀少。
+
+PEPE POW以成为“社区币”为目标,向“去中心化迷因币”中的佼佼者看齐。随着矿工们开始发现这种新币,社区不断壮大,并开始形成自己的生命。当多个商业挖矿软件开发人员发布了支持PEPE Pow GPU挖矿软件(算法“memehash”),一个转折点到来了。
+
+尽管PEPE POW是一种“工作量证明”(Proof of Work)加密货币,但它也包含了一些从Dash借用来的功能,例如“持有证明”(proof of stake)的治理层(将部分区块奖励奖励给主节点拥有者)和开发人员费用。随着商业挖矿软件的可用性,更多的矿池和矿工开始对其产生兴趣。
+
+尽管PEPE POW收取开发人员费用,但网络参与者仍然充满动力,兴趣迅速增长。随着越来越多的矿工加入,网络哈希率不断增长,PEPE POW很快就成为GPU家用显卡最佳的工作量证明资产之一,并在哈希率排行榜上名列前茅。
+
+随着高峰期的喜悦逐渐消退,真正的问题开始出现。代码出现了一些问题,导致共识受到威胁。随着开发需求的增加,原始开发人员变得越来越沉默,最终消失。他可能无法或不愿意解决“链”的问题,也有可能已经卖掉了所有他赚到的钱。
+
+尽管“链”被抛下不理,但社区成员却不接受链的死亡消息。一群社区成员和一位开发人员,开始接管“链”的过程。交易所和矿池经营者被告知了这一变化,而且不止一次,似乎没有希望了。
+
+就像从死亡中抢救病人一样,许多成员赶紧为这个币提供帮助,证明了这个迷因加密货币的价值。在许多贡献者的帮助下,随着一件件正确工作的完成,社区最终将PEPE POW分叉到一个新的主分支。
+
+原来的“开发人员费用”已被删除,并且“链”得以存活下来。PEPE POW现在的存在,证明了去中心化的有效性,特别是在解决“拜占庭将军”问题方面。PEPEW能够在彼此竞争共存的情况下“无信任”地运营(没有真正信任任何人诚实的情况下自信地运营)。
+
+PEPEW已经显示,像比特币这样的开源系统可以用于个人建立和维护去中心化网络,无需中央授权或开发人员获利。通过使用智能节点的治理功能来奖励节点拥有者,以及使用家用电脑挖矿和赚钱的能力,PEPE POW将成为下一个最好的“工作量证明”迷因币!
+## Traditional Chinese
+PEPE POW 的故事是關於「去中心化」和「程式碼即法律」的概念。讓我們來看看PEPEW 網路是如何擺脫中央授權的。
+
+PEPE POW 的第 1 層區塊鏈核心始於 2023 年 5 月初,由一個神祕開發人員團隊使用加密貨幣代碼分叉(Dash)開發。該開發人員可能使用的是人工智慧工具,並希望利用當時正在增長的 PEPE 以太坊代幣的熱度,創建了一個以青蛙為主題的 Dash 分叉,聲稱將有一天超越 Dogecoin 成為「第二大」工作量證明的迷因幣。
+
+在 2023 年 5 月以太坊合併後,那些尚未出售顯卡或關閉挖礦業務的少數倖存的礦工,迫切需要一些可以信任的東西。他們每天早上都會查看礦池統計數據和 Bitcoin Talk 論壇,以尋找最新的幣。但因為競爭非常激烈,導致獎勵也非常稀少。
+
+PEPE POW 以成為「社區幣」為目標,向「去中心化迷因幣」中的佼佼者看齊。隨著礦工們開始發現這種新幣,社區不斷壯大,並開始形成自己的生命。當多個商業挖礦軟體開發人員發布了支持 PEPE Pow GPU 挖礦軟體 (演算法「memehash」),一個轉折點到來了。
+
+儘管 PEPE POW 是一種「工作量證明」(Proof of Work) 加密貨,它但它也包含了一些從 Dash 借用來的功能,例如「持有證明」(proof of stake) 的治理層(將部分區塊獎勵獎勵給主節點擁有者)和開發人員費用。隨著商業挖礦軟件的可用性,更多的礦池和礦工開始對其產生興趣。
+
+儘管 PEPE POW 收取開發人員費用,但網路參與者仍然充滿動力,興趣迅速增長。隨著越來越多的礦工加入,網絡哈希率 (Hash rate) 不斷增長,PEPE POW 很快就成為 GPU 家用顯卡最佳的工作量證明資產之一,且在哈希率排行榜上名列前茅。
+
+隨著高峰期的喜悅逐漸消退,真正的問題開始出現。程式碼出現了一些問題,導致共識受到威脅。隨著開發需求的增加,原始開發人員變得越來越沉默,最終消失。他可能無法或不願意解決「鏈」的問題,也有可能已經賣掉了所有他賺到的錢。
+
+儘管「鏈」被拋下不理,但社群成員卻不接受鏈的死亡消息。一群社區成員和一位開發人員,開始接管「鏈」的過程。交易所和礦池經營者被告知了這一變化,而且不止一次,似乎沒有希望了。
+
+就像從死亡中搶救病人一樣,許多成員趕緊為這個幣提供幫助,證明了這個迷因加密貨幣的價值。在許多貢獻者的幫助下,隨著一件件正確工作的完成,社群最終將 PEPE POW 分叉到一個新的主分支。
+
+原來的「開發人員費用」已被刪除,並且「鏈」得以存活下來。PEPE POW 現在的存在,證明了去中心化的有效性,特別是在解決「拜占庭將軍」問題方面。PEPEW 能夠在彼此競爭共存的情況下「無信任」地運營(沒有真正信任任何人誠實的情況下自信地運營)。
+
+PEPEW 已經顯示,像比特幣這樣的開源系統可以用於個人建立和維護去中心化網絡,無需中央授權或開發人員獲利。通過使用智慧節點的治理功能來獎勵節點擁有者,以及使用家用電腦挖礦和賺錢的能力,PEPE POW 將成為下一個最好的「工作量證明」迷因幣!
+
+## Filipino
+
+Gumawa ng account sa Github para magsimulang mag-ambag sa pagsasaling ito! Mangyaring makipag-ugnayan sa development team kung kailangan mo ng higit pang impormasyon.
+
+## Thai
+
+PEPE POW เป็นเครือข่ายบล็อคเชนที่ไร้ศูนย์กลาง ซึ่งหมายความว่าไม่มีบุคคลหรือองค์กรใดที่จะสามารถควบคุมเครือข่ายได้ แต่เครือข่ายจะถูกควบคุมโดยสมาชิกของเครือข่ายเองทั้งหมด
+
+PEPE POW เริ่มต้นจากการเป็นฟอร์คของ DASH ซึ่งเป็นสกุลเงินดิจิทัลอีกสกุลหนึ่ง ซึ่งถูกสร้างขึ้นโดยนักพัฒนารายหนึ่งที่ไม่ทราบชื่อ นักพัฒนารายนี้ได้ใช้เครื่องมือที่ใช้ปัญญาประดิษฐ์ในการสร้างฟอร์คของ DASH ขึ้นมา และตั้งชื่อว่า PEPE POW โดยหวังว่าจะใช้ประโยชน์จากความนิยมของโทเค็น PEPE บน Ethereum ซึ่งกำลังเติบโตในขณะนั้น
+
+ในช่วงหลังการรวม ETH ซึ่งเป็นการอัปเกรดเครือข่าย Ethereum ที่ทำให้การขุด ETH ทำได้ยากขึ้น ทำให้คนขุดหลายคนหันมาขุดสกุลเงินดิจิทัลอื่นๆ แทน PEPE POW จึงเป็นหนึ่งในสกุลเงินดิจิทัลที่คนขุดให้ความสนใจ
+
+PEPE POW เป็นสกุลเงินดิจิทัลที่ใช้ระบบ Proof of Work ซึ่งหมายความว่าคนขุดจะต้องใช้คอมพิวเตอร์ที่มีประสิทธิภาพสูงในการขุด PEPE POW นอกจากนี้ PEPE POW ยังมีคุณสมบัติอื่นๆ ที่ยืมมาจาก DASH เช่น ระบบ Proof of Stake Governance Layer ซึ่งจะให้รางวัลกับผู้ถือ Master Node และค่าธรรมเนียมนักพัฒนา
+
+ในช่วงแรก PEPE POW ได้รับความสนใจจากคนขุดเป็นจำนวนมาก ทำให้แฮชเรตของเครือข่ายเพิ่มสูงขึ้นอย่างรวดเร็ว อย่างไรก็ตาม หลังจากนั้นไม่นาน ก็ได้มีปัญหาเกิดขึ้นกับโค้ดของ PEPE POW ซึ่งทำให้เครือข่ายไม่สามารถรักษาฉันทามติได้ นักพัฒนาเดิมของ PEPE POW ได้หายตัวไป ทำให้ไม่มีใครสามารถแก้ไขปัญหาของเครือข่ายได้
+
+อย่างไรก็ตาม ชุมชนของ PEPE POW ไม่ได้ยอมแพ้ พวกเขาได้รวมตัวกันและช่วยกันแก้ไขปัญหาของเครือข่ายจนสำเร็จ และได้ทำการฟอร์ค PEPE POW ไปเป็นเครือข่ายใหม่ ซึ่งมีชื่อว่า PEPE POW Master Branch
+
+PEPE POW Master Branch ได้ลบค่าธรรมเนียมนักพัฒนาออกไป และเครือข่ายก็สามารถกลับมาทำงานได้อีกครั้ง PEPE POW Master Branch จึงเป็นตัวอย่างที่ดีเยี่ยมของพลังแห่งการไร้ศูนย์กลาง แม้ว่านักพัฒนาเดิมจะหายตัวไป แต่ชุมชนก็ยังสามารถมาช่วยกันแก้ไขปัญหาและรักษาเครือข่ายให้คงอยู่ต่อไปได้
+
+PEPE POW Master Branch เป็นเครือข่ายที่ไร้ศูนย์กลางอย่างแท้จริง สมาชิกของเครือข่ายสามารถเปลี่ยนแปลงโค้ดและระบบการบริหารจัดการได้โดยไม่ต้องพึ่งพานักพัฒนาหรือหน่วยงานใดๆ ทำให้ PEPE POW เป็นเครือข่ายที่น่าเชื่อถือและปลอดภัย
+
+## Turkish
+
+Bu çeviriye katkıda bulunmaya başlamak için Github'da bir hesap oluşturun! Daha fazla bilgiye ihtiyaç duyarsanız lütfen geliştirme ekibiyle iletişime geçin.
+
+## French
+
+Créez un compte sur Github pour commencer à contribuer à cette traduction ! Veuillez contacter l'équipe de développement si vous avez besoin de plus d'informations.
+
+## German
+
+Erstellen Sie ein Konto auf Github, um zu dieser Übersetzung beizutragen! Bitte wenden Sie sich an das Entwicklungsteam, wenn Sie weitere Informationen benötigen.
+
+## Indonesian
+
+Buat akun di Github untuk mulai berkontribusi pada terjemahan ini! Silakan hubungi tim pengembangan jika Anda memerlukan informasi lebih lanjut.
+
+## Danish
+
+Opret en konto på Github for at begynde at bidrage til denne oversættelse! Kontakt venligst udviklingsteamet, hvis du har brug for mere information.
+
+## Arabic (عربي)
+
+تتحدث قصة PEPE POW عن التفكك وفائدة الشفرة كقانون. اكتشف كيف تمكنت شبكة PEPEW من تحرير نفسها من السلطة المركزية.
+ظهرت تقنية سلسلة كتل PEPE POW الأساسية في الطبقة 1 في أوائل مايو 2023 على شكل فورك لشفرة العملة المشفرة (DASH) المنتجة من قبل مطور غير معروف. ومن المحتمل أن يكون المطور استخدم أدوات مساعدة بالذكاء الاصطناعي ويأمل في الاستفادة من شعبية عملة Ethereum PEPE التي كانت تتزايد في ذلك الوقت - تم إنتاج فورك مستند إلى الضفدع يهدف إلى أن يكون في يوم ما منافسًا لعملة Doge-coin باعتبارها عملة تداول تذكارية ثانوية "الأفضل ثانيًا" بناءً على دليل العمل.
+في بيئة التعدين بعد دمج ETH في عام 2023، القليل من المُعدِّنين الذين لم يبيعوا بطاقاتهم بعد أو أغلقوا عملياتهم كانوا يبحثون عن شيء يؤمنون به. كانوا يتحققون من إحصاءات تجمع التعدين والمنتدى الخاص بـ "Bitcoin talk" كل صباح للعثور على العملات الجديدة - نظرًا لأن المنافسة كانت شرسة جدًا وتوزيع الأرباح كان قليلًا.
+ادعت PEPE POW أنها عملة مجتمعية ستُوازن نفسها مع العملات التداولية التذكارية المركزية الرائدة. مع اكتشاف المُعدِّنين لهذه العملة الجديدة، نمت المجتمع وبدأ في اكتساب حياة خاصة به. وجاءت نقطة تحول عندما أصدر مطورو برامج التعدين التجارية العديدة برامج تعدين جديدة تدعم خوارزمية PEPE Pow" memehash" على وحدات المعالجة الرسومية.
+
+على الرغم من أن المشروع كان يستخدم نموذج "دليل العمل" للـ PEPE، إلا أنه كان يتضمن ميزات إضافية مستلهمة من DASH، مثل طبقة حوكمة ملكية الحصة (التي تكافئ أصحاب العقدة الرئيسية بجزء من مكافآت الكتلة)، وبالطبع رسوم المطور. مع توافر برامج التعدين التجارية، أصبح المزيد من التجمعات والمُعدِّنين مهتمين.
+على الرغم من وجود رسوم مطور على "عملة مجتمعية"، كانالمشاركون في الشبكة لا يزالون متحمسين وينمو الاهتمام بسرعة، وفي بعض الأحيان بشكل تصاعدي. مع انضمام المزيد والمزيد من المُعدِّنين، ارتفعت معدلات الهاش في الشبكة وأصبحت PEPE POW في أعلى قائمة الهاشريت كأصل عملة عمل جيدة لبطاقات الرسوم المنزلية.
+ومع انحسار الفرح من الذروة، بدأت المشاكل الحقيقية في الظهور. تعاني الشفرة من مشاكل تتعلق بالتوافق. مع ارتفاع الحاجة إلى التطوير، أصبح المطور الأصلي أقل نشاطًا حتى اختفى تمامًا، غير قادر أو غير راغب في إصلاح مشاكل السلسلة وربما قد قام ببيع كل ما ربحه بالفعل.
+
+رغم ترك السلسلة للموت، رفض المجتمع أن يموت. بدأ فريق مكون من أعضاء منظمين في المجتمع، بما في ذلك مطور مستعد للمساعدة، في عملية تولي تدريجية للسيطرة على السلسلة. تم إبلاغ بورصات العملات وأصحاب التجمعات بالتغيير، وفي أكثر من مرة بدا أنه لا يوجد أمل.
+
+مثل إنقاذ مريض من الموت المحتوم، تسابق العديد من الأعضاء لدعم العملة - مما يثبت أن هناك قيمة أكبر في بروتوكول العملة التذكارية من ما تم تفريغه في السوق. مع إجراء العمل السليم بشكل صحيح (بما في ذلك مساعدة العديد من المساهمين)، تمكن المجتمع من فورك PEPE POW إلى فرع رئيسي جديد.
+
+تمت إزالة رسوم المطور الأصلية وتمكنت السلسلة من البقاء على قيد الحياة. تعد PEPE POW الآن شهادة على فعالية التفكيك، على وجه التحديد في سياق استخدام الشفرة الحاسوبية لحل مشكلة "الجنرال البيزنطي". يمكن لـ PEPEW البقاء مع وجود مصالح منافسة تعمل معًا بتماسك "بدون الحاجة إلى الثقة الفعلية في أي فرد ليكون صادقاً".
+
+أظهرت PEPEW أن الأنظمة مفتوحة المصدر مثل بيتكوين يمكن استخدامها بواسطة الأفراد لإنشاء والحفاظ على شبكات مفككة بدون الحاجة إلى سلطة مركزية أو مطور للحصول على جزء من الأرباح. باستخدام ميزة الحوكمة في العقد الذكية لتحفيز حاملي العقدة، بالإضافة إلى القدرة على التعدين والكسب باستخدام جهاز الكمبيوتر المنزلي - ستصبح PEPE Proof of Work أفضل عملة تذكارية ثانوية تعتمد على دليل العمل في المستقبل!
+
diff --git a/doc/runningamasternode.md b/doc/runningamasternode.md
new file mode 100644
index 00000000..57819193
--- /dev/null
+++ b/doc/runningamasternode.md
@@ -0,0 +1,91 @@
+## Running a Masternode
+
+Once you have accumulated 10,000,000 PEPEW you are eligible to become a participant in the network governance - and earn part of the block reward.
+
+### Linux wallet masternode:
+First, enable port 8833
+```
+sudo ufw allow 8833/tcp
+```
+
+To download the latest wallet version (2.4.7.1) and unpack it from a ubuntu command line terminal, use the following
+```
+mkdir pepew2471 &&
+sudo chmod +x -R pepew2471 &&
+cd pepew2471 &&
+wget -c https://github.com/MattF42/PePe-core/releases/download/v2.4.7.1/PEPEPOW-v2.4.7.1--release-cli-x86_64-linux-gnu.tgz -O - | tar -xz &&
+cd &&
+sudo chmod +x -R pepew2471 &&
+cd pepew2471
+```
+
+#### **1) Create a new wallet and transfer an exact total of 10,000,000 PEPEW!**
+*(Note: It has to be 10M no more or less! You must also wait for the Block confirmation to be greater than 15)*
+You may use the GUI to receive your coins, but then you need to run the "PEPEWd" before proceeding. You can do so in the terminal with the following command
+```
+~/pepew2471/PEPEPOWd
+```
+
+#### **2) Synchronize the block chain**
+*(Note: On GUI GNOME you can right-click within the folder and select "open in terminal")*
+
+Before you can start your node, your daemon must be fully synced. To check how many blocks you already have you can use
+```
+~/pepew2471/PEPEPOW-cli getblockcount
+```
+
+When you are fully updated you can confirm your balance is exactly 10,000,000 by running the following command
+```
+~/pepew2471/PEPEPOW-cli getbalance
+```
+
+Once you have done that, you are ready to get your genkey which will be used to setup your masternode.
+```
+~/pepew2471/PEPEPOW-cli masternode outputs &&
+~/pepew2471/PEPEPOW-cli masternode genkey
+```
+
+#### **3) Open the PEPEPOW.conf file and write to it:**
+
+Open PEPEPOW.conf
+```
+sudo nano ~/.PEPEPOWcore/PEPEPOW.conf
+```
+
+Write the following
+```
+Example:
+masternode=1
+masternodeprivkey=PUTHEREHTHESTRING_YOU_GET_FROM_GENKEY_NOT_THIS_ACTUAL_STRING
+externalip=YOUR.IP.ADDR.RESS_NOT_THIS_ACTUAL_STRING
+```
+*(Note: The IP address of the node server must be a public IP address, and port 8833 must be enabled on the server!)*
+
+#### **4) Open the masternode.conf file and write to it:**
+
+Open masternode.conf
+```
+sudo nano ~/.PEPEPOWcore/masternode.conf
+```
+
+Write the following
+```
+Example:
+mynodename ip:8833 masternodeprivkey masternode outputs[1] masternode outputs[2]
+pepepow YOUR.IP.ADDR.RESS:8833 PUTHEREHTHESTRING_YOU_GET_FROM_GENKEY_NOT_THIS_ACTUAL_STRING THE_FIRST_LONG_HEX_STRING_YOU_GET_FROM_MASTERNODEOUPUTS THE_NUMBER_YOU_GET_FROM_OUTPUTS
+```
+
+#### **5) Restart wallet**
+```
+sudo reboot
+```
+
+#### **6) Start master node:**
+```
+~/pepew2471/PEPEPOW-cli masternode start-all
+```
+
+#### **7) Check Status**
+```
+~/pepew2471/PEPEPOW-cli masternode status
+```
diff --git a/logo.png b/logo.png
new file mode 100644
index 00000000..c84dceb0
Binary files /dev/null and b/logo.png differ
diff --git a/qa/rpc-tests/test_framework/mininode.py b/qa/rpc-tests/test_framework/mininode.py
index d870e5c6..b304acb2 100644
--- a/qa/rpc-tests/test_framework/mininode.py
+++ b/qa/rpc-tests/test_framework/mininode.py
@@ -35,7 +35,7 @@
import dash_hash
BIP0031_VERSION = 60000
-MY_VERSION = 70223 # current MIN_PEER_PROTO_VERSION
+MY_VERSION = 70301 # current MIN_PEER_PROTO_VERSION
MY_SUBVERSION = b"/python-mininode-tester:0.0.2/"
MAX_INV_SZ = 50000
diff --git a/share/genbuild.sh b/share/genbuild.sh
old mode 100644
new mode 100755
index a15cb34e..e70d9218
--- a/share/genbuild.sh
+++ b/share/genbuild.sh
@@ -34,6 +34,7 @@ if [ -e "$(which git 2>/dev/null)" -a "$(git rev-parse --is-inside-work-tree 2>/
LAST_COMMIT_DATE="$(git log -n 1 --format="%ci")"
fi
+SUFFIX="-release"
if [ -n "$DESC" ]; then
NEWINFO="#define BUILD_DESC \"$DESC\""
elif [ -n "$SUFFIX" ]; then
diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include
index 8b080481..c36e36e4 100644
--- a/src/Makefile.qt.include
+++ b/src/Makefile.qt.include
@@ -387,7 +387,61 @@ RES_ICONS = \
qt/res/icons/trad/fontbigger.png \
qt/res/icons/trad/fontsmaller.png \
qt/res/icons/trad/transaction_abandoned.png \
- qt/res/icons/trad/network_disabled.png
+ qt/res/icons/trad/network_disabled.png \
+ qt/res/icons/mosaicco/add.png \
+ qt/res/icons/mosaicco/address-book.png \
+ qt/res/icons/mosaicco/browse.png \
+ qt/res/icons/mosaicco/clock1.png \
+ qt/res/icons/mosaicco/clock2.png \
+ qt/res/icons/mosaicco/clock3.png \
+ qt/res/icons/mosaicco/clock4.png \
+ qt/res/icons/mosaicco/clock5.png \
+ qt/res/icons/mosaicco/configure.png \
+ qt/res/icons/mosaicco/connect0_16.png \
+ qt/res/icons/mosaicco/connect1_16.png \
+ qt/res/icons/mosaicco/connect2_16.png \
+ qt/res/icons/mosaicco/connect3_16.png \
+ qt/res/icons/mosaicco/connect4_16.png \
+ qt/res/icons/mosaicco/debugwindow.png \
+ qt/res/icons/mosaicco/drkblue_editpaste.png \
+ qt/res/icons/mosaicco/drkblue_address-book.png \
+ qt/res/icons/mosaicco/drkblue_editcopy.png \
+ qt/res/icons/mosaicco/drkblue_remove.png \
+ qt/res/icons/mosaicco/edit.png \
+ qt/res/icons/mosaicco/editcopy.png \
+ qt/res/icons/mosaicco/editpaste.png \
+ qt/res/icons/mosaicco/export.png \
+ qt/res/icons/mosaicco/eye.png \
+ qt/res/icons/mosaicco/eye_minus.png \
+ qt/res/icons/mosaicco/eye_plus.png \
+ qt/res/icons/mosaicco/filesave.png \
+ qt/res/icons/mosaicco/hd_disabled.png \
+ qt/res/icons/mosaicco/hd_enabled.png \
+ qt/res/icons/mosaicco/history.png \
+ qt/res/icons/mosaicco/key.png \
+ qt/res/icons/mosaicco/lock_closed.png \
+ qt/res/icons/mosaicco/lock_open.png \
+ qt/res/icons/mosaicco/masternodes.png \
+ qt/res/icons/mosaicco/overview.png \
+ qt/res/icons/mosaicco/quit.png \
+ qt/res/icons/mosaicco/receive.png \
+ qt/res/icons/mosaicco/remove.png \
+ qt/res/icons/mosaicco/send.png \
+ qt/res/icons/mosaicco/synced.png \
+ qt/res/icons/mosaicco/transaction0.png \
+ qt/res/icons/mosaicco/transaction2.png \
+ qt/res/icons/mosaicco/transaction_conflicted.png \
+ qt/res/icons/mosaicco/tx_inout.png \
+ qt/res/icons/mosaicco/tx_input.png \
+ qt/res/icons/mosaicco/tx_output.png \
+ qt/res/icons/mosaicco/tx_mined.png \
+ qt/res/icons/mosaicco/about.png \
+ qt/res/icons/mosaicco/about_qt.png \
+ qt/res/icons/mosaicco/verify.png \
+ qt/res/icons/mosaicco/fontbigger.png \
+ qt/res/icons/mosaicco/fontsmaller.png \
+ qt/res/icons/mosaicco/transaction_abandoned.png \
+ qt/res/icons/mosaicco/network_disabled.png
BITCOIN_QT_CPP = \
qt/bantablemodel.cpp \
@@ -500,14 +554,28 @@ RES_IMAGES = \
qt/res/images/trad/drkblue_leftArrow_small.png \
qt/res/images/trad/drkblue_rightArrow_small.png \
qt/res/images/trad/drkblue_qtreeview_selected.png \
- qt/res/images/trad/drkblue_walletFrame_bg.png
+ qt/res/images/trad/drkblue_walletFrame_bg.png \
+ qt/res/images/mosaicco/about.png \
+ qt/res/images/mosaicco/splash.png \
+ qt/res/images/mosaicco/splash_testnet.png \
+ qt/res/images/mosaicco/dash_logo_horizontal.png \
+ qt/res/images/mosaicco/unchecked.png \
+ qt/res/images/mosaicco/checked.png \
+ qt/res/images/mosaicco/drkblue_downArrow.png \
+ qt/res/images/mosaicco/drkblue_downArrow_small.png \
+ qt/res/images/mosaicco/drkblue_upArrow_small.png \
+ qt/res/images/mosaicco/drkblue_leftArrow_small.png \
+ qt/res/images/mosaicco/drkblue_rightArrow_small.png \
+ qt/res/images/mosaicco/drkblue_qtreeview_selected.png \
+ qt/res/images/mosaicco/drkblue_walletFrame_bg.png
RES_CSS = \
qt/res/css/drkblue.css \
qt/res/css/crownium.css \
qt/res/css/light.css \
qt/res/css/light-hires.css \
- qt/res/css/trad.css
+ qt/res/css/trad.css \
+ qt/res/css/mosaicco.css
RES_MOVIES = $(wildcard qt/res/movies/spinner-*.png)
diff --git a/src/blake3.c b/src/blake3.c
new file mode 100644
index 00000000..9becead0
--- /dev/null
+++ b/src/blake3.c
@@ -0,0 +1,617 @@
+#include
+#include
+#include
+
+#include "blake3.h"
+#include "blake3_impl.h"
+
+const char *blake3_version(void) { return BLAKE3_VERSION_STRING; }
+
+INLINE void chunk_state_init(blake3_chunk_state *self, const uint32_t key[8],
+ uint8_t flags) {
+ memcpy(self->cv, key, BLAKE3_KEY_LEN);
+ self->chunk_counter = 0;
+ memset(self->buf, 0, BLAKE3_BLOCK_LEN);
+ self->buf_len = 0;
+ self->blocks_compressed = 0;
+ self->flags = flags;
+}
+
+INLINE void chunk_state_reset(blake3_chunk_state *self, const uint32_t key[8],
+ uint64_t chunk_counter) {
+ memcpy(self->cv, key, BLAKE3_KEY_LEN);
+ self->chunk_counter = chunk_counter;
+ self->blocks_compressed = 0;
+ memset(self->buf, 0, BLAKE3_BLOCK_LEN);
+ self->buf_len = 0;
+}
+
+INLINE size_t chunk_state_len(const blake3_chunk_state *self) {
+ return (BLAKE3_BLOCK_LEN * (size_t)self->blocks_compressed) +
+ ((size_t)self->buf_len);
+}
+
+INLINE size_t chunk_state_fill_buf(blake3_chunk_state *self,
+ const uint8_t *input, size_t input_len) {
+ size_t take = BLAKE3_BLOCK_LEN - ((size_t)self->buf_len);
+ if (take > input_len) {
+ take = input_len;
+ }
+ uint8_t *dest = self->buf + ((size_t)self->buf_len);
+ memcpy(dest, input, take);
+ self->buf_len += (uint8_t)take;
+ return take;
+}
+
+INLINE uint8_t chunk_state_maybe_start_flag(const blake3_chunk_state *self) {
+ if (self->blocks_compressed == 0) {
+ return CHUNK_START;
+ } else {
+ return 0;
+ }
+}
+
+typedef struct {
+ uint32_t input_cv[8];
+ uint64_t counter;
+ uint8_t block[BLAKE3_BLOCK_LEN];
+ uint8_t block_len;
+ uint8_t flags;
+} output_t;
+
+INLINE output_t make_output(const uint32_t input_cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags) {
+ output_t ret;
+ memcpy(ret.input_cv, input_cv, 32);
+ memcpy(ret.block, block, BLAKE3_BLOCK_LEN);
+ ret.block_len = block_len;
+ ret.counter = counter;
+ ret.flags = flags;
+ return ret;
+}
+
+// Chaining values within a given chunk (specifically the compress_in_place
+// interface) are represented as words. This avoids unnecessary bytes<->words
+// conversion overhead in the portable implementation. However, the hash_many
+// interface handles both user input and parent node blocks, so it accepts
+// bytes. For that reason, chaining values in the CV stack are represented as
+// bytes.
+INLINE void output_chaining_value(const output_t *self, uint8_t cv[32]) {
+ uint32_t cv_words[8];
+ memcpy(cv_words, self->input_cv, 32);
+ blake3_compress_in_place(cv_words, self->block, self->block_len,
+ self->counter, self->flags);
+ store_cv_words(cv, cv_words);
+}
+
+INLINE void output_root_bytes(const output_t *self, uint64_t seek, uint8_t *out,
+ size_t out_len) {
+ uint64_t output_block_counter = seek / 64;
+ size_t offset_within_block = seek % 64;
+ uint8_t wide_buf[64];
+ while (out_len > 0) {
+ blake3_compress_xof(self->input_cv, self->block, self->block_len,
+ output_block_counter, self->flags | ROOT, wide_buf);
+ size_t available_bytes = 64 - offset_within_block;
+ size_t memcpy_len;
+ if (out_len > available_bytes) {
+ memcpy_len = available_bytes;
+ } else {
+ memcpy_len = out_len;
+ }
+ memcpy(out, wide_buf + offset_within_block, memcpy_len);
+ out += memcpy_len;
+ out_len -= memcpy_len;
+ output_block_counter += 1;
+ offset_within_block = 0;
+ }
+}
+
+INLINE void chunk_state_update(blake3_chunk_state *self, const uint8_t *input,
+ size_t input_len) {
+ if (self->buf_len > 0) {
+ size_t take = chunk_state_fill_buf(self, input, input_len);
+ input += take;
+ input_len -= take;
+ if (input_len > 0) {
+ blake3_compress_in_place(
+ self->cv, self->buf, BLAKE3_BLOCK_LEN, self->chunk_counter,
+ self->flags | chunk_state_maybe_start_flag(self));
+ self->blocks_compressed += 1;
+ self->buf_len = 0;
+ memset(self->buf, 0, BLAKE3_BLOCK_LEN);
+ }
+ }
+
+ while (input_len > BLAKE3_BLOCK_LEN) {
+ blake3_compress_in_place(self->cv, input, BLAKE3_BLOCK_LEN,
+ self->chunk_counter,
+ self->flags | chunk_state_maybe_start_flag(self));
+ self->blocks_compressed += 1;
+ input += BLAKE3_BLOCK_LEN;
+ input_len -= BLAKE3_BLOCK_LEN;
+ }
+
+ chunk_state_fill_buf(self, input, input_len);
+}
+
+INLINE output_t chunk_state_output(const blake3_chunk_state *self) {
+ uint8_t block_flags =
+ self->flags | chunk_state_maybe_start_flag(self) | CHUNK_END;
+ return make_output(self->cv, self->buf, self->buf_len, self->chunk_counter,
+ block_flags);
+}
+
+INLINE output_t parent_output(const uint8_t block[BLAKE3_BLOCK_LEN],
+ const uint32_t key[8], uint8_t flags) {
+ return make_output(key, block, BLAKE3_BLOCK_LEN, 0, flags | PARENT);
+}
+
+// Given some input larger than one chunk, return the number of bytes that
+// should go in the left subtree. This is the largest power-of-2 number of
+// chunks that leaves at least 1 byte for the right subtree.
+INLINE size_t left_len(size_t content_len) {
+ // Subtract 1 to reserve at least one byte for the right side. content_len
+ // should always be greater than BLAKE3_CHUNK_LEN.
+ size_t full_chunks = (content_len - 1) / BLAKE3_CHUNK_LEN;
+ return round_down_to_power_of_2(full_chunks) * BLAKE3_CHUNK_LEN;
+}
+
+// Use SIMD parallelism to hash up to MAX_SIMD_DEGREE chunks at the same time
+// on a single thread. Write out the chunk chaining values and return the
+// number of chunks hashed. These chunks are never the root and never empty;
+// those cases use a different codepath.
+INLINE size_t compress_chunks_parallel(const uint8_t *input, size_t input_len,
+ const uint32_t key[8],
+ uint64_t chunk_counter, uint8_t flags,
+ uint8_t *out) {
+#if defined(BLAKE3_TESTING)
+ assert(0 < input_len);
+ assert(input_len <= MAX_SIMD_DEGREE * BLAKE3_CHUNK_LEN);
+#endif
+
+ const uint8_t *chunks_array[MAX_SIMD_DEGREE];
+ size_t input_position = 0;
+ size_t chunks_array_len = 0;
+ while (input_len - input_position >= BLAKE3_CHUNK_LEN) {
+ chunks_array[chunks_array_len] = &input[input_position];
+ input_position += BLAKE3_CHUNK_LEN;
+ chunks_array_len += 1;
+ }
+
+ blake3_hash_many(chunks_array, chunks_array_len,
+ BLAKE3_CHUNK_LEN / BLAKE3_BLOCK_LEN, key, chunk_counter,
+ true, flags, CHUNK_START, CHUNK_END, out);
+
+ // Hash the remaining partial chunk, if there is one. Note that the empty
+ // chunk (meaning the empty message) is a different codepath.
+ if (input_len > input_position) {
+ uint64_t counter = chunk_counter + (uint64_t)chunks_array_len;
+ blake3_chunk_state chunk_state;
+ chunk_state_init(&chunk_state, key, flags);
+ chunk_state.chunk_counter = counter;
+ chunk_state_update(&chunk_state, &input[input_position],
+ input_len - input_position);
+ output_t output = chunk_state_output(&chunk_state);
+ output_chaining_value(&output, &out[chunks_array_len * BLAKE3_OUT_LEN]);
+ return chunks_array_len + 1;
+ } else {
+ return chunks_array_len;
+ }
+}
+
+// Use SIMD parallelism to hash up to MAX_SIMD_DEGREE parents at the same time
+// on a single thread. Write out the parent chaining values and return the
+// number of parents hashed. (If there's an odd input chaining value left over,
+// return it as an additional output.) These parents are never the root and
+// never empty; those cases use a different codepath.
+INLINE size_t compress_parents_parallel(const uint8_t *child_chaining_values,
+ size_t num_chaining_values,
+ const uint32_t key[8], uint8_t flags,
+ uint8_t *out) {
+#if defined(BLAKE3_TESTING)
+ assert(2 <= num_chaining_values);
+ assert(num_chaining_values <= 2 * MAX_SIMD_DEGREE_OR_2);
+#endif
+
+ const uint8_t *parents_array[MAX_SIMD_DEGREE_OR_2];
+ size_t parents_array_len = 0;
+ while (num_chaining_values - (2 * parents_array_len) >= 2) {
+ parents_array[parents_array_len] =
+ &child_chaining_values[2 * parents_array_len * BLAKE3_OUT_LEN];
+ parents_array_len += 1;
+ }
+
+ blake3_hash_many(parents_array, parents_array_len, 1, key,
+ 0, // Parents always use counter 0.
+ false, flags | PARENT,
+ 0, // Parents have no start flags.
+ 0, // Parents have no end flags.
+ out);
+
+ // If there's an odd child left over, it becomes an output.
+ if (num_chaining_values > 2 * parents_array_len) {
+ memcpy(&out[parents_array_len * BLAKE3_OUT_LEN],
+ &child_chaining_values[2 * parents_array_len * BLAKE3_OUT_LEN],
+ BLAKE3_OUT_LEN);
+ return parents_array_len + 1;
+ } else {
+ return parents_array_len;
+ }
+}
+
+// The wide helper function returns (writes out) an array of chaining values
+// and returns the length of that array. The number of chaining values returned
+// is the dynamically detected SIMD degree, at most MAX_SIMD_DEGREE. Or fewer,
+// if the input is shorter than that many chunks. The reason for maintaining a
+// wide array of chaining values going back up the tree, is to allow the
+// implementation to hash as many parents in parallel as possible.
+//
+// As a special case when the SIMD degree is 1, this function will still return
+// at least 2 outputs. This guarantees that this function doesn't perform the
+// root compression. (If it did, it would use the wrong flags, and also we
+// wouldn't be able to implement extendable output.) Note that this function is
+// not used when the whole input is only 1 chunk long; that's a different
+// codepath.
+//
+// Why not just have the caller split the input on the first update(), instead
+// of implementing this special rule? Because we don't want to limit SIMD or
+// multi-threading parallelism for that update().
+static size_t blake3_compress_subtree_wide(const uint8_t *input,
+ size_t input_len,
+ const uint32_t key[8],
+ uint64_t chunk_counter,
+ uint8_t flags, uint8_t *out) {
+ // Note that the single chunk case does *not* bump the SIMD degree up to 2
+ // when it is 1. If this implementation adds multi-threading in the future,
+ // this gives us the option of multi-threading even the 2-chunk case, which
+ // can help performance on smaller platforms.
+ if (input_len <= blake3_simd_degree() * BLAKE3_CHUNK_LEN) {
+ return compress_chunks_parallel(input, input_len, key, chunk_counter, flags,
+ out);
+ }
+
+ // With more than simd_degree chunks, we need to recurse. Start by dividing
+ // the input into left and right subtrees. (Note that this is only optimal
+ // as long as the SIMD degree is a power of 2. If we ever get a SIMD degree
+ // of 3 or something, we'll need a more complicated strategy.)
+ size_t left_input_len = left_len(input_len);
+ size_t right_input_len = input_len - left_input_len;
+ const uint8_t *right_input = &input[left_input_len];
+ uint64_t right_chunk_counter =
+ chunk_counter + (uint64_t)(left_input_len / BLAKE3_CHUNK_LEN);
+
+ // Make space for the child outputs. Here we use MAX_SIMD_DEGREE_OR_2 to
+ // account for the special case of returning 2 outputs when the SIMD degree
+ // is 1.
+ uint8_t cv_array[2 * MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN];
+ size_t degree = blake3_simd_degree();
+ if (left_input_len > BLAKE3_CHUNK_LEN && degree == 1) {
+ // The special case: We always use a degree of at least two, to make
+ // sure there are two outputs. Except, as noted above, at the chunk
+ // level, where we allow degree=1. (Note that the 1-chunk-input case is
+ // a different codepath.)
+ degree = 2;
+ }
+ uint8_t *right_cvs = &cv_array[degree * BLAKE3_OUT_LEN];
+
+ // Recurse! If this implementation adds multi-threading support in the
+ // future, this is where it will go.
+ size_t left_n = blake3_compress_subtree_wide(input, left_input_len, key,
+ chunk_counter, flags, cv_array);
+ size_t right_n = blake3_compress_subtree_wide(
+ right_input, right_input_len, key, right_chunk_counter, flags, right_cvs);
+
+ // The special case again. If simd_degree=1, then we'll have left_n=1 and
+ // right_n=1. Rather than compressing them into a single output, return
+ // them directly, to make sure we always have at least two outputs.
+ if (left_n == 1) {
+ memcpy(out, cv_array, 2 * BLAKE3_OUT_LEN);
+ return 2;
+ }
+
+ // Otherwise, do one layer of parent node compression.
+ size_t num_chaining_values = left_n + right_n;
+ return compress_parents_parallel(cv_array, num_chaining_values, key, flags,
+ out);
+}
+
+// Hash a subtree with compress_subtree_wide(), and then condense the resulting
+// list of chaining values down to a single parent node. Don't compress that
+// last parent node, however. Instead, return its message bytes (the
+// concatenated chaining values of its children). This is necessary when the
+// first call to update() supplies a complete subtree, because the topmost
+// parent node of that subtree could end up being the root. It's also necessary
+// for extended output in the general case.
+//
+// As with compress_subtree_wide(), this function is not used on inputs of 1
+// chunk or less. That's a different codepath.
+INLINE void compress_subtree_to_parent_node(
+ const uint8_t *input, size_t input_len, const uint32_t key[8],
+ uint64_t chunk_counter, uint8_t flags, uint8_t out[2 * BLAKE3_OUT_LEN]) {
+#if defined(BLAKE3_TESTING)
+ assert(input_len > BLAKE3_CHUNK_LEN);
+#endif
+
+ uint8_t cv_array[MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN];
+ size_t num_cvs = blake3_compress_subtree_wide(input, input_len, key,
+ chunk_counter, flags, cv_array);
+ assert(num_cvs <= MAX_SIMD_DEGREE_OR_2);
+ // The following loop never executes when MAX_SIMD_DEGREE_OR_2 is 2, because
+ // as we just asserted, num_cvs will always be <=2 in that case. But GCC
+ // (particularly GCC 8.5) can't tell that it never executes, and if NDEBUG is
+ // set then it emits incorrect warnings here. We tried a few different
+ // hacks to silence these, but in the end our hacks just produced different
+ // warnings (see https://github.com/BLAKE3-team/BLAKE3/pull/380). Out of
+ // desperation, we ifdef out this entire loop when we know it's not needed.
+#if MAX_SIMD_DEGREE_OR_2 > 2
+ // If MAX_SIMD_DEGREE_OR_2 is greater than 2 and there's enough input,
+ // compress_subtree_wide() returns more than 2 chaining values. Condense
+ // them into 2 by forming parent nodes repeatedly.
+ uint8_t out_array[MAX_SIMD_DEGREE_OR_2 * BLAKE3_OUT_LEN / 2];
+ while (num_cvs > 2) {
+ num_cvs =
+ compress_parents_parallel(cv_array, num_cvs, key, flags, out_array);
+ memcpy(cv_array, out_array, num_cvs * BLAKE3_OUT_LEN);
+ }
+#endif
+ memcpy(out, cv_array, 2 * BLAKE3_OUT_LEN);
+}
+
+INLINE void hasher_init_base(blake3_hasher *self, const uint32_t key[8],
+ uint8_t flags) {
+ memcpy(self->key, key, BLAKE3_KEY_LEN);
+ chunk_state_init(&self->chunk, key, flags);
+ self->cv_stack_len = 0;
+}
+
+void blake3_hasher_init(blake3_hasher *self) { hasher_init_base(self, IV, 0); }
+
+void blake3_hasher_init_keyed(blake3_hasher *self,
+ const uint8_t key[BLAKE3_KEY_LEN]) {
+ uint32_t key_words[8];
+ load_key_words(key, key_words);
+ hasher_init_base(self, key_words, KEYED_HASH);
+}
+
+void blake3_hasher_init_derive_key_raw(blake3_hasher *self, const void *context,
+ size_t context_len) {
+ blake3_hasher context_hasher;
+ hasher_init_base(&context_hasher, IV, DERIVE_KEY_CONTEXT);
+ blake3_hasher_update(&context_hasher, context, context_len);
+ uint8_t context_key[BLAKE3_KEY_LEN];
+ blake3_hasher_finalize(&context_hasher, context_key, BLAKE3_KEY_LEN);
+ uint32_t context_key_words[8];
+ load_key_words(context_key, context_key_words);
+ hasher_init_base(self, context_key_words, DERIVE_KEY_MATERIAL);
+}
+
+void blake3_hasher_init_derive_key(blake3_hasher *self, const char *context) {
+ blake3_hasher_init_derive_key_raw(self, context, strlen(context));
+}
+
+// As described in hasher_push_cv() below, we do "lazy merging", delaying
+// merges until right before the next CV is about to be added. This is
+// different from the reference implementation. Another difference is that we
+// aren't always merging 1 chunk at a time. Instead, each CV might represent
+// any power-of-two number of chunks, as long as the smaller-above-larger stack
+// order is maintained. Instead of the "count the trailing 0-bits" algorithm
+// described in the spec, we use a "count the total number of 1-bits" variant
+// that doesn't require us to retain the subtree size of the CV on top of the
+// stack. The principle is the same: each CV that should remain in the stack is
+// represented by a 1-bit in the total number of chunks (or bytes) so far.
+INLINE void hasher_merge_cv_stack(blake3_hasher *self, uint64_t total_len) {
+ size_t post_merge_stack_len = (size_t)popcnt(total_len);
+ while (self->cv_stack_len > post_merge_stack_len) {
+ uint8_t *parent_node =
+ &self->cv_stack[(self->cv_stack_len - 2) * BLAKE3_OUT_LEN];
+ output_t output = parent_output(parent_node, self->key, self->chunk.flags);
+ output_chaining_value(&output, parent_node);
+ self->cv_stack_len -= 1;
+ }
+}
+
+// In reference_impl.rs, we merge the new CV with existing CVs from the stack
+// before pushing it. We can do that because we know more input is coming, so
+// we know none of the merges are root.
+//
+// This setting is different. We want to feed as much input as possible to
+// compress_subtree_wide(), without setting aside anything for the chunk_state.
+// If the user gives us 64 KiB, we want to parallelize over all 64 KiB at once
+// as a single subtree, if at all possible.
+//
+// This leads to two problems:
+// 1) This 64 KiB input might be the only call that ever gets made to update.
+// In this case, the root node of the 64 KiB subtree would be the root node
+// of the whole tree, and it would need to be ROOT finalized. We can't
+// compress it until we know.
+// 2) This 64 KiB input might complete a larger tree, whose root node is
+// similarly going to be the root of the whole tree. For example, maybe
+// we have 196 KiB (that is, 128 + 64) hashed so far. We can't compress the
+// node at the root of the 256 KiB subtree until we know how to finalize it.
+//
+// The second problem is solved with "lazy merging". That is, when we're about
+// to add a CV to the stack, we don't merge it with anything first, as the
+// reference impl does. Instead we do merges using the *previous* CV that was
+// added, which is sitting on top of the stack, and we put the new CV
+// (unmerged) on top of the stack afterwards. This guarantees that we never
+// merge the root node until finalize().
+//
+// Solving the first problem requires an additional tool,
+// compress_subtree_to_parent_node(). That function always returns the top
+// *two* chaining values of the subtree it's compressing. We then do lazy
+// merging with each of them separately, so that the second CV will always
+// remain unmerged. (That also helps us support extendable output when we're
+// hashing an input all-at-once.)
+INLINE void hasher_push_cv(blake3_hasher *self, uint8_t new_cv[BLAKE3_OUT_LEN],
+ uint64_t chunk_counter) {
+ hasher_merge_cv_stack(self, chunk_counter);
+ memcpy(&self->cv_stack[self->cv_stack_len * BLAKE3_OUT_LEN], new_cv,
+ BLAKE3_OUT_LEN);
+ self->cv_stack_len += 1;
+}
+
+void blake3_hasher_update(blake3_hasher *self, const void *input,
+ size_t input_len) {
+ // Explicitly checking for zero avoids causing UB by passing a null pointer
+ // to memcpy. This comes up in practice with things like:
+ // std::vector v;
+ // blake3_hasher_update(&hasher, v.data(), v.size());
+ if (input_len == 0) {
+ return;
+ }
+
+ const uint8_t *input_bytes = (const uint8_t *)input;
+
+ // If we have some partial chunk bytes in the internal chunk_state, we need
+ // to finish that chunk first.
+ if (chunk_state_len(&self->chunk) > 0) {
+ size_t take = BLAKE3_CHUNK_LEN - chunk_state_len(&self->chunk);
+ if (take > input_len) {
+ take = input_len;
+ }
+ chunk_state_update(&self->chunk, input_bytes, take);
+ input_bytes += take;
+ input_len -= take;
+ // If we've filled the current chunk and there's more coming, finalize this
+ // chunk and proceed. In this case we know it's not the root.
+ if (input_len > 0) {
+ output_t output = chunk_state_output(&self->chunk);
+ uint8_t chunk_cv[32];
+ output_chaining_value(&output, chunk_cv);
+ hasher_push_cv(self, chunk_cv, self->chunk.chunk_counter);
+ chunk_state_reset(&self->chunk, self->key, self->chunk.chunk_counter + 1);
+ } else {
+ return;
+ }
+ }
+
+ // Now the chunk_state is clear, and we have more input. If there's more than
+ // a single chunk (so, definitely not the root chunk), hash the largest whole
+ // subtree we can, with the full benefits of SIMD (and maybe in the future,
+ // multi-threading) parallelism. Two restrictions:
+ // - The subtree has to be a power-of-2 number of chunks. Only subtrees along
+ // the right edge can be incomplete, and we don't know where the right edge
+ // is going to be until we get to finalize().
+ // - The subtree must evenly divide the total number of chunks up until this
+ // point (if total is not 0). If the current incomplete subtree is only
+ // waiting for 1 more chunk, we can't hash a subtree of 4 chunks. We have
+ // to complete the current subtree first.
+ // Because we might need to break up the input to form powers of 2, or to
+ // evenly divide what we already have, this part runs in a loop.
+ while (input_len > BLAKE3_CHUNK_LEN) {
+ size_t subtree_len = round_down_to_power_of_2(input_len);
+ uint64_t count_so_far = self->chunk.chunk_counter * BLAKE3_CHUNK_LEN;
+ // Shrink the subtree_len until it evenly divides the count so far. We know
+ // that subtree_len itself is a power of 2, so we can use a bitmasking
+ // trick instead of an actual remainder operation. (Note that if the caller
+ // consistently passes power-of-2 inputs of the same size, as is hopefully
+ // typical, this loop condition will always fail, and subtree_len will
+ // always be the full length of the input.)
+ //
+ // An aside: We don't have to shrink subtree_len quite this much. For
+ // example, if count_so_far is 1, we could pass 2 chunks to
+ // compress_subtree_to_parent_node. Since we'll get 2 CVs back, we'll still
+ // get the right answer in the end, and we might get to use 2-way SIMD
+ // parallelism. The problem with this optimization, is that it gets us
+ // stuck always hashing 2 chunks. The total number of chunks will remain
+ // odd, and we'll never graduate to higher degrees of parallelism. See
+ // https://github.com/BLAKE3-team/BLAKE3/issues/69.
+ while ((((uint64_t)(subtree_len - 1)) & count_so_far) != 0) {
+ subtree_len /= 2;
+ }
+ // The shrunken subtree_len might now be 1 chunk long. If so, hash that one
+ // chunk by itself. Otherwise, compress the subtree into a pair of CVs.
+ uint64_t subtree_chunks = subtree_len / BLAKE3_CHUNK_LEN;
+ if (subtree_len <= BLAKE3_CHUNK_LEN) {
+ blake3_chunk_state chunk_state;
+ chunk_state_init(&chunk_state, self->key, self->chunk.flags);
+ chunk_state.chunk_counter = self->chunk.chunk_counter;
+ chunk_state_update(&chunk_state, input_bytes, subtree_len);
+ output_t output = chunk_state_output(&chunk_state);
+ uint8_t cv[BLAKE3_OUT_LEN];
+ output_chaining_value(&output, cv);
+ hasher_push_cv(self, cv, chunk_state.chunk_counter);
+ } else {
+ // This is the high-performance happy path, though getting here depends
+ // on the caller giving us a long enough input.
+ uint8_t cv_pair[2 * BLAKE3_OUT_LEN];
+ compress_subtree_to_parent_node(input_bytes, subtree_len, self->key,
+ self->chunk.chunk_counter,
+ self->chunk.flags, cv_pair);
+ hasher_push_cv(self, cv_pair, self->chunk.chunk_counter);
+ hasher_push_cv(self, &cv_pair[BLAKE3_OUT_LEN],
+ self->chunk.chunk_counter + (subtree_chunks / 2));
+ }
+ self->chunk.chunk_counter += subtree_chunks;
+ input_bytes += subtree_len;
+ input_len -= subtree_len;
+ }
+
+ // If there's any remaining input less than a full chunk, add it to the chunk
+ // state. In that case, also do a final merge loop to make sure the subtree
+ // stack doesn't contain any unmerged pairs. The remaining input means we
+ // know these merges are non-root. This merge loop isn't strictly necessary
+ // here, because hasher_push_chunk_cv already does its own merge loop, but it
+ // simplifies blake3_hasher_finalize below.
+ if (input_len > 0) {
+ chunk_state_update(&self->chunk, input_bytes, input_len);
+ hasher_merge_cv_stack(self, self->chunk.chunk_counter);
+ }
+}
+
+void blake3_hasher_finalize(const blake3_hasher *self, uint8_t *out,
+ size_t out_len) {
+ blake3_hasher_finalize_seek(self, 0, out, out_len);
+}
+
+void blake3_hasher_finalize_seek(const blake3_hasher *self, uint64_t seek,
+ uint8_t *out, size_t out_len) {
+ // Explicitly checking for zero avoids causing UB by passing a null pointer
+ // to memcpy. This comes up in practice with things like:
+ // std::vector v;
+ // blake3_hasher_finalize(&hasher, v.data(), v.size());
+ if (out_len == 0) {
+ return;
+ }
+
+ // If the subtree stack is empty, then the current chunk is the root.
+ if (self->cv_stack_len == 0) {
+ output_t output = chunk_state_output(&self->chunk);
+ output_root_bytes(&output, seek, out, out_len);
+ return;
+ }
+ // If there are any bytes in the chunk state, finalize that chunk and do a
+ // roll-up merge between that chunk hash and every subtree in the stack. In
+ // this case, the extra merge loop at the end of blake3_hasher_update
+ // guarantees that none of the subtrees in the stack need to be merged with
+ // each other first. Otherwise, if there are no bytes in the chunk state,
+ // then the top of the stack is a chunk hash, and we start the merge from
+ // that.
+ output_t output;
+ size_t cvs_remaining;
+ if (chunk_state_len(&self->chunk) > 0) {
+ cvs_remaining = self->cv_stack_len;
+ output = chunk_state_output(&self->chunk);
+ } else {
+ // There are always at least 2 CVs in the stack in this case.
+ cvs_remaining = self->cv_stack_len - 2;
+ output = parent_output(&self->cv_stack[cvs_remaining * 32], self->key,
+ self->chunk.flags);
+ }
+ while (cvs_remaining > 0) {
+ cvs_remaining -= 1;
+ uint8_t parent_block[BLAKE3_BLOCK_LEN];
+ memcpy(parent_block, &self->cv_stack[cvs_remaining * 32], 32);
+ output_chaining_value(&output, &parent_block[32]);
+ output = parent_output(parent_block, self->key, self->chunk.flags);
+ }
+ output_root_bytes(&output, seek, out, out_len);
+}
+
+void blake3_hasher_reset(blake3_hasher *self) {
+ chunk_state_reset(&self->chunk, self->key, 0);
+ self->cv_stack_len = 0;
+}
diff --git a/src/blake3.h b/src/blake3.h
new file mode 100644
index 00000000..48284e50
--- /dev/null
+++ b/src/blake3.h
@@ -0,0 +1,82 @@
+#ifndef BLAKE3_H
+#define BLAKE3_H
+
+#include
+#include
+
+#if !defined(BLAKE3_API)
+# if defined(_WIN32) || defined(__CYGWIN__)
+# if defined(BLAKE3_DLL)
+# if defined(BLAKE3_DLL_EXPORTS)
+# define BLAKE3_API __declspec(dllexport)
+# else
+# define BLAKE3_API __declspec(dllimport)
+# endif
+# define BLAKE3_PRIVATE
+# else
+# define BLAKE3_API
+# define BLAKE3_PRIVATE
+# endif
+# elif __GNUC__ >= 4
+# define BLAKE3_API __attribute__((visibility("default")))
+# define BLAKE3_PRIVATE __attribute__((visibility("hidden")))
+# else
+# define BLAKE3_API
+# define BLAKE3_PRIVATE
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BLAKE3_VERSION_STRING "1.5.1"
+#define BLAKE3_KEY_LEN 32
+#define BLAKE3_OUT_LEN 32
+#define BLAKE3_BLOCK_LEN 64
+#define BLAKE3_CHUNK_LEN 1024
+#define BLAKE3_MAX_DEPTH 54
+
+// This struct is a private implementation detail. It has to be here because
+// it's part of blake3_hasher below.
+typedef struct {
+ uint32_t cv[8];
+ uint64_t chunk_counter;
+ uint8_t buf[BLAKE3_BLOCK_LEN];
+ uint8_t buf_len;
+ uint8_t blocks_compressed;
+ uint8_t flags;
+} blake3_chunk_state;
+
+typedef struct {
+ uint32_t key[8];
+ blake3_chunk_state chunk;
+ uint8_t cv_stack_len;
+ // The stack size is MAX_DEPTH + 1 because we do lazy merging. For example,
+ // with 7 chunks, we have 3 entries in the stack. Adding an 8th chunk
+ // requires a 4th entry, rather than merging everything down to 1, because we
+ // don't know whether more input is coming. This is different from how the
+ // reference implementation does things.
+ uint8_t cv_stack[(BLAKE3_MAX_DEPTH + 1) * BLAKE3_OUT_LEN];
+} blake3_hasher;
+
+BLAKE3_API const char *blake3_version(void);
+BLAKE3_API void blake3_hasher_init(blake3_hasher *self);
+BLAKE3_API void blake3_hasher_init_keyed(blake3_hasher *self,
+ const uint8_t key[BLAKE3_KEY_LEN]);
+BLAKE3_API void blake3_hasher_init_derive_key(blake3_hasher *self, const char *context);
+BLAKE3_API void blake3_hasher_init_derive_key_raw(blake3_hasher *self, const void *context,
+ size_t context_len);
+BLAKE3_API void blake3_hasher_update(blake3_hasher *self, const void *input,
+ size_t input_len);
+BLAKE3_API void blake3_hasher_finalize(const blake3_hasher *self, uint8_t *out,
+ size_t out_len);
+BLAKE3_API void blake3_hasher_finalize_seek(const blake3_hasher *self, uint64_t seek,
+ uint8_t *out, size_t out_len);
+BLAKE3_API void blake3_hasher_reset(blake3_hasher *self);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BLAKE3_H */
diff --git a/src/blake3_dispatch.c b/src/blake3_dispatch.c
new file mode 100644
index 00000000..138f0dd9
--- /dev/null
+++ b/src/blake3_dispatch.c
@@ -0,0 +1,132 @@
+#include
+#include
+#include
+
+#include "blake3_impl.h"
+
+#if defined(_MSC_VER)
+#include
+#endif
+
+#if defined(IS_X86)
+#if defined(_MSC_VER)
+#include
+#elif defined(__GNUC__)
+#include
+#else
+#undef IS_X86 /* Unimplemented! */
+#endif
+#endif
+#if !defined(BLAKE3_ATOMICS)
+#if defined(__has_include)
+#if __has_include() && !defined(_MSC_VER)
+#define BLAKE3_ATOMICS 1
+#else
+#define BLAKE3_ATOMICS 0
+#endif /* __has_include() && !defined(_MSC_VER) */
+#else
+#define BLAKE3_ATOMICS 0
+#endif /* defined(__has_include) */
+#endif /* BLAKE3_ATOMICS */
+
+#if BLAKE3_ATOMICS
+#define ATOMIC_INT _Atomic int
+#define ATOMIC_LOAD(x) x
+#define ATOMIC_STORE(x, y) x = y
+#elif defined(_MSC_VER)
+#define ATOMIC_INT LONG
+#define ATOMIC_LOAD(x) InterlockedOr(&x, 0)
+#define ATOMIC_STORE(x, y) InterlockedExchange(&x, y)
+#else
+#define ATOMIC_INT int
+#define ATOMIC_LOAD(x) x
+#define ATOMIC_STORE(x, y) x = y
+#endif
+
+#define MAYBE_UNUSED(x) (void)((x))
+
+#if defined(IS_X86)
+static uint64_t xgetbv(void) {
+#if defined(_MSC_VER)
+ return _xgetbv(0);
+#else
+ uint32_t eax = 0, edx = 0;
+ __asm__ __volatile__("xgetbv\n" : "=a"(eax), "=d"(edx) : "c"(0));
+ return ((uint64_t)edx << 32) | eax;
+#endif
+}
+
+static void cpuid(uint32_t out[4], uint32_t id) {
+#if defined(_MSC_VER)
+ __cpuid((int *)out, id);
+#elif defined(__i386__) || defined(_M_IX86)
+ __asm__ __volatile__("movl %%ebx, %1\n"
+ "cpuid\n"
+ "xchgl %1, %%ebx\n"
+ : "=a"(out[0]), "=r"(out[1]), "=c"(out[2]), "=d"(out[3])
+ : "a"(id));
+#else
+ __asm__ __volatile__("cpuid\n"
+ : "=a"(out[0]), "=b"(out[1]), "=c"(out[2]), "=d"(out[3])
+ : "a"(id));
+#endif
+}
+
+static void cpuidex(uint32_t out[4], uint32_t id, uint32_t sid) {
+#if defined(_MSC_VER)
+ __cpuidex((int *)out, id, sid);
+#elif defined(__i386__) || defined(_M_IX86)
+ __asm__ __volatile__("movl %%ebx, %1\n"
+ "cpuid\n"
+ "xchgl %1, %%ebx\n"
+ : "=a"(out[0]), "=r"(out[1]), "=c"(out[2]), "=d"(out[3])
+ : "a"(id), "c"(sid));
+#else
+ __asm__ __volatile__("cpuid\n"
+ : "=a"(out[0]), "=b"(out[1]), "=c"(out[2]), "=d"(out[3])
+ : "a"(id), "c"(sid));
+#endif
+}
+
+#endif
+
+enum cpu_feature {
+ SSE2 = 1 << 0,
+ SSSE3 = 1 << 1,
+ SSE41 = 1 << 2,
+ AVX = 1 << 3,
+ AVX2 = 1 << 4,
+ AVX512F = 1 << 5,
+ AVX512VL = 1 << 6,
+ /* ... */
+ UNDEFINED = 1 << 30
+};
+
+
+void blake3_compress_in_place(uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags) {
+ blake3_compress_in_place_portable(cv, block, block_len, counter, flags);
+}
+
+void blake3_compress_xof(const uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter, uint8_t flags,
+ uint8_t out[64]) {
+ blake3_compress_xof_portable(cv, block, block_len, counter, flags, out);
+}
+
+void blake3_hash_many(const uint8_t *const *inputs, size_t num_inputs,
+ size_t blocks, const uint32_t key[8], uint64_t counter,
+ bool increment_counter, uint8_t flags,
+ uint8_t flags_start, uint8_t flags_end, uint8_t *out) {
+ blake3_hash_many_portable(inputs, num_inputs, blocks, key, counter,
+ increment_counter, flags, flags_start, flags_end,
+ out);
+}
+
+// The dynamically detected SIMD degree of the current platform.
+size_t blake3_simd_degree(void) {
+ return 1;
+}
diff --git a/src/blake3_impl.h b/src/blake3_impl.h
new file mode 100644
index 00000000..98611c31
--- /dev/null
+++ b/src/blake3_impl.h
@@ -0,0 +1,285 @@
+#ifndef BLAKE3_IMPL_H
+#define BLAKE3_IMPL_H
+
+#include
+#include
+#include
+#include
+#include
+
+#include "blake3.h"
+
+// internal flags
+enum blake3_flags {
+ CHUNK_START = 1 << 0,
+ CHUNK_END = 1 << 1,
+ PARENT = 1 << 2,
+ ROOT = 1 << 3,
+ KEYED_HASH = 1 << 4,
+ DERIVE_KEY_CONTEXT = 1 << 5,
+ DERIVE_KEY_MATERIAL = 1 << 6,
+};
+
+// This C implementation tries to support recent versions of GCC, Clang, and
+// MSVC.
+#if defined(_MSC_VER)
+#define INLINE static __forceinline
+#else
+#define INLINE static inline __attribute__((always_inline))
+#endif
+
+#if (defined(__x86_64__) || defined(_M_X64)) && !defined(_M_ARM64EC)
+#define IS_X86
+#define IS_X86_64
+#endif
+
+#if defined(__i386__) || defined(_M_IX86)
+#define IS_X86
+#define IS_X86_32
+#endif
+
+#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)
+#define IS_AARCH64
+#endif
+
+#if defined(IS_X86)
+#if defined(_MSC_VER)
+#include
+#endif
+#endif
+
+#if !defined(BLAKE3_USE_NEON)
+ // If BLAKE3_USE_NEON not manually set, autodetect based on AArch64ness
+ #if defined(IS_AARCH64)
+ #if defined(__ARM_BIG_ENDIAN)
+ #define BLAKE3_USE_NEON 0
+ #else
+ #define BLAKE3_USE_NEON 1
+ #endif
+ #else
+ #define BLAKE3_USE_NEON 0
+ #endif
+#endif
+
+#if defined(IS_X86)
+#define MAX_SIMD_DEGREE 16
+#elif BLAKE3_USE_NEON == 1
+#define MAX_SIMD_DEGREE 4
+#else
+#define MAX_SIMD_DEGREE 1
+#endif
+
+// There are some places where we want a static size that's equal to the
+// MAX_SIMD_DEGREE, but also at least 2.
+#define MAX_SIMD_DEGREE_OR_2 (MAX_SIMD_DEGREE > 2 ? MAX_SIMD_DEGREE : 2)
+
+static const uint32_t IV[8] = {0x6A09E667UL, 0xBB67AE85UL, 0x3C6EF372UL,
+ 0xA54FF53AUL, 0x510E527FUL, 0x9B05688CUL,
+ 0x1F83D9ABUL, 0x5BE0CD19UL};
+
+static const uint8_t MSG_SCHEDULE[7][16] = {
+ {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
+ {2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8},
+ {3, 4, 10, 12, 13, 2, 7, 14, 6, 5, 9, 0, 11, 15, 8, 1},
+ {10, 7, 12, 9, 14, 3, 13, 15, 4, 0, 11, 2, 5, 8, 1, 6},
+ {12, 13, 9, 11, 15, 10, 14, 8, 7, 2, 5, 3, 0, 1, 6, 4},
+ {9, 14, 11, 5, 8, 12, 15, 1, 13, 3, 0, 10, 2, 6, 4, 7},
+ {11, 15, 5, 0, 1, 9, 8, 6, 14, 10, 2, 12, 3, 4, 7, 13},
+};
+
+/* Find index of the highest set bit */
+/* x is assumed to be nonzero. */
+static unsigned int highest_one(uint64_t x) {
+#if defined(__GNUC__) || defined(__clang__)
+ return 63 ^ (unsigned int)__builtin_clzll(x);
+#elif defined(_MSC_VER) && defined(IS_X86_64)
+ unsigned long index;
+ _BitScanReverse64(&index, x);
+ return index;
+#elif defined(_MSC_VER) && defined(IS_X86_32)
+ if(x >> 32) {
+ unsigned long index;
+ _BitScanReverse(&index, (unsigned long)(x >> 32));
+ return 32 + index;
+ } else {
+ unsigned long index;
+ _BitScanReverse(&index, (unsigned long)x);
+ return index;
+ }
+#else
+ unsigned int c = 0;
+ if(x & 0xffffffff00000000ULL) { x >>= 32; c += 32; }
+ if(x & 0x00000000ffff0000ULL) { x >>= 16; c += 16; }
+ if(x & 0x000000000000ff00ULL) { x >>= 8; c += 8; }
+ if(x & 0x00000000000000f0ULL) { x >>= 4; c += 4; }
+ if(x & 0x000000000000000cULL) { x >>= 2; c += 2; }
+ if(x & 0x0000000000000002ULL) { c += 1; }
+ return c;
+#endif
+}
+
+// Count the number of 1 bits.
+INLINE unsigned int popcnt(uint64_t x) {
+#if defined(__GNUC__) || defined(__clang__)
+ return (unsigned int)__builtin_popcountll(x);
+#else
+ unsigned int count = 0;
+ while (x != 0) {
+ count += 1;
+ x &= x - 1;
+ }
+ return count;
+#endif
+}
+
+// Largest power of two less than or equal to x. As a special case, returns 1
+// when x is 0.
+INLINE uint64_t round_down_to_power_of_2(uint64_t x) {
+ return 1ULL << highest_one(x | 1);
+}
+
+INLINE uint32_t counter_low(uint64_t counter) { return (uint32_t)counter; }
+
+INLINE uint32_t counter_high(uint64_t counter) {
+ return (uint32_t)(counter >> 32);
+}
+
+INLINE uint32_t load32(const void *src) {
+ const uint8_t *p = (const uint8_t *)src;
+ return ((uint32_t)(p[0]) << 0) | ((uint32_t)(p[1]) << 8) |
+ ((uint32_t)(p[2]) << 16) | ((uint32_t)(p[3]) << 24);
+}
+
+INLINE void load_key_words(const uint8_t key[BLAKE3_KEY_LEN],
+ uint32_t key_words[8]) {
+ key_words[0] = load32(&key[0 * 4]);
+ key_words[1] = load32(&key[1 * 4]);
+ key_words[2] = load32(&key[2 * 4]);
+ key_words[3] = load32(&key[3 * 4]);
+ key_words[4] = load32(&key[4 * 4]);
+ key_words[5] = load32(&key[5 * 4]);
+ key_words[6] = load32(&key[6 * 4]);
+ key_words[7] = load32(&key[7 * 4]);
+}
+
+INLINE void store32(void *dst, uint32_t w) {
+ uint8_t *p = (uint8_t *)dst;
+ p[0] = (uint8_t)(w >> 0);
+ p[1] = (uint8_t)(w >> 8);
+ p[2] = (uint8_t)(w >> 16);
+ p[3] = (uint8_t)(w >> 24);
+}
+
+INLINE void store_cv_words(uint8_t bytes_out[32], uint32_t cv_words[8]) {
+ store32(&bytes_out[0 * 4], cv_words[0]);
+ store32(&bytes_out[1 * 4], cv_words[1]);
+ store32(&bytes_out[2 * 4], cv_words[2]);
+ store32(&bytes_out[3 * 4], cv_words[3]);
+ store32(&bytes_out[4 * 4], cv_words[4]);
+ store32(&bytes_out[5 * 4], cv_words[5]);
+ store32(&bytes_out[6 * 4], cv_words[6]);
+ store32(&bytes_out[7 * 4], cv_words[7]);
+}
+
+void blake3_compress_in_place(uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags);
+
+void blake3_compress_xof(const uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter, uint8_t flags,
+ uint8_t out[64]);
+
+void blake3_hash_many(const uint8_t *const *inputs, size_t num_inputs,
+ size_t blocks, const uint32_t key[8], uint64_t counter,
+ bool increment_counter, uint8_t flags,
+ uint8_t flags_start, uint8_t flags_end, uint8_t *out);
+
+size_t blake3_simd_degree(void);
+
+
+// Declarations for implementation-specific functions.
+void blake3_compress_in_place_portable(uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags);
+
+void blake3_compress_xof_portable(const uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags, uint8_t out[64]);
+
+void blake3_hash_many_portable(const uint8_t *const *inputs, size_t num_inputs,
+ size_t blocks, const uint32_t key[8],
+ uint64_t counter, bool increment_counter,
+ uint8_t flags, uint8_t flags_start,
+ uint8_t flags_end, uint8_t *out);
+
+#if defined(IS_X86)
+#if !defined(BLAKE3_NO_SSE2)
+void blake3_compress_in_place_sse2(uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags);
+void blake3_compress_xof_sse2(const uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags, uint8_t out[64]);
+void blake3_hash_many_sse2(const uint8_t *const *inputs, size_t num_inputs,
+ size_t blocks, const uint32_t key[8],
+ uint64_t counter, bool increment_counter,
+ uint8_t flags, uint8_t flags_start,
+ uint8_t flags_end, uint8_t *out);
+#endif
+#if !defined(BLAKE3_NO_SSE41)
+void blake3_compress_in_place_sse41(uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags);
+void blake3_compress_xof_sse41(const uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags, uint8_t out[64]);
+void blake3_hash_many_sse41(const uint8_t *const *inputs, size_t num_inputs,
+ size_t blocks, const uint32_t key[8],
+ uint64_t counter, bool increment_counter,
+ uint8_t flags, uint8_t flags_start,
+ uint8_t flags_end, uint8_t *out);
+#endif
+#if !defined(BLAKE3_NO_AVX2)
+void blake3_hash_many_avx2(const uint8_t *const *inputs, size_t num_inputs,
+ size_t blocks, const uint32_t key[8],
+ uint64_t counter, bool increment_counter,
+ uint8_t flags, uint8_t flags_start,
+ uint8_t flags_end, uint8_t *out);
+#endif
+#if !defined(BLAKE3_NO_AVX512)
+void blake3_compress_in_place_avx512(uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags);
+
+void blake3_compress_xof_avx512(const uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags, uint8_t out[64]);
+
+void blake3_hash_many_avx512(const uint8_t *const *inputs, size_t num_inputs,
+ size_t blocks, const uint32_t key[8],
+ uint64_t counter, bool increment_counter,
+ uint8_t flags, uint8_t flags_start,
+ uint8_t flags_end, uint8_t *out);
+#endif
+#endif
+
+#if BLAKE3_USE_NEON == 1
+void blake3_hash_many_neon(const uint8_t *const *inputs, size_t num_inputs,
+ size_t blocks, const uint32_t key[8],
+ uint64_t counter, bool increment_counter,
+ uint8_t flags, uint8_t flags_start,
+ uint8_t flags_end, uint8_t *out);
+#endif
+
+
+#endif /* BLAKE3_IMPL_H */
diff --git a/src/blake3_portable.c b/src/blake3_portable.c
new file mode 100644
index 00000000..062dd1b4
--- /dev/null
+++ b/src/blake3_portable.c
@@ -0,0 +1,160 @@
+#include "blake3_impl.h"
+#include
+
+INLINE uint32_t rotr32(uint32_t w, uint32_t c) {
+ return (w >> c) | (w << (32 - c));
+}
+
+INLINE void g(uint32_t *state, size_t a, size_t b, size_t c, size_t d,
+ uint32_t x, uint32_t y) {
+ state[a] = state[a] + state[b] + x;
+ state[d] = rotr32(state[d] ^ state[a], 16);
+ state[c] = state[c] + state[d];
+ state[b] = rotr32(state[b] ^ state[c], 12);
+ state[a] = state[a] + state[b] + y;
+ state[d] = rotr32(state[d] ^ state[a], 8);
+ state[c] = state[c] + state[d];
+ state[b] = rotr32(state[b] ^ state[c], 7);
+}
+
+INLINE void round_fn(uint32_t state[16], const uint32_t *msg, size_t round) {
+ // Select the message schedule based on the round.
+ const uint8_t *schedule = MSG_SCHEDULE[round];
+
+ // Mix the columns.
+ g(state, 0, 4, 8, 12, msg[schedule[0]], msg[schedule[1]]);
+ g(state, 1, 5, 9, 13, msg[schedule[2]], msg[schedule[3]]);
+ g(state, 2, 6, 10, 14, msg[schedule[4]], msg[schedule[5]]);
+ g(state, 3, 7, 11, 15, msg[schedule[6]], msg[schedule[7]]);
+
+ // Mix the rows.
+ g(state, 0, 5, 10, 15, msg[schedule[8]], msg[schedule[9]]);
+ g(state, 1, 6, 11, 12, msg[schedule[10]], msg[schedule[11]]);
+ g(state, 2, 7, 8, 13, msg[schedule[12]], msg[schedule[13]]);
+ g(state, 3, 4, 9, 14, msg[schedule[14]], msg[schedule[15]]);
+}
+
+INLINE void compress_pre(uint32_t state[16], const uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter, uint8_t flags) {
+ uint32_t block_words[16];
+ block_words[0] = load32(block + 4 * 0);
+ block_words[1] = load32(block + 4 * 1);
+ block_words[2] = load32(block + 4 * 2);
+ block_words[3] = load32(block + 4 * 3);
+ block_words[4] = load32(block + 4 * 4);
+ block_words[5] = load32(block + 4 * 5);
+ block_words[6] = load32(block + 4 * 6);
+ block_words[7] = load32(block + 4 * 7);
+ block_words[8] = load32(block + 4 * 8);
+ block_words[9] = load32(block + 4 * 9);
+ block_words[10] = load32(block + 4 * 10);
+ block_words[11] = load32(block + 4 * 11);
+ block_words[12] = load32(block + 4 * 12);
+ block_words[13] = load32(block + 4 * 13);
+ block_words[14] = load32(block + 4 * 14);
+ block_words[15] = load32(block + 4 * 15);
+
+ state[0] = cv[0];
+ state[1] = cv[1];
+ state[2] = cv[2];
+ state[3] = cv[3];
+ state[4] = cv[4];
+ state[5] = cv[5];
+ state[6] = cv[6];
+ state[7] = cv[7];
+ state[8] = IV[0];
+ state[9] = IV[1];
+ state[10] = IV[2];
+ state[11] = IV[3];
+ state[12] = counter_low(counter);
+ state[13] = counter_high(counter);
+ state[14] = (uint32_t)block_len;
+ state[15] = (uint32_t)flags;
+
+ round_fn(state, &block_words[0], 0);
+ round_fn(state, &block_words[0], 1);
+ round_fn(state, &block_words[0], 2);
+ round_fn(state, &block_words[0], 3);
+ round_fn(state, &block_words[0], 4);
+ round_fn(state, &block_words[0], 5);
+ round_fn(state, &block_words[0], 6);
+}
+
+void blake3_compress_in_place_portable(uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags) {
+ uint32_t state[16];
+ compress_pre(state, cv, block, block_len, counter, flags);
+ cv[0] = state[0] ^ state[8];
+ cv[1] = state[1] ^ state[9];
+ cv[2] = state[2] ^ state[10];
+ cv[3] = state[3] ^ state[11];
+ cv[4] = state[4] ^ state[12];
+ cv[5] = state[5] ^ state[13];
+ cv[6] = state[6] ^ state[14];
+ cv[7] = state[7] ^ state[15];
+}
+
+void blake3_compress_xof_portable(const uint32_t cv[8],
+ const uint8_t block[BLAKE3_BLOCK_LEN],
+ uint8_t block_len, uint64_t counter,
+ uint8_t flags, uint8_t out[64]) {
+ uint32_t state[16];
+ compress_pre(state, cv, block, block_len, counter, flags);
+
+ store32(&out[0 * 4], state[0] ^ state[8]);
+ store32(&out[1 * 4], state[1] ^ state[9]);
+ store32(&out[2 * 4], state[2] ^ state[10]);
+ store32(&out[3 * 4], state[3] ^ state[11]);
+ store32(&out[4 * 4], state[4] ^ state[12]);
+ store32(&out[5 * 4], state[5] ^ state[13]);
+ store32(&out[6 * 4], state[6] ^ state[14]);
+ store32(&out[7 * 4], state[7] ^ state[15]);
+ store32(&out[8 * 4], state[8] ^ cv[0]);
+ store32(&out[9 * 4], state[9] ^ cv[1]);
+ store32(&out[10 * 4], state[10] ^ cv[2]);
+ store32(&out[11 * 4], state[11] ^ cv[3]);
+ store32(&out[12 * 4], state[12] ^ cv[4]);
+ store32(&out[13 * 4], state[13] ^ cv[5]);
+ store32(&out[14 * 4], state[14] ^ cv[6]);
+ store32(&out[15 * 4], state[15] ^ cv[7]);
+}
+
+INLINE void hash_one_portable(const uint8_t *input, size_t blocks,
+ const uint32_t key[8], uint64_t counter,
+ uint8_t flags, uint8_t flags_start,
+ uint8_t flags_end, uint8_t out[BLAKE3_OUT_LEN]) {
+ uint32_t cv[8];
+ memcpy(cv, key, BLAKE3_KEY_LEN);
+ uint8_t block_flags = flags | flags_start;
+ while (blocks > 0) {
+ if (blocks == 1) {
+ block_flags |= flags_end;
+ }
+ blake3_compress_in_place_portable(cv, input, BLAKE3_BLOCK_LEN, counter,
+ block_flags);
+ input = &input[BLAKE3_BLOCK_LEN];
+ blocks -= 1;
+ block_flags = flags;
+ }
+ store_cv_words(out, cv);
+}
+
+void blake3_hash_many_portable(const uint8_t *const *inputs, size_t num_inputs,
+ size_t blocks, const uint32_t key[8],
+ uint64_t counter, bool increment_counter,
+ uint8_t flags, uint8_t flags_start,
+ uint8_t flags_end, uint8_t *out) {
+ while (num_inputs > 0) {
+ hash_one_portable(inputs[0], blocks, key, counter, flags, flags_start,
+ flags_end, out);
+ if (increment_counter) {
+ counter += 1;
+ }
+ inputs += 1;
+ num_inputs -= 1;
+ out = &out[BLAKE3_OUT_LEN];
+ }
+}
diff --git a/src/chacha20.h b/src/chacha20.h
new file mode 100644
index 00000000..94c15151
--- /dev/null
+++ b/src/chacha20.h
@@ -0,0 +1,34 @@
+
+#ifndef CHACHA20_H
+#define CHACHA20_H
+
+#include
+#include
+
+#define ChaCha20StateSizeBytes 48;
+#define ChaCha20KeySizeByte 32
+#define ChaCha20NonceSizeByte 12
+#define ChaCha20CounterSizeByte 4
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ void ChaCha20SetKey(uint8_t *state, const uint8_t *Key);
+ void ChaCha20SetNonce(uint8_t *state, const uint8_t *Nonce);
+ // void ChaCha20SetCtr(uint8_t *state, const uint8_t *Ctr);
+ // void ChaCha20EncryptBytes(uint8_t *state, uint8_t *In, uint8_t *Out, size_t Size, uint32_t rounds); // if In=nullptr - just fill Out
+ void ChaCha20IncrementNonce(uint8_t *state);
+ void ChaCha20AddCounter(uint8_t *ChaCha, const uint32_t value_to_add);
+
+ void chacha_encrypt_portable(uint8_t *key, uint8_t *nonce, uint8_t *in, uint8_t *out, size_t bytes, uint32_t rounds);
+ void chacha_encrypt_sse2(uint8_t *key, uint8_t *nonce, uint8_t *in, uint8_t *out, size_t bytes, uint32_t rounds);
+ void chacha_encrypt_avx2(uint8_t *key, uint8_t *nonce, uint8_t *in, uint8_t *out, size_t bytes, uint32_t rounds);
+ void chacha_encrypt(uint8_t *key, uint8_t *nonce, uint8_t *in, uint8_t *out, size_t bytes, uint32_t rounds);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // CHACHA20_H
diff --git a/src/chainparams.cpp b/src/chainparams.cpp
index 3a6cc822..e297c09a 100644
--- a/src/chainparams.cpp
+++ b/src/chainparams.cpp
@@ -119,6 +119,8 @@ class CMainParams : public CChainParams {
public:
CMainParams() {
strNetworkID = "main";
+ consensus.nNewHashHeight = 1930000; // Friday 30th August 2024, evening time ish (Zulu Time)
+ consensus.nNewHashBits = 0x2000ffff;
consensus.nSubsidyHalvingInterval = 210240; // Note: actual number of blocks per calendar year with DGW v3 is ~200700 (for example 449750 - 249050)
consensus.nMasternodePaymentsStartBlock = 0; // not true, but it's ok as long as it's less then nMasternodePaymentsIncreaseBlock
consensus.nMasternodePaymentsIncreaseBlock = 158000; // actual historical value
@@ -128,7 +130,7 @@ class CMainParams : public CChainParams {
consensus.nBudgetPaymentsCycleBlocks = 16616; // ~(60*24*30)/2.6, actual number of blocks per month is 200700 / 12 = 16725
consensus.nBudgetPaymentsWindowBlocks = 100;
consensus.nBudgetProposalEstablishingTime = 60*60*24;
- consensus.nSuperblockStartBlock = 614820; // The block at which 12.1 goes live (end of final 12.0 budget cycle)
+ consensus.nSuperblockStartBlock = 120000; // Was previously 614820 inherited from Dash - surprised it worked at all prior to that - Foztor Jan 24
consensus.nSuperblockCycle = 16616; // ~(60*24*30)/2.6, actual number of blocks per month is 200700 / 12 = 16725
consensus.nGovernanceMinQuorum = 10;
consensus.nGovernanceFilterElements = 20000;
@@ -190,18 +192,35 @@ class CMainParams : public CChainParams {
assert(consensus.hashGenesisBlock == uint256S("0x00000a308cc3b469703a3bc1aa55bc251a71c9287d7b413242592c0ab0a31f13"));
assert(genesis.hashMerkleRoot == uint256S("0xe0028eb9648db56b1ac77cf090b99048a8007e2bb64b68f092c03c7f56a662c7"));
- vSeeds.push_back(CDNSSeedData("51.195.44.56", "51.195.44.56"));
- vSeeds.push_back(CDNSSeedData("54.37.10.212", "54.37.10.212"));
- vSeeds.push_back(CDNSSeedData("8.218.61.142", "8.218.61.142"));
- vSeeds.push_back(CDNSSeedData("8.210.212.129", "8.210.212.129"));
- vSeeds.push_back(CDNSSeedData("8.210.125.59", "8.210.125.59"));
- vSeeds.push_back(CDNSSeedData("8.217.94.169", "8.217.94.169"));
- vSeeds.push_back(CDNSSeedData("47.242.194.153", "47.242.194.153"));
- vSeeds.push_back(CDNSSeedData("8.217.116.73", "8.217.116.73"));
- vSeeds.push_back(CDNSSeedData("8.217.92.31", "8.217.92.31"));
- vSeeds.push_back(CDNSSeedData("8.217.89.95", "8.217.89.95"));
- vSeeds.push_back(CDNSSeedData("8.217.90.111", "8.217.90.111"));
- vSeeds.push_back(CDNSSeedData("8.217.38.226", "8.217.38.226"));
+ vSeeds.push_back(CDNSSeedData("101.37.28.146", "101.37.28.146"));
+ vSeeds.push_back(CDNSSeedData("109.205.212.243", "109.205.212.243"));
+ vSeeds.push_back(CDNSSeedData("121.36.243.160", "121.36.243.160"));
+ vSeeds.push_back(CDNSSeedData("132.145.29.145", "132.145.29.145"));
+ vSeeds.push_back(CDNSSeedData("141.147.71.107", "141.147.71.107"));
+ vSeeds.push_back(CDNSSeedData("141.98.90.157", "141.98.90.157"));
+ vSeeds.push_back(CDNSSeedData("172.104.5.209", "172.104.5.209"));
+ vSeeds.push_back(CDNSSeedData("181.45.56.1", "181.45.56.1"));
+ vSeeds.push_back(CDNSSeedData("182.43.92.100", "182.43.92.100"));
+ vSeeds.push_back(CDNSSeedData("186.12.200.15", "186.12.200.15"));
+ vSeeds.push_back(CDNSSeedData("192.46.215.125", "192.46.215.125"));
+ vSeeds.push_back(CDNSSeedData("5.188.238.193", "5.188.238.193"));
+ vSeeds.push_back(CDNSSeedData("5.9.151.50", "5.9.151.50"));
+ vSeeds.push_back(CDNSSeedData("51.161.131.90", "51.161.131.90"));
+ vSeeds.push_back(CDNSSeedData("54.39.49.96", "54.39.49.96"));
+ vSeeds.push_back(CDNSSeedData("173.249.12.11", "173.249.12.11"));
+ vSeeds.push_back(CDNSSeedData("207.180.227.207", "207.180.227.207"));
+ vSeeds.push_back(CDNSSeedData("167.86.91.2", "167.86.91.2"));
+ vSeeds.push_back(CDNSSeedData("167.86.87.54", "167.86.87.54"));
+ vSeeds.push_back(CDNSSeedData("167.86.85.148", "167.86.85.148"));
+ vSeeds.push_back(CDNSSeedData("167.86.124.240", "167.86.124.240"));
+ vSeeds.push_back(CDNSSeedData("18.215.33.154", "118.215.33.154"));
+ vSeeds.push_back(CDNSSeedData("193.122.107.175", "193.122.107.175"));
+ vSeeds.push_back(CDNSSeedData("23.239.15.91", "23.239.15.91"));
+ vSeeds.push_back(CDNSSeedData("132.145.54.241", "132.145.54.241"));
+ vSeeds.push_back(CDNSSeedData("2600:1f18:da7:7900:e0e:7371:c000:89", "2600:1f18:da7:7900:e0e:7371:c000:89"));
+ vSeeds.push_back(CDNSSeedData("2603:c020:c00c:ab7e:fb40:f9f6:8078:4aa8", "2603:c020:c00c:ab7e:fb40:f9f6:8078:4aa8"));
+
+
// PEPEPOW addresses start with 'X'
base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,55);
@@ -248,6 +267,8 @@ class CTestNetParams : public CChainParams {
public:
CTestNetParams() {
strNetworkID = "test";
+ consensus.nNewHashHeight = 4;
+ consensus.nNewHashBits = 0x2000ffff;
consensus.nSubsidyHalvingInterval = 210240;
consensus.nMasternodePaymentsStartBlock = 4010; // not true, but it's ok as long as it's less then nMasternodePaymentsIncreaseBlock
consensus.nMasternodePaymentsIncreaseBlock = 4030;
@@ -267,7 +288,8 @@ class CTestNetParams : public CChainParams {
consensus.nMajorityWindow = 100;
consensus.BIP34Height = 1;
consensus.BIP34Hash = uint256S("0x0000047d24635e347be3aaaeb66c26be94901a2f962feccd4f95090191f208c1");
- consensus.powLimit = uint256S("00fffff000000000000000000000000000000000000000000000000000000000");
+ // consensus.powLimit = uint256S("00fffff000000000000000000000000000000000000000000000000000000000");
+ consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
consensus.nPowTargetTimespan = 24 * 60 * 60; // PEPEPOW: 1 day
consensus.nPowTargetSpacing = 2.5 * 60; // PEPEPOW: 2.5 minutes
consensus.fPowAllowMinDifficultyBlocks = true;
@@ -293,10 +315,15 @@ class CTestNetParams : public CChainParams {
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0001].nThreshold = 50; // 50% of 100
// The best chain should have at least this much work.
- consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000000924e924a21715"); // 37900
+ consensus.nMinimumChainWork = uint256S("0x00");
+
+ // By default assume that the signatures in ancestors of this block are valid.
+ consensus.defaultAssumeValid = uint256S("0x00");
+ // The best chain should have at least this much work.
+ // consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000000924e924a21715"); // 37900
// By default assume that the signatures in ancestors of this block are valid.
- consensus.defaultAssumeValid = uint256S("0x0000000004f5aef732d572ff514af99a995702c92e4452c7af10858231668b1f"); // 37900
+ // consensus.defaultAssumeValid = uint256S("0x0000000004f5aef732d572ff514af99a995702c92e4452c7af10858231668b1f"); // 37900
pchMessageStart[0] = 0xce;
pchMessageStart[1] = 0xe2;
@@ -316,8 +343,9 @@ class CTestNetParams : public CChainParams {
vFixedSeeds.clear();
vSeeds.clear();
- vSeeds.push_back(CDNSSeedData("PEPEPOWdot.io", "testnet-seed.PEPEPOWdot.io"));
- vSeeds.push_back(CDNSSeedData("masternode.io", "test.dnsseed.masternode.io"));
+ vSeeds.push_back(CDNSSeedData("82.163.79.208", "82.163.79.208"));
+ vSeeds.push_back(CDNSSeedData("141.147.71.107", "141.147.71.107"));
+ vSeeds.push_back(CDNSSeedData("132.145.54.241", "132.145.54.241"));
// Testnet PEPEPOW addresses start with 'y'
base58Prefixes[PUBKEY_ADDRESS] = std::vector(1,140);
@@ -335,7 +363,7 @@ class CTestNetParams : public CChainParams {
vFixedSeeds = std::vector(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test));
- fMiningRequiresPeers = true;
+ fMiningRequiresPeers = false;
fDefaultConsistencyChecks = false;
fRequireStandard = false;
fMineBlocksOnDemand = false;
@@ -365,6 +393,8 @@ class CRegTestParams : public CChainParams {
public:
CRegTestParams() {
strNetworkID = "regtest";
+ consensus.nNewHashHeight = 4;
+ consensus.nNewHashBits = 0x2000ffff;
consensus.nSubsidyHalvingInterval = 150;
consensus.nMasternodePaymentsStartBlock = 240;
consensus.nMasternodePaymentsIncreaseBlock = 350;
@@ -483,4 +513,4 @@ void SelectParams(const std::string& network)
{
SelectBaseParams(network);
pCurrentParams = &Params(network);
-}
\ No newline at end of file
+}
diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h
index ed8476bf..35636924 100644
--- a/src/chainparamsseeds.h
+++ b/src/chainparamsseeds.h
@@ -1,19 +1,56 @@
-#ifndef BITCOIN_CHAINPARAMSSEEDS_H
-#define BITCOIN_CHAINPARAMSSEEDS_H
+#ifndef DASH_CHAINPARAMSSEEDS_H
+#define DASH_CHAINPARAMSSEEDS_H
/**
- * List of fixed seed nodes for the bitcoin network
+ * List of fixed seed nodes for the dash network
* AUTOGENERATED by contrib/seeds/generate-seeds.py
*
* Each line contains a 16-byte IPv6 address and a port.
* IPv4 as well as onion addresses are wrapped inside a IPv6 address accordingly.
*/
- // ***TODO*** fix generate-seeds.py and REGENERATE
static SeedSpec6 pnSeed6_main[] = {
-
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x65,0x25,0x1c,0x92}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6d,0xcd,0xd4,0xf3}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x79,0x24,0xf3,0xa0}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x84,0x91,0x1d,0x91}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8d,0x93,0x47,0x6b}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8d,0x93,0x49,0x3a}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8d,0x62,0x5a,0x9d}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x92,0xbe,0x17,0x05}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9d,0xf5,0x2d,0x9a}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa5,0xe3,0xad,0x65}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0xac,0x6b,0x00}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x63,0xfd,0x48}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xac,0x68,0x05,0xd1}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x80,0xe3,0x0c}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb5,0x2d,0x38,0x01}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb6,0x2b,0x5c,0x64}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xba,0x0c,0xc8,0x0f}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc0,0x2e,0xd7,0x7d}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0xbc,0xee,0xc1}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x09,0x97,0x32}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0xa1,0x83,0x5a}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x36,0x27,0x31,0x60}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xf9,0x0c,0x0b}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcf,0xb4,0xe3,0xcf}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x56,0x5b,0x02}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x56,0x57,0x36}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x56,0x55,0x94}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x56,0x7c,0xf0}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0xd7,0x21,0x9a}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x17,0xef,0x0f,0x5b}, 8833},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc1,0x7a,0x6b,0xaf}, 9999},
+ {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0d,0x28,0x39,0x7c}, 9999},
+ {{0x26,0x03,0xc0,0x20,0xc0,0x0c,0xab,0x7e,0xfb,0x40,0xf9,0xf6,0x80,0x78,0x4a,0xa8}, 8833},
+ {{0x26,0x00,0x1f,0x18,0x0d,0xa7,0x79,0x00,0x0e,0x0e,0x73,0x71,0xc0,0x00,0x00,0x89}, 8833}
};
static SeedSpec6 pnSeed6_test[] = {
-// {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x99,0xcb,0x26,0x31,0xba,0x48,0x51,0x31,0x39,0x0d}, 18333},
-// {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x44,0xf4,0xf4,0xf0,0xbf,0xf7,0x7e,0x6d,0xc4,0xe8}, 18333}
+ {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x99,0xcb,0x26,0x31,0xba,0x48,0x51,0x31,0x39,0x0d}, 19999},
+ {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x44,0xf4,0xf4,0xf0,0xbf,0xf7,0x7e,0x6d,0xc4,0xe8}, 19999},
+ {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x6a,0x8b,0xd2,0x78,0x3f,0x7a,0xf8,0x92,0x8f,0x80}, 19999},
+ {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0xe6,0x4e,0xa4,0x47,0x4e,0x2a,0xfe,0xe8,0x95,0xcc}, 19999},
+ {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x9f,0xae,0x9f,0x59,0x0b,0x3f,0x31,0x3a,0x8a,0x5f}, 19999},
+ {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x47,0xb1,0xe4,0x55,0xd1,0xb0,0x14,0x3f,0xb6,0xdb}, 19999},
+ {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0xa0,0x60,0x9e,0x46,0x54,0xdb,0x61,0x3b,0xb2,0x6f}, 19999}
};
-#endif // BITCOIN_CHAINPARAMSSEEDS_H
+#endif // DASH_CHAINPARAMSSEEDS_H
diff --git a/src/consensus/params.h b/src/consensus/params.h
index e85949fe..7870a051 100644
--- a/src/consensus/params.h
+++ b/src/consensus/params.h
@@ -84,6 +84,8 @@ struct Params {
int64_t DifficultyAdjustmentInterval() const { return nPowTargetTimespan / nPowTargetSpacing; }
uint256 nMinimumChainWork;
uint256 defaultAssumeValid;
+ uint64_t nNewHashHeight;
+ uint32_t nNewHashBits;
};
} // namespace Consensus
diff --git a/src/governance-object.h b/src/governance-object.h
index 2782bab5..6a860e49 100644
--- a/src/governance-object.h
+++ b/src/governance-object.h
@@ -24,8 +24,8 @@ class CGovernanceObject;
class CGovernanceVote;
static const int MAX_GOVERNANCE_OBJECT_DATA_SIZE = 16 * 1024;
-static const int MIN_GOVERNANCE_PEER_PROTO_VERSION = 70206;
-static const int GOVERNANCE_FILTER_PROTO_VERSION = 70206;
+static const int MIN_GOVERNANCE_PEER_PROTO_VERSION = 70301;
+static const int GOVERNANCE_FILTER_PROTO_VERSION = 70301;
static const double GOVERNANCE_FILTER_FP_RATE = 0.001;
diff --git a/src/hash.cpp b/src/hash.cpp
index 599670bd..3a564dd8 100644
--- a/src/hash.cpp
+++ b/src/hash.cpp
@@ -216,3 +216,6 @@ uint64_t SipHashUint256Extra(uint64_t k0, uint64_t k1, const uint256& val, uint3
SIPROUND;
return v0 ^ v1 ^ v2 ^ v3;
}
+
+
+
diff --git a/src/hash.h b/src/hash.h
index 1d4ddf59..ad5e8bd2 100644
--- a/src/hash.h
+++ b/src/hash.h
@@ -376,6 +376,7 @@ inline uint256 pepe_hash(const T1 pbegin, const T1 pend, const uint256 PrevBlock
uint512 hash[8];
+
sph_blake512_init(&ctx_blake);
sph_blake512(&ctx_blake, (pbegin == pend ? pblank : static_cast(&pbegin[0])), (pend - pbegin) * sizeof(pbegin[0]));
sph_blake512_close(&ctx_blake, static_cast(&hash[0]));
@@ -412,5 +413,10 @@ inline uint256 pepe_hash(const T1 pbegin, const T1 pend, const uint256 PrevBlock
return hash[7].trim256();
}
+// template inline uint256 xelisv2_hash(const T1 pbegin, const T1 pend, const uint256 PrevBlockHash)
+// {
+ // uint512 hash[8];
+ // return hash[7].trim256();
+// }
#endif // RAVEN_HASH_H
diff --git a/src/instantx.h b/src/instantx.h
index bd8859d2..03d243e8 100644
--- a/src/instantx.h
+++ b/src/instantx.h
@@ -28,7 +28,7 @@ extern CInstantSend instantsend;
static const int INSTANTSEND_CONFIRMATIONS_REQUIRED = 6;
static const int DEFAULT_INSTANTSEND_DEPTH = 5;
-static const int MIN_INSTANTSEND_PROTO_VERSION = 70223;
+static const int MIN_INSTANTSEND_PROTO_VERSION = 70311;
// For how long we are going to accept votes/locks
// after we saw the first one for a specific transaction
diff --git a/src/masternode-payments.cpp b/src/masternode-payments.cpp
index 6445b083..3cb75e22 100644
--- a/src/masternode-payments.cpp
+++ b/src/masternode-payments.cpp
@@ -39,95 +39,64 @@ bool IsBlockValueValid(const CBlock& block, int nBlockHeight, CAmount blockRewar
bool isBlockRewardValueMet = (block.vtx[0].GetValueOut() <= blockReward);
if(fDebug) LogPrintf("block.vtx[0].GetValueOut() %lld <= blockReward %lld\n", block.vtx[0].GetValueOut(), blockReward);
-
+ // Not in PEPEPOW It's just a hack
+ // superblocks started
+ // But not DASH superblocks as we know them
+ /*
+ * if(nPrevHeight >= FOUNDATION_HEIGHT){
+ * if(nPrevHeight % 1000 == 998) {
+ * nSubsidy = nSubsidy * 5;
+ * }else if(nPrevHeight % 100 == 87) {
+ * nSubsidy = nSubsidy * 2;
+ * }
+ * }
+ */
+
// we are still using budgets, but we have no data about them anymore,
// all we know is predefined budget cycle and window
const Consensus::Params& consensusParams = Params().GetConsensus();
- if(nBlockHeight < consensusParams.nSuperblockStartBlock) {
- int nOffset = nBlockHeight % consensusParams.nBudgetPaymentsCycleBlocks;
- if(nBlockHeight >= consensusParams.nBudgetPaymentsStartBlock &&
- nOffset < consensusParams.nBudgetPaymentsWindowBlocks) {
- // NOTE: make sure SPORK_13_OLD_SUPERBLOCK_FLAG is disabled when 12.1 starts to go live
- if(masternodeSync.IsSynced() && !sporkManager.IsSporkActive(SPORK_13_OLD_SUPERBLOCK_FLAG)) {
- // no budget blocks should be accepted here, if SPORK_13_OLD_SUPERBLOCK_FLAG is disabled
- LogPrint("gobject", "IsBlockValueValid -- Client synced but budget spork is disabled, checking block value against block reward\n");
- if(!isBlockRewardValueMet) {
- strErrorRet = strprintf("coinbase pays too much at height %d (actual=%d vs limit=%d), exceeded block reward, budgets are disabled",
- nBlockHeight, block.vtx[0].GetValueOut(), blockReward);
- }
+ if(nBlockHeight < FOUNDATION_HEIGHT) {
+ if(!isBlockRewardValueMet) {
+ strErrorRet = strprintf("coinbase PAYS_TOO_MUCH at height %d (actual=%d vs limit=%d), exceeded block reward, only regular blocks are allowed at this height",
+ nBlockHeight, block.vtx[0].GetValueOut(), blockReward);
+ }
return isBlockRewardValueMet;
- }
- LogPrint("gobject", "IsBlockValueValid -- WARNING: Skipping budget block value checks, accepting block\n");
- // TODO: reprocess blocks to make sure they are legit?
- return true;
- }
- // LogPrint("gobject", "IsBlockValueValid -- Block is not in budget cycle window, checking block value against block reward\n");
- if(!isBlockRewardValueMet) {
- strErrorRet = strprintf("coinbase pays too much at height %d (actual=%d vs limit=%d), exceeded block reward, block is not in budget cycle window",
- nBlockHeight, block.vtx[0].GetValueOut(), blockReward);
- }
- return isBlockRewardValueMet;
}
// superblocks started
+ // But not DASH superblocks as we know them - from validation.cpp where the reward is defined....
+ /*
+ * if(nPrevHeight >= FOUNDATION_HEIGHT){
+ * if(nPrevHeight % 1000 == 998) {
+ * nSubsidy = nSubsidy * 5;
+ * }else if(nPrevHeight % 100 == 87) {
+ * nSubsidy = nSubsidy * 2;
+ * }
+ * }
+ */
CAmount nSuperblockMaxValue = blockReward + CSuperblock::GetPaymentsLimit(nBlockHeight);
bool isSuperblockMaxValueMet = (block.vtx[0].GetValueOut() <= nSuperblockMaxValue);
LogPrint("gobject", "block.vtx[0].GetValueOut() %lld <= nSuperblockMaxValue %lld\n", block.vtx[0].GetValueOut(), nSuperblockMaxValue);
-
- if(!masternodeSync.IsSynced()) {
- // not enough data but at least it must NOT exceed superblock max value
- if(CSuperblock::IsValidBlockHeight(nBlockHeight)) {
- if(fDebug) LogPrintf("IsBlockPayeeValid -- WARNING: Client not synced, checking superblock max bounds only\n");
- if(!isSuperblockMaxValueMet) {
- strErrorRet = strprintf("coinbase pays too much at height %d (actual=%d vs limit=%d), exceeded superblock max value",
- nBlockHeight, block.vtx[0].GetValueOut(), nSuperblockMaxValue);
- }
- return isSuperblockMaxValueMet;
- }
- if(!isBlockRewardValueMet) {
- strErrorRet = strprintf("coinbase pays too much at height %d (actual=%d vs limit=%d), exceeded block reward, only regular blocks are allowed at this height",
- nBlockHeight, block.vtx[0].GetValueOut(), blockReward);
- }
- // it MUST be a regular block otherwise
- return isBlockRewardValueMet;
- }
-
- // we are synced, let's try to check as much data as we can
-
- if(sporkManager.IsSporkActive(SPORK_9_SUPERBLOCKS_ENABLED)) {
- if(CSuperblockManager::IsSuperblockTriggered(nBlockHeight)) {
- if(CSuperblockManager::IsValid(block.vtx[0], nBlockHeight, blockReward)) {
- LogPrint("gobject", "IsBlockValueValid -- Valid superblock at height %d: %s", nBlockHeight, block.vtx[0].ToString());
- // all checks are done in CSuperblock::IsValid, nothing to do here
- return true;
- }
-
- // triggered but invalid? that's weird
- LogPrintf("IsBlockValueValid -- ERROR: Invalid superblock detected at height %d: %s", nBlockHeight, block.vtx[0].ToString());
- // should NOT allow invalid superblocks, when superblocks are enabled
- strErrorRet = strprintf("invalid superblock detected at height %d", nBlockHeight);
- return false;
- }
- LogPrint("gobject", "IsBlockValueValid -- No triggered superblock detected at height %d\n", nBlockHeight);
- if(!isBlockRewardValueMet) {
- strErrorRet = strprintf("coinbase pays too much at height %d (actual=%d vs limit=%d), exceeded block reward, no triggered superblock detected",
- nBlockHeight, block.vtx[0].GetValueOut(), blockReward);
- }
- } else {
- // should NOT allow superblocks at all, when superblocks are disabled
- LogPrint("gobject", "IsBlockValueValid -- Superblocks are disabled, no superblocks allowed\n");
- if(!isBlockRewardValueMet) {
- strErrorRet = strprintf("coinbase pays too much at height %d (actual=%d vs limit=%d), exceeded block reward, superblocks are disabled",
- nBlockHeight, block.vtx[0].GetValueOut(), blockReward);
- }
- }
-
- // it MUST be a regular block
- return isBlockRewardValueMet;
+
+ // Superblocks are live
+ if( nBlockHeight % 100 == 88 ) { // Double reward
+ LogPrintf("IsBlockValueValid -- Double SUPERBLOCK_EXPECTED at height %d: %s", nBlockHeight, block.vtx[0].ToString());
+ blockReward = blockReward * 2;
+ }
+ if( nBlockHeight % 1000 == 999 ) { // 5 times reward
+ LogPrintf("IsBlockValueValid -- Quintuple SUPERBLOCK_EXPECTED at height %d: %s", nBlockHeight, block.vtx[0].ToString());
+ blockReward = blockReward * 5;
+ }
+ isBlockRewardValueMet = (block.vtx[0].GetValueOut() <= blockReward);
+ if(!isBlockRewardValueMet) {
+ strErrorRet = strprintf("coinbase PAYS_TOO_MUCH at height %d (actual=%d vs limit=%d), exceeded block reward, and it is not a superblock",
+ nBlockHeight, block.vtx[0].GetValueOut(), blockReward);
+ }
+ return isBlockRewardValueMet;
}
bool IsBlockPayeeValid(const CTransaction& txNew, int nBlockHeight, CAmount blockReward)
@@ -238,21 +207,43 @@ std::string GetRequiredPaymentsString(int nBlockHeight)
}
void CMasternodePayments::FillBloc(CMutableTransaction& txNew, int nBlockHeight, CAmount blockReward){
+ // This is where we pay the foundation Fee as of 2.4
+ //
+
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ static const char* jijin[] = {
+ "ydZdAomNCF3y5oX45vY9g34attJv2RSenG",
+ };
+ CAmount found = GetFoundationPayment(nBlockHeight,0);
+ LogPrintf("CMasternodePayments::FilBloc -- StartFoundation: nBlockHeight=%d, amount=%s addres: %s\n", nBlockHeight, found,jijin[0]);
+ txNew.vout[0].nValue = txNew.vout[0].nValue - found;
+ int pos = 0;
+ LogPrint("mnpayments", "*********************** -- jijin address: %s\n",jijin[pos]);
+ CScript FOUNDER_19_SCRIPT = GetScriptForDestination(CBitcoinAddress(jijin[pos]).Get());
+ txNew.vout.push_back(CTxOut(found, CScript(FOUNDER_19_SCRIPT.begin(), FOUNDER_19_SCRIPT.end())));
+ } else {
+
+
+ if(Params().NetworkIDString() == CBaseChainParams::TESTNET) {
+ static const char* jijin[] = {
+ "yS3Ep2qvaz31uxM7VGN1fabt6zFNd8XKUB",
+ };
+ } else { // Must be mainnet
+ static const char* jijin[] = {
+ "PHjJrmyDGCAjQFsbiucsC1Ex1nPbu8hgiC",
+ };
+
+ CAmount found = GetFoundationPayment(nBlockHeight,1);
+ LogPrintf("CMasternodePayments::FilBloc -- StartFoundation: nBlockHeight=%d, amount=%s addres: %s\n", nBlockHeight, found,jijin[0]);
+ txNew.vout[0].nValue = txNew.vout[0].nValue - found;
+ int pos = 0;
+ // LogPrint("mnpayments", "*********************** -- jijin address: %s\n",jijin[pos]);
+ CScript FOUNDER_19_SCRIPT = GetScriptForDestination(CBitcoinAddress(jijin[pos]).Get());
+ txNew.vout.push_back(CTxOut(found, CScript(FOUNDER_19_SCRIPT.begin(), FOUNDER_19_SCRIPT.end())));
+ }
+ }
+
- if(nBlockHeight < FOUNDATION_HEIGHT)
- {
- return;
- }
-
-// CAmount found = FOUNDATION_RATE*GetBlockSubsidy(0,nBlockHeight-1,Params().GetConsensus(), false) / 100;
- CAmount found = FOUNDATION;
- txNew.vout[0].nValue = txNew.vout[0].nValue - found;
-
-
- int pos = 0;
- LogPrint("mnpayments", "*********************** -- jijin address: %s\n",jijin[pos]);
- CScript FOUNDER_19_SCRIPT = GetScriptForDestination(CBitcoinAddress(jijin[pos]).Get());
- txNew.vout.push_back(CTxOut(found, CScript(FOUNDER_19_SCRIPT.begin(), FOUNDER_19_SCRIPT.end())));
}
void CMasternodePayments::Clear()
@@ -294,7 +285,15 @@ void CMasternodePayments::FillBlockPayee(CMutableTransaction& txNew, int nBlockH
masternode_info_t mnInfo;
if(!mnodeman.GetNextMasternodeInQueueForPayment(nBlockHeight, true, nCount, mnInfo)) {
// ...and we can't calculate it on our own
- LogPrintf("CMasternodePayments::FillBlockPayee -- Failed to detect masternode to pay\n");
+ LogPrintf("CMasternodePayments::FillBlockPayee Height: %d -- Failed to detect masternode to pay\n",nBlockHeight);
+ // We need to take the MN share of the DevFee off the mining reward here, otherwise the payment budget will be exceeded
+ int nMainNet = 1;
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ nMainNet = 0;
+ };
+ CAmount foundationPayment = GetFoundationPayment(nBlockHeight,nMainNet);
+ txNew.vout[0].nValue = blockReward - foundationPayment;
+ //
return;
}
// fill payee with locally calculated winner and hope for the best
@@ -303,18 +302,30 @@ void CMasternodePayments::FillBlockPayee(CMutableTransaction& txNew, int nBlockH
// GET MASTERNODE PAYMENT VARIABLES SETUP
CAmount masternodePayment = GetMasternodePayment(nBlockHeight, blockReward);
-
- // split reward between miner ...
- txNew.vout[0].nValue -= masternodePayment;
- // ... and masternode
+ int nMainNet = 1;
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ nMainNet = 0;
+ };
+ CAmount foundationPayment = GetFoundationPayment(nBlockHeight,nMainNet);
+
+ // split reward between miner ... masternode .. and foundation
+
+ if (masternodePayment > 0) {
+ // masternodePayment -= foundationPayment/2; /* This is done in GetMasternodePayment now */
+ // txNew.vout[0].nValue = masternodePayment;
+ txNew.vout[0].nValue = blockReward - (masternodePayment + foundationPayment);
+ } else {
+ txNew.vout[0].nValue = blockReward - foundationPayment;
+ }
txoutMasternodeRet = CTxOut(masternodePayment, payee);
txNew.vout.push_back(txoutMasternodeRet);
+ // .. and foundation
CTxDestination address1;
ExtractDestination(payee, address1);
CBitcoinAddress address2(address1);
-
- LogPrintf("CMasternodePayments::FillBlockPayee -- Masternode payment %lld to %s\n", masternodePayment, address2.ToString());
+ // LogPrintf("CMasternodePayments::FillBlockPayee -- Reward Calculation: nBlockHeight=%d, miner=%d MN=%d DevFee=%d\n", nBlockHeight, txNew.vout[0].nValue, masternodePayment, found);
+ LogPrintf("CMasternodePayments::FillBlockPayee -- Height: %d - Masternode / Mining /Foundation payment %lld / %lld / %lld to MN %s\n", nBlockHeight, masternodePayment, txNew.vout[0].nValue, foundationPayment, address2.ToString());
}
int CMasternodePayments::GetMinMasternodePaymentsProto() {
@@ -584,11 +595,19 @@ bool CMasternodeBlockPayees::IsTransactionValid(const CTransaction& txNew)
BOOST_FOREACH(CMasternodePayee& payee, vecPayees) {
if (payee.GetVoteCount() >= MNPAYMENTS_SIGNATURES_REQUIRED) {
- BOOST_FOREACH(CTxOut txout, txNew.vout) {
- if (payee.GetPayee() == txout.scriptPubKey && nMasternodePayment == txout.nValue) {
- LogPrint("mnpayments", "CMasternodeBlockPayees::IsTransactionValid -- Found required payment\n");
+ LogPrint("mnpayments", "CMasternodeBlockPayees::IsTransactionValid -- Found %d votes \n", payee.GetVoteCount());
+ BOOST_FOREACH(CTxOut txout, txNew.vout) {
+ CTxDestination address1;
+ ExtractDestination(payee.GetPayee(), address1);
+ CBitcoinAddress address2(address1);
+ strPayeesPossible = address2.ToString();
+ LogPrint("mnpayments", "CMasternodeBlockPayees::IsTransactionValid -- Considering %s ..... ",strPayeesPossible);
+ if (payee.GetPayee() == txout.scriptPubKey && nMasternodePayment == txout.nValue) {
+ LogPrint("mnpayments", "NOT Found required payment\n");
return true;
- }
+ } else {
+ LogPrint("mnpayments", "NOT Found required payment\n",strPayeesPossible);
+ }
}
CTxDestination address1;
@@ -722,7 +741,9 @@ bool CMasternodePaymentVote::IsValid(CNode* pnode, int nValidationHeight, std::s
if(nRank > MNPAYMENTS_SIGNATURES_TOTAL*2 && nBlockHeight > nValidationHeight) {
strError = strprintf("Masternode is not in the top %d (%d)", MNPAYMENTS_SIGNATURES_TOTAL*2, nRank);
LogPrintf("CMasternodePaymentVote::IsValid -- Error: %s\n", strError);
- Misbehaving(pnode->GetId(), 20);
+ // This seems too draconian, and more importantly is causing partioning : Foztor 20th August 2023
+ // Re-instated but reduced penatly from 20 to 2 24th August 2023 Foztor
+ Misbehaving(pnode->GetId(), 2);
}
// Still invalid however
return false;
@@ -750,6 +771,7 @@ bool CMasternodePayments::ProcessBlock(int nBlockHeight, CConnman& connman)
}
if (nRank > MNPAYMENTS_SIGNATURES_TOTAL) {
+ LogPrintf("CMasternodePayments::ProcessBlock -- NoVote: rank=%d, nBlockHeight=%d, masternode=%s\n", nRank, nBlockHeight, activeMasternode.outpoint.ToStringShort());
LogPrint("mnpayments", "CMasternodePayments::ProcessBlock -- Masternode not in the top %d (%d)\n", MNPAYMENTS_SIGNATURES_TOTAL, nRank);
return false;
}
@@ -757,7 +779,7 @@ bool CMasternodePayments::ProcessBlock(int nBlockHeight, CConnman& connman)
// LOCATE THE NEXT MASTERNODE WHICH SHOULD BE PAID
- LogPrintf("CMasternodePayments::ProcessBlock -- Start: nBlockHeight=%d, masternode=%s\n", nBlockHeight, activeMasternode.outpoint.ToStringShort());
+ LogPrintf("CMasternodePayments::ProcessBlock -- StartVote: rank=%d, nBlockHeight=%d, masternode=%s\n", nRank, nBlockHeight, activeMasternode.outpoint.ToStringShort());
// pay to the oldest MN that still had no payment but its input is old enough and it was active long enough
int nCount = 0;
diff --git a/src/masternode-payments.h b/src/masternode-payments.h
index b7b53285..8028fb80 100644
--- a/src/masternode-payments.h
+++ b/src/masternode-payments.h
@@ -18,20 +18,27 @@ class CMasternodeBlockPayees;
static const int MNPAYMENTS_SIGNATURES_REQUIRED = 6;
static const int MNPAYMENTS_SIGNATURES_TOTAL = 10;
-static const char* jijin[] = {
- "PTbZKW5hgUM5Cwn1UiHNx9QkYwchvbMueQ",
-};
+/*
+if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ static const char* jijin[] = {
+ "PEXdvFRuYY55CfLWHoE7fnsVf5eTfxJeBu",
+ }; } else {
+ static const char* jijin[] = {
+ "PEXdvFRuYY55CfLWHoE7fnsVf5eTfxJeBu",
+ }
+ */
+
-static const int FOUNDATION_HEIGHT = 129600;
-static const int64_t FOUNDATION_RATE = 5;
-static const int64_t FOUNDATION = 2000 * COIN;
+static const int FOUNDATION_HEIGHT = 129600; // This is when "Superblocks" started on PEPEPOW. They don't actually use the dash superblock capability.....
+static const int64_t FOUNDATION_RATE = 0;
+static const int64_t FOUNDATION = 1000 * COIN; // 1% to Foundation
//! minimum peer version that can receive and send masternode payment messages,
// vote for masternode and be elected as a payment winner
// V1 - Last protocol version before update
// V2 - Newest protocol version
-static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_1 = 70223;
-static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_2 = 70223;
+static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_1 = 70301;
+static const int MIN_MASTERNODE_PAYMENT_PROTO_VERSION_2 = 70301;
extern CCriticalSection cs_vecPayees;
extern CCriticalSection cs_mapMasternodeBlocks;
diff --git a/src/masternode-sync.h b/src/masternode-sync.h
index e0022f78..581bdae5 100644
--- a/src/masternode-sync.h
+++ b/src/masternode-sync.h
@@ -22,7 +22,8 @@ static const int MASTERNODE_SYNC_GOVOBJ_VOTE = 11;
static const int MASTERNODE_SYNC_FINISHED = 999;
static const int MASTERNODE_SYNC_TICK_SECONDS = 6;
-static const int MASTERNODE_SYNC_TIMEOUT_SECONDS = 30; // our blocks are 2.5 minutes so 30 seconds should be fine
+static const int MASTERNODE_SYNC_TIMEOUT_SECONDS = 8; // our blocks are 2.5 minutes so 30 seconds should be fine
+ // This was reduced to 8 seconds with the 2.1 release as 30 seconds is clearly too high given our block time
static const int MASTERNODE_SYNC_ENOUGH_PEERS = 6;
diff --git a/src/masternode.cpp b/src/masternode.cpp
index e9d15c1b..8246ee8a 100644
--- a/src/masternode.cpp
+++ b/src/masternode.cpp
@@ -154,17 +154,17 @@ void CMasternode::Check(bool fForce)
}
if(IsPoSeBanned()) {
- if(nHeight < nPoSeBanHeight) return; // too early?
+ if(nHeight < nPoSeBanHeight + 720 ) return; // too early? <-- Yes almost certainly. Add in 2.2.1.4 to make this last MUCH longer
// Otherwise give it a chance to proceed further to do all the usual checks and to change its state.
// Masternode still will be on the edge and can be banned back easily if it keeps ignoring mnverify
// or connect attempts. Will require few mnverify messages to strengthen its position in mn list.
- LogPrintf("CMasternode::Check -- Masternode %s is unbanned and back in list now\n", vin.prevout.ToStringShort());
+ LogPrintf("CMasternode::Check -- Masternode %s is PoSe unbanned and back in list now\n", vin.prevout.ToStringShort());
DecreasePoSeBanScore();
} else if(nPoSeBanScore >= MASTERNODE_POSE_BAN_MAX_SCORE) {
nActiveState = MASTERNODE_POSE_BAN;
// ban for the whole payment cycle
nPoSeBanHeight = nHeight + mnodeman.size();
- LogPrintf("CMasternode::Check -- Masternode %s is banned till block %d now\n", vin.prevout.ToStringShort(), nPoSeBanHeight);
+ LogPrintf("CMasternode::Check -- Masternode %s is PoSe banned till block %d now\n", vin.prevout.ToStringShort(), nPoSeBanHeight);
return;
}
@@ -207,18 +207,21 @@ void CMasternode::Check(bool fForce)
}
bool fWatchdogActive = masternodeSync.IsSynced() && mnodeman.IsWatchdogActive();
- bool fWatchdogExpired = (fWatchdogActive && ((GetAdjustedTime() - nTimeLastWatchdogVote) > MASTERNODE_WATCHDOG_MAX_SECONDS));
+ // bool fWatchdogExpired = (fWatchdogActive && ((GetAdjustedTime() - nTimeLastWatchdogVote) > MASTERNODE_WATCHDOG_MAX_SECONDS));
- LogPrint("masternode", "CMasternode::Check -- outpoint=%s, nTimeLastWatchdogVote=%d, GetAdjustedTime()=%d, fWatchdogExpired=%d\n",
- vin.prevout.ToStringShort(), nTimeLastWatchdogVote, GetAdjustedTime(), fWatchdogExpired);
+ // LogPrint("masternode", "CMasternode::Check -- outpoint=%s, nTimeLastWatchdogVote=%d, GetAdjustedTime()=%d, fWatchdogExpired=%d\n",
+ // vin.prevout.ToStringShort(), nTimeLastWatchdogVote, GetAdjustedTime(), fWatchdogExpired);
+ LogPrint("masternode", "CMasternode::Check -- outpoint=%s, nTimeLastWatchdogVote=%d, GetAdjustedTime()=%d\n",
+ vin.prevout.ToStringShort(), nTimeLastWatchdogVote, GetAdjustedTime());
+ /*
if(fWatchdogExpired) {
nActiveState = MASTERNODE_WATCHDOG_EXPIRED;
if(nActiveStatePrev != nActiveState) {
LogPrint("masternode", "CMasternode::Check -- Masternode %s is in %s state now\n", vin.prevout.ToStringShort(), GetStateString());
}
return;
- }
+ } */
if(!IsPingedWithin(MASTERNODE_EXPIRATION_SECONDS)) {
nActiveState = MASTERNODE_EXPIRED;
diff --git a/src/masternode.h b/src/masternode.h
index c2250a60..750e67a2 100644
--- a/src/masternode.h
+++ b/src/masternode.h
@@ -17,10 +17,10 @@ static const int MASTERNODE_CHECK_SECONDS = 5;
static const int MASTERNODE_MIN_MNB_SECONDS = 5 * 60;
static const int MASTERNODE_MIN_MNP_SECONDS = 10 * 60;
static const int MASTERNODE_EXPIRATION_SECONDS = 65 * 60;
-static const int MASTERNODE_WATCHDOG_MAX_SECONDS = 120 * 60;
-static const int MASTERNODE_NEW_START_REQUIRED_SECONDS = 180 * 60;
+static const int MASTERNODE_WATCHDOG_MAX_SECONDS = 150 * 60;
+static const int MASTERNODE_NEW_START_REQUIRED_SECONDS = 210 * 60;
-static const int MASTERNODE_POSE_BAN_MAX_SCORE = 5;
+static const int MASTERNODE_POSE_BAN_MAX_SCORE = 2;
//
// The Masternode Ping Class : Contains a different serialize method for sending pings from masternodes throughout the network
diff --git a/src/masternodeman.cpp b/src/masternodeman.cpp
index ee7d4ea5..9a41dffd 100644
--- a/src/masternodeman.cpp
+++ b/src/masternodeman.cpp
@@ -20,8 +20,9 @@
CMasternodeMan mnodeman;
const std::string CMasternodeMan::SERIALIZATION_VERSION_STRING = "CMasternodeMan-Version-7";
-const int64_t CMasternodeMan::FIVE_DAY = 3600 * 24 * 5;
-
+// const int64_t CMasternodeMan::FIVE_DAY = 3600 * 24 * 5;
+const int64_t CMasternodeMan::FIVE_DAY = 3600 * 24; // VERSION 2.1 has 24 hour MN maturity
+// const int64_t CMasternodeMan::FIVE_DAY = 600; // For DevNet TESTING ONLY!!
struct CompareLastPaidBlock
{
bool operator()(const std::pair& t1,
@@ -525,13 +526,16 @@ bool CMasternodeMan::GetNextMasternodeInQueueForPayment(int nBlockHeight, bool f
if(fFilterSigTime && mnpair.second.sigTime + (nMnCount*2.6*60) > GetAdjustedTime()) continue;
int64_t seconds = (int64_t)(mnpair.second.lastPing.sigTime - mnpair.second.sigTime);
-// LogPrint("masternode", "CMasternodeMan::GetNextMasternodeInQueueForPayment --seconds=i", seconds);
+ LogPrint("masternode", "CMasternodeMan::GetNextMasternodeInQueueForPayment --seconds=i", seconds);
if(seconds < CMasternodeMan::FIVE_DAY) {
-// LogPrint("masternode", "CMasternodeMan::GetNextMasternodeInQueueForPayment -- masternode: addr=%s, not fit five day, "
-// "seconds=%lli, "
-// "fiveDays=%lli,can't add to mapMasternodes\n", mnpair.second.addr.ToString(), seconds, FIVE_DAY);
- continue;
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ LogPrintf("Regtest so skipping MN age requirements\n");
+ } else {
+ LogPrint("masternode", "CMasternodeMan::GetNextMasternodeInQueueForPayment -- masternode: addr=%s, not yet mature\n", mnpair.second.addr.ToString());
+ continue;
+ }
}
+ LogPrint("masternode", "CMasternodeMan::GetNextMasternodeInQueueForPayment -- masternode: addr=%s, is mature\n", mnpair.second.addr.ToString());
//make sure it has at least as many confirmations as there are masternodes
if(GetUTXOConfirmations(mnpair.first) < nMnCount) continue;
diff --git a/src/miner.cpp b/src/miner.cpp
index 1d15ed71..3f36d61f 100644
--- a/src/miner.cpp
+++ b/src/miner.cpp
@@ -141,6 +141,13 @@ CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const CScript& s
if (chainparams.MineBlocksOnDemand())
pblock->nVersion = GetArg("-blockversion", pblock->nVersion);
+ // LogPrintf("nHeight at %d nVersion is %s\n", nHeight, pblock->nVersion);
+
+ if(nHeight >= chainparams.GetConsensus().nNewHashHeight) {
+ pblock->nVersion |= 0x8000;
+ // LogPrintf("nHeight at %d so setting nVersion to %s\n", nHeight, pblock->nVersion);
+ }
+
int64_t nLockTimeCutoff = (STANDARD_LOCKTIME_VERIFY_FLAGS & LOCKTIME_MEDIAN_TIME_PAST)
? nMedianTimePast
: pblock->GetBlockTime();
@@ -305,17 +312,22 @@ CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const CScript& s
// Fill in header
pblock->hashPrevBlock = pindexPrev->GetBlockHash();
+ // LogPrintf("CreateNewBlock(): Got the hasPrevBlock as %s\n", pblock->hashPrevBlock.ToString());
UpdateTime(pblock, chainparams.GetConsensus(), pindexPrev);
+ // LogPrintf("CreateNewBlock(): We have updated the time\n");
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, chainparams.GetConsensus());
pblock->nNonce = 0;
pblocktemplate->vTxSigOps[0] = GetLegacySigOpCount(pblock->vtx[0]);
CValidationState state;
+ pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, chainparams.GetConsensus());
+ // LogPrintf("CreateNewBlock(): About to check validity\n");
if (!TestBlockValidity(state, chainparams, *pblock, pindexPrev, false, false)) {
throw std::runtime_error(strprintf("%s: TestBlockValidity failed: %s", __func__, FormatStateMessage(state)));
}
}
+ // LogPrintf("CreateNewBlock(): Returning the template\n");
return pblocktemplate.release();
}
diff --git a/src/net.cpp b/src/net.cpp
index f0f2dbaf..fae1c96f 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -1544,10 +1544,12 @@ void CConnman::ThreadDNSAddressSeed()
} else {
std::vector vIPs;
std::vector vAdd;
+ LogPrintf("Validating %s .... ",seed.host.c_str());
if (LookupHost(seed.host.c_str(), vIPs, 0, true))
{
BOOST_FOREACH(const CNetAddr& ip, vIPs)
{
+ LogPrintf("Found");
int nOneDay = 24*3600;
CAddress addr = CAddress(CService(ip, Params().GetDefaultPort()), NODE_NETWORK);
addr.nTime = GetTime() - 3*nOneDay - GetRand(4*nOneDay); // use a random age between 3 and 7 days old
@@ -1555,6 +1557,7 @@ void CConnman::ThreadDNSAddressSeed()
found++;
}
}
+ LogPrintf("\n");
// TODO: The seed name resolve may fail, yielding an IP of [::], which results in
// addrman assigning the same source to results from different seeds.
// This should switch to a hard-coded stable dummy IP for each seed name, so that the
diff --git a/src/net_processing.cpp b/src/net_processing.cpp
index 6cb96492..9b6ab354 100644
--- a/src/net_processing.cpp
+++ b/src/net_processing.cpp
@@ -1157,6 +1157,44 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
pfrom->fDisconnect = true;
return false;
}
+ if (sporkManager.IsSporkActive(SPORK_15_REQUIRE_FOUNDATION_FEE)) {
+ if (nVersion < MIN_PEER_SPORK_15)
+ {
+ // disconnect from peers older than this proto version
+ LogPrintf("peer=%d using obsolete version %i; disconnecting\n", pfrom->id, nVersion);
+ connman.PushMessageWithVersion(pfrom, INIT_PROTO_VERSION, NetMsgType::REJECT, strCommand, REJECT_OBSOLETE,
+ strprintf("Version must be %d or greater", MIN_PEER_PROTO_VERSION));
+ pfrom->fDisconnect = true;
+ return false;
+ }
+ }
+
+ if (sporkManager.IsSporkActive(SPORK_16_XELISV2 )) {
+ if (nVersion < MIN_PEER_SPORK_16)
+ {
+ // disconnect from peers older than this proto version
+ LogPrintf("peer=%d using obsolete version %i; disconnecting\n", pfrom->id, nVersion);
+ connman.PushMessageWithVersion(pfrom, INIT_PROTO_VERSION, NetMsgType::REJECT, strCommand, REJECT_OBSOLETE,
+ strprintf("Version must be %d or greater", MIN_PEER_PROTO_VERSION));
+ pfrom->fDisconnect = true;
+ return false;
+ }
+ }
+
+ /* Given that SPORK 8 activated after Spork 15, we want to get rid of the peers that can't get past block 1070288 */
+
+ if (sporkManager.IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT )) {
+ if (nVersion < MIN_PEER_SPORK_15_POST_1070280)
+ {
+ // disconnect from peers older than this proto version
+ LogPrintf("peer=%d using obsolete version %i; disconnecting\n", pfrom->id, nVersion);
+ connman.PushMessageWithVersion(pfrom, INIT_PROTO_VERSION, NetMsgType::REJECT, strCommand, REJECT_OBSOLETE,
+ strprintf("Version must be %d or greater", MIN_PEER_PROTO_VERSION));
+ pfrom->fDisconnect = true;
+ return false;
+ }
+ }
+
if (nVersion == 10300)
nVersion = 300;
@@ -1788,7 +1826,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
if (!hashLastBlock.IsNull() && header.hashPrevBlock != hashLastBlock) {
Misbehaving(pfrom->GetId(), 20);
return error("non-continuous headers sequence");
- }
+ }
hashLastBlock = header.GetHash();
}
}
diff --git a/src/pow.cpp b/src/pow.cpp
index 089349be..19ee27a2 100644
--- a/src/pow.cpp
+++ b/src/pow.cpp
@@ -90,7 +90,7 @@ unsigned int static DarkGravityWave(const CBlockIndex* pindexLast, const Consens
return bnPowLimit.GetCompact();
}
- if (pindexLast->nHeight > 129886 && pindexLast->nHeight < 130858) {
+ if (pindexLast->nHeight > 129886 && pindexLast->nHeight < 130858) {
return bnPowLimit.GetCompact();
}
@@ -176,6 +176,8 @@ unsigned int GetNextWorkRequiredBTC(const CBlockIndex* pindexLast, const CBlockH
unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params)
{
+ if((pindexLast->nHeight+1) == params.nNewHashHeight) return params.nNewHashBits; // Prevent a silly stall at hash algo change
+
// Most recent algo first
if (pindexLast->nHeight + 1 >= params.nPowDGWHeight) {
return DarkGravityWave(pindexLast, params);
@@ -229,16 +231,21 @@ bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params&
bool fOverflow;
arith_uint256 bnTarget;
+ // LogPrintf("CheckProofOfWork: Hash is %s\n",hash.ToString());
bnTarget.SetCompact(nBits, &fNegative, &fOverflow);
// Check range
+ if(Params().NetworkIDString() == CBaseChainParams::MAIN) {
if (fNegative || bnTarget == 0 || fOverflow || bnTarget > UintToArith256(params.powLimit))
return error("CheckProofOfWork(): nBits below minimum work");
+}
+
// Check proof of work matches claimed amount
if (UintToArith256(hash) > bnTarget)
- return error("CheckProofOfWork(): hash doesn't match nBits");
+ return error("CheckProofOfWork(): hash doesn't match nBits with %s vs %s", UintToArith256(hash).ToString(),bnTarget.ToString());
+ // LogPrintf("CheckProofOfWork: SUCCESS FOR HASH : %s\n",hash.ToString());
return true;
}
diff --git a/src/primitives/block.cpp b/src/primitives/block.cpp
index a86a7435..4fee7014 100644
--- a/src/primitives/block.cpp
+++ b/src/primitives/block.cpp
@@ -9,14 +9,838 @@
#include "tinyformat.h"
#include "utilstrencodings.h"
#include "crypto/common.h"
+#include "util.h"
+
+
+
+
+
+
+// Xelis Additions Foztor July 24
+//
+//
+//
+
+#include "blake3.h"
+#include "chacha20.h"
+#ifdef __linux__
+#if defined(__x86_64__)
+ #include
+ #include
+ #include
+#elif defined(__aarch64__)
+ #include
+#endif
+#endif
+
+
+typedef unsigned char byte;
+extern double algoHashTotal[20];
+extern int algoHashHits[20];
+
+const uint16_t XELIS_MEMORY_SIZE = 32768;
+const size_t XELIS_MEMORY_SIZE_V2 = 429*128;
+
+const uint16_t XELIS_SCRATCHPAD_ITERS = 5000;
+const uint16_t XELIS_SCRATCHPAD_ITERS_V2 = 3;
+
+const byte XELIS_ITERS = 1;
+const uint16_t XELIS_BUFFER_SIZE = 42;
+const uint16_t XELIS_BUFFER_SIZE_V2 = XELIS_MEMORY_SIZE_V2 / 2;
+
+const uint16_t XELIS_SLOT_LENGTH = 256;
+const int XELIS_TEMPLATE_SIZE = 112;
+
+const byte XELIS_KECCAK_WORDS = 25;
+const byte XELIS_BYTES_ARRAY_INPUT = XELIS_KECCAK_WORDS * 8;
+const byte XELIS_HASH_SIZE = 32;
+const uint16_t XELIS_STAGE_1_MAX = XELIS_MEMORY_SIZE / XELIS_KECCAK_WORDS;
+
+
+#define XEL_INPUT_LEN (112)
+#define XEL_MEMSIZE (429 * 128)
+#define XEL_ITERS (3)
+#define XEL_HASHSIZE (32)
+
+
+uint64_t xel_isqrt(uint64_t n) {
+ if (n < 2)
+ return n;
+
+ uint64_t x = n;
+ uint64_t result = 0;
+ uint64_t bit = (uint64_t)1 << 62; // The second-to-top bit is set
+
+ // "bit" starts at the highest power of four <= the argument.
+ while (bit > x)
+ bit >>= 2;
+
+ while (bit != 0)
+ {
+ if (x >= result + bit)
+ {
+ x -= result + bit;
+ result = (result >> 1) + bit;
+ }
+ else
+ {
+ result >>= 1;
+ }
+ bit >>= 2;
+ }
+
+ return result;
+}
+
+
+static inline void blake3(const uint8_t *input, int len, uint8_t *output) {
+ blake3_hasher hasher;
+ blake3_hasher_init(&hasher);
+ blake3_hasher_update(&hasher, input, len);
+ blake3_hasher_finalize(&hasher, output, BLAKE3_OUT_LEN);
+}
+
+#define XEL_HASH_SIZE (32)
+#define XEL_CHUNK_SIZE (32)
+#define XEL_NONCE_SIZE (12)
+#define XEL_OUTPUT_SIZE (XEL_MEMSIZE * 8)
+#define XEL_CHUNKS (4)
+#define XEL_INPUT_LEN (112)
+
+
+// AES S-box
+static const uint8_t sbox[256] = {
+ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
+ 0xca, 0x82, 0xc9, 0x7d, 0xFA, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
+ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
+ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
+ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
+ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
+ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
+ 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
+ 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
+ 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
+ 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
+};
+
+// Helper function to perform GF(2^8) multiplication
+static uint8_t xtime(uint8_t x) {
+ return (x << 1) ^ ((x & 0x80) ? 0x1b : 0x00);
+}
+
+static uint8_t gmul(uint8_t a, uint8_t b) {
+ uint8_t result = 0;
+ while (b) {
+ if (b & 1) {
+ result ^= a;
+ }
+ a = xtime(a);
+ b >>= 1;
+ }
+ return result;
+}
+
+
+// AES SubBytes transformation
+static void sub_bytes(uint8_t *state) {
+ for (int i = 0; i < 16; ++i) {
+ state[i] = sbox[state[i]];
+ }
+}
+
+
+// AES ShiftRows transformation
+static void shift_rows(uint8_t *state) {
+ uint8_t temp[16];
+ temp[0] = state[0];
+ temp[1] = state[5];
+ temp[2] = state[10];
+ temp[3] = state[15];
+ temp[4] = state[4];
+ temp[5] = state[9];
+ temp[6] = state[14];
+ temp[7] = state[3];
+ temp[8] = state[8];
+ temp[9] = state[13];
+ temp[10] = state[2];
+ temp[11] = state[7];
+ temp[12] = state[12];
+ temp[13] = state[1];
+ temp[14] = state[6];
+ temp[15] = state[11];
+ memcpy(state, temp, 16);
+}
+// AES MixColumns transformation
+static void mix_columns(uint8_t *state) {
+ uint8_t temp[16];
+ for (int i = 0; i < 4; ++i) {
+ temp[i * 4 + 0] = gmul(0x02, state[i * 4 + 0]) ^ gmul(0x03, state[i * 4 + 1]) ^ gmul(0x01, state[i * 4 + 2]) ^ gmul(0x01, state[i * 4 + 3]);
+ temp[i * 4 + 1] = gmul(0x01, state[i * 4 + 0]) ^ gmul(0x02, state[i * 4 + 1]) ^ gmul(0x03, state[i * 4 + 2]) ^ gmul(0x01, state[i * 4 + 3]);
+ temp[i * 4 + 2] = gmul(0x01, state[i * 4 + 0]) ^ gmul(0x01, state[i * 4 + 1]) ^ gmul(0x02, state[i * 4 + 2]) ^ gmul(0x03, state[i * 4 + 3]);
+ temp[i * 4 + 3] = gmul(0x03, state[i * 4 + 0]) ^ gmul(0x01, state[i * 4 + 1]) ^ gmul(0x01, state[i * 4 + 2]) ^ gmul(0x02, state[i * 4 + 3]);
+ }
+ memcpy(state, temp, 16);
+}
+
+// AES AddRoundKey transformation
+static void add_round_key(uint8_t *state, const uint8_t *round_key) {
+ for (int i = 0; i < 16; ++i) {
+ state[i] ^= round_key[i];
+ }
+}
+
+
+inline void aes_single_round_no_intrinsics(uint8_t *state, const uint8_t *round_key) {
+ sub_bytes(state);
+ shift_rows(state);
+ mix_columns(state);
+ add_round_key(state, round_key);
+}
+
+
+void static inline aes_single_round(uint8_t *block, const uint8_t *key)
+{
+#if defined(__aarch64__)
+ aes_single_round_no_intrinsics(block, key);
+#endif
+
+#ifdef WIN32
+ aes_single_round_no_intrinsics(block, key);
+#endif
+
+#ifdef __linux__
+#if defined(__AES__)
+#if defined(__x86_64__)
+ __m128i block_vec = _mm_loadu_si128((const __m128i *)block);
+ __m128i key_vec = _mm_loadu_si128((const __m128i *)key);
+
+ // Perform single AES encryption round
+ block_vec = _mm_aesenc_si128(block_vec, key_vec);
+
+ _mm_storeu_si128((__m128i *)block, block_vec);
+#endif
+#endif
+#endif
+
+
+
+}
+#if defined(__x86_64__)
+
+static inline uint64_t Divide128Div64To64(uint64_t high, uint64_t low, uint64_t divisor, uint64_t *remainder)
+{
+ uint64_t result;
+ __asm__("divq %[v]"
+ : "=a"(result), "=d"(*remainder) // Output parametrs, =a for rax, =d for rdx, [v] is an
+ // alias for divisor, input paramters "a" and "d" for low and high.
+ : [v] "r"(divisor), "a"(low), "d"(high));
+ return result;
+}
+
+static inline uint64_t XEL_ROTR(uint64_t x, uint32_t r)
+{
+ asm("rorq %%cl, %0" : "+r"(x) : "c"(r));
+ return x;
+}
+
+static inline uint64_t XEL_ROTL(uint64_t x, uint32_t r)
+{
+ asm("rolq %%cl, %0" : "+r"(x) : "c"(r));
+ return x;
+}
+#else
+
+static inline uint64_t Divide128Div64To64(uint64_t high, uint64_t low, uint64_t divisor, uint64_t *remainder)
+{
+ // Combine high and low into a 128-bit dividend
+ __uint128_t dividend = ((__uint128_t)high << 64) | low;
+
+ // Perform division using built-in compiler functions
+ *remainder = dividend % divisor;
+ return dividend / divisor;
+}
+
+static inline uint64_t XEL_ROTR(uint64_t x, uint32_t r)
+{
+ r %= 64; // Ensure r is within the range [0, 63] for a 64-bit rotate
+ return (x >> r) | (x << (64 - r));
+}
+
+static inline uint64_t XEL_ROTL(uint64_t x, uint32_t r)
+{
+ r %= 64; // Ensure r is within the range [0, 63] for a 64-bit rotate
+ return (x << r) | (x >> (64 - r));
+}
+
+#endif
+
+#define COMBINE_UINT64(high, low) (((__uint128_t)(high) << 64) | (low))
+static inline __uint128_t combine_uint64(uint64_t high, uint64_t low) {
+ return ((__uint128_t)high << 64) | low;
+}
+
+void static inline uint64_to_le_bytes(uint64_t value, uint8_t *bytes) {
+ for (int i = 0; i < 8; i++)
+ {
+ bytes[i] = value & 0xFF;
+ value >>= 8;
+ }
+}
+
+uint64_t static inline le_bytes_to_uint64(const uint8_t *bytes) {
+ uint64_t value = 0;
+ for (int i = 7; i >= 0; i--)
+ value = (value << 8) | bytes[i];
+ return value;
+}
+
+
+
+
+static inline uint64_t udiv(uint64_t high, uint64_t low, uint64_t divisor)
+{
+ uint64_t remainder;
+
+ if (high < divisor)
+ {
+ return Divide128Div64To64(high, low, divisor, &remainder);
+ }
+ else
+ {
+ uint64_t qhi = Divide128Div64To64(0, high, divisor, &high);
+ return Divide128Div64To64(high, low, divisor, &remainder);
+ }
+}
+
+
+
+static inline uint64_t isqrt(uint64_t n)
+{
+ if (n < 2)
+ {
+ return n;
+ }
+
+ uint64_t x = n;
+ uint64_t y = (x + 1) >> 1;
+
+ while (y < x)
+ {
+ x = y;
+ y = (x + n / x) >> 1;
+ }
+
+ return x;
+}
+
+
+
+// __attribute__((noinline))
+static inline uint64_t case_0(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return XEL_ROTL(c, i * j) ^ b;
+}
+// __attribute__((noinline))
+static inline uint64_t case_1(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return XEL_ROTR(c, i * j) ^ a;
+}
+// __attribute__((noinline))
+static inline uint64_t case_2(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return a ^ b ^ c;
+}
+// __attribute__((noinline))
+static inline uint64_t case_3(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return (a + b) * c;
+}
+// __attribute__((noinline))
+static inline uint64_t case_4(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return (b - c) * a;
+}
+// __attribute__((noinline))
+static inline uint64_t case_5(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return c - a + b;
+}
+// __attribute__((noinline))
+static inline uint64_t case_6(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return a - b + c;
+}
+// __attribute__((noinline))
+static inline uint64_t case_7(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return b * c + a;
+}
+// __attribute__((noinline))
+static inline uint64_t case_8(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return c * a + b;
+}
+// __attribute__((noinline))
+static inline uint64_t case_9(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return a * b * c;
+}
+// __attribute__((noinline))
+static inline uint64_t case_10(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return COMBINE_UINT64(a,b) % (c | 1);
+}
+// __attribute__((noinline))
+static inline uint64_t case_11(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ __uint128_t t2 = COMBINE_UINT64(XEL_ROTL(result, r), a | 2);
+ return (t2 > COMBINE_UINT64(b,c)) ? c : COMBINE_UINT64(b,c) % t2;
+}
+// __attribute__((noinline))
+static inline uint64_t case_12(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return udiv(c, a, b | 4);
+}
+// __attribute__((noinline))
+static inline uint64_t case_13(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ __uint128_t t1 = COMBINE_UINT64(XEL_ROTL(result, r), b);
+ __uint128_t t2 = COMBINE_UINT64(a, c | 8);
+ return (t1 > t2) ? t1 / t2 : a ^ b;
+}
+// __attribute__((noinline))
+static inline uint64_t case_14(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return (COMBINE_UINT64(b,a) * c) >> 64;
+}
+// __attribute__((noinline))
+static inline uint64_t case_15(uint64_t a, uint64_t b, uint64_t c, int r, uint64_t result, int i, int j) {
+ return (COMBINE_UINT64(a,c) * COMBINE_UINT64(XEL_ROTR(result, r), b)) >> 64;
+}
+
+
+
+typedef uint64_t (*operation_func)(uint64_t, uint64_t, uint64_t, int, uint64_t, int, int);
+operation_func operations[] = {
+ case_0, case_1, case_2, case_3, case_4, case_5, case_6, case_7,
+ case_8, case_9, case_10, case_11, case_12, case_13, case_14, case_15,
+ // Add other functions for cases 10-15
+ };
+ //
+
+//
+// void xel_stage_3(uint64_t *scratch_pad, workerData_xelis_v2 &worker)
+void xel_stage_3(uint64_t *scratch_pad)
+{
+ const uint8_t key[17] = "xelishash-pow-v2";
+ uint8_t block[16] = {0};
+
+ uint64_t *mem_buffer_a = scratch_pad;
+ uint64_t *mem_buffer_b = scratch_pad + XELIS_BUFFER_SIZE_V2;
+
+ uint64_t addr_a = mem_buffer_b[XELIS_BUFFER_SIZE_V2 - 1];
+ uint64_t addr_b = mem_buffer_a[XELIS_BUFFER_SIZE_V2 - 1] >> 32;
+ size_t r = 0;
+
+
+ #pragma unroll 3
+ for (size_t i = 0; i < XELIS_SCRATCHPAD_ITERS_V2; ++i) {
+ uint64_t mem_a = mem_buffer_a[addr_a % XELIS_BUFFER_SIZE_V2];
+ uint64_t mem_b = mem_buffer_b[addr_b % XELIS_BUFFER_SIZE_V2];
+
+ // std::copy(&mem_b, &mem_b + 8, block);
+ // std::copy(&mem_a, &mem_a + 8, block + 8);
+
+ uint64_to_le_bytes(mem_b, block);
+ uint64_to_le_bytes(mem_a, block + 8);
+
+ aes_single_round(block, key);
+
+ uint64_t hash1 = 0, hash2 = 0;
+ // hash1 = ((uint64_t*)block)[0]; // simple assignment, slower than SIMD on my CPU
+ hash1 = le_bytes_to_uint64(block);
+ // std::copy(block, block + 8, &hash1);
+ // hash1 = _byteswap_uint64(hash1);
+ hash2 = mem_a ^ mem_b;
+
+ addr_a = ~(hash1 ^ hash2);
+
+ // printf("pre result: %llu\n", result);
+
+ for (size_t j = 0; j < XELIS_BUFFER_SIZE_V2; ++j) {
+ uint64_t a = mem_buffer_a[(addr_a % XELIS_BUFFER_SIZE_V2)];
+ uint64_t b = mem_buffer_b[~XEL_ROTR(addr_a, r) % XELIS_BUFFER_SIZE_V2];
+ uint64_t c = (r < XELIS_BUFFER_SIZE_V2) ? mem_buffer_a[r] : mem_buffer_b[r - XELIS_BUFFER_SIZE_V2];
+ r = (r+1) % XELIS_MEMORY_SIZE_V2;
+
+ // printf("a %llu, b %llu, c %llu, ", a, b, c);
+ uint64_t v;
+ uint32_t idx = XEL_ROTL(addr_a, (uint32_t)c) & 0xF;
+ v = operations[idx](a,b,c,r,addr_a,i,j);
+
+ addr_a = XEL_ROTL(addr_a ^ v, 1);
+
+ uint64_t t = mem_buffer_a[XELIS_BUFFER_SIZE_V2 - j - 1] ^ addr_a;
+ mem_buffer_a[XELIS_BUFFER_SIZE_V2 - j - 1] = t;
+ mem_buffer_b[j] ^= XEL_ROTR(t, (uint32_t)addr_a);
+ }
+ // printf("post result: %llu\n", result);
+ addr_b = isqrt(addr_a);
+ }
+
+ // Crc32 crc32;
+ // crc32.input((uint8_t *)scratch_pad, XELIS_MEMORY_SIZE_V2 * 8);
+ // printf("%llu\n", crc32.result());
+}
+
+void xel_stage_1(const uint8_t *input, size_t input_len, uint8_t scratch_pad[XEL_OUTPUT_SIZE])
+{
+ uint8_t key[XEL_CHUNK_SIZE * XEL_CHUNKS] = {0};
+ uint8_t input_hash[XEL_HASH_SIZE];
+ uint8_t buffer[XEL_CHUNK_SIZE * 2];
+ memcpy(key, input, XEL_INPUT_LEN);
+ // memcpy(key, input, sizeof(input));
+ blake3(input, input_len, buffer);
+
+ uint8_t *t = scratch_pad;
+
+ memcpy(buffer + XEL_CHUNK_SIZE, key + 0 * XEL_CHUNK_SIZE, XEL_CHUNK_SIZE);
+ blake3(buffer, XEL_CHUNK_SIZE * 2, input_hash);
+ chacha_encrypt(input_hash, buffer, NULL, t, XEL_OUTPUT_SIZE / XEL_CHUNKS, 8);
+
+ t += XEL_OUTPUT_SIZE / XEL_CHUNKS;
+ memcpy(buffer, input_hash, XEL_CHUNK_SIZE);
+ memcpy(buffer + XEL_CHUNK_SIZE, key + 1 * XEL_CHUNK_SIZE, XEL_CHUNK_SIZE);
+ blake3(buffer, XEL_CHUNK_SIZE * 2, input_hash);
+ chacha_encrypt(input_hash, t - XEL_NONCE_SIZE, NULL, t, XEL_OUTPUT_SIZE / XEL_CHUNKS, 8);
+
+ t += XEL_OUTPUT_SIZE / XEL_CHUNKS;
+ memcpy(buffer, input_hash, XEL_CHUNK_SIZE);
+ memcpy(buffer + XEL_CHUNK_SIZE, key + 2 * XEL_CHUNK_SIZE, XEL_CHUNK_SIZE);
+ blake3(buffer, XEL_CHUNK_SIZE * 2, input_hash);
+ chacha_encrypt(input_hash, t - XEL_NONCE_SIZE, NULL, t, XEL_OUTPUT_SIZE / XEL_CHUNKS, 8);
+
+ t += XEL_OUTPUT_SIZE / XEL_CHUNKS;
+ memcpy(buffer, input_hash, XEL_CHUNK_SIZE);
+ memcpy(buffer + XEL_CHUNK_SIZE, key + 3 * XEL_CHUNK_SIZE, XEL_CHUNK_SIZE);
+ blake3(buffer, XEL_CHUNK_SIZE * 2, input_hash);
+ chacha_encrypt(input_hash, t - XEL_NONCE_SIZE, NULL, t, XEL_OUTPUT_SIZE / XEL_CHUNKS, 8);
+}
+
+
+#define XEL_KEY "xelishash-pow-v2"
+#define XEL_BUFSIZE (XEL_MEMSIZE / 2)
+
+
+
+static const int32_t KeyDataSize = 48;
+static const int32_t rounds = 20;
+
+static const uint32_t ConstState[4] = {1634760805, 857760878, 2036477234, 1797285236}; //"expand 32-byte k";;
+
+void ChaCha20SetNonce(uint8_t *state, const uint8_t *Nonce)
+{
+ memcpy(state + 36, Nonce, 12);
+}
+
+
+void ChaCha20EncryptBytes(uint8_t *state, uint8_t *In, uint8_t *Out, size_t Size, uint32_t rounds)
+{
+
+ // portable chacha, no simd
+ uint8_t *CurrentIn = In;
+ uint8_t *CurrentOut = Out;
+ uint64_t RemainingBytes = Size;
+ uint32_t *state_dwords = (uint32_t *)state;
+ uint32_t b[16];
+ while (1)
+ {
+ b[0] = ConstState[0];
+ b[1] = ConstState[1];
+ b[2] = ConstState[2];
+ b[3] = ConstState[3];
+ memcpy(((uint8_t *)b) + 16, state, 48);
+
+ for (int i = rounds; i > 0; i -= 2)
+ {
+ b[0] = b[0] + b[4];
+ b[12] = (b[12] ^ b[0]) << 16 | (b[12] ^ b[0]) >> 16;
+ b[8] = b[8] + b[12];
+ b[4] = (b[4] ^ b[8]) << 12 | (b[4] ^ b[8]) >> 20;
+ b[0] = b[0] + b[4];
+ b[12] = (b[12] ^ b[0]) << 8 | (b[12] ^ b[0]) >> 24;
+ b[8] = b[8] + b[12];
+ b[4] = (b[4] ^ b[8]) << 7 | (b[4] ^ b[8]) >> 25;
+ b[1] = b[1] + b[5];
+ b[13] = (b[13] ^ b[1]) << 16 | (b[13] ^ b[1]) >> 16;
+ b[9] = b[9] + b[13];
+ b[5] = (b[5] ^ b[9]) << 12 | (b[5] ^ b[9]) >> 20;
+ b[1] = b[1] + b[5];
+ b[13] = (b[13] ^ b[1]) << 8 | (b[13] ^ b[1]) >> 24;
+ b[9] = b[9] + b[13];
+ b[5] = (b[5] ^ b[9]) << 7 | (b[5] ^ b[9]) >> 25;
+ b[2] = b[2] + b[6];
+ b[14] = (b[14] ^ b[2]) << 16 | (b[14] ^ b[2]) >> 16;
+ b[10] = b[10] + b[14];
+ b[6] = (b[6] ^ b[10]) << 12 | (b[6] ^ b[10]) >> 20;
+ b[2] = b[2] + b[6];
+ b[14] = (b[14] ^ b[2]) << 8 | (b[14] ^ b[2]) >> 24;
+ b[10] = b[10] + b[14];
+ b[6] = (b[6] ^ b[10]) << 7 | (b[6] ^ b[10]) >> 25;
+ b[3] = b[3] + b[7];
+ b[15] = (b[15] ^ b[3]) << 16 | (b[15] ^ b[3]) >> 16;
+ b[11] = b[11] + b[15];
+ b[7] = (b[7] ^ b[11]) << 12 | (b[7] ^ b[11]) >> 20;
+ b[3] = b[3] + b[7];
+ b[15] = (b[15] ^ b[3]) << 8 | (b[15] ^ b[3]) >> 24;
+ b[11] = b[11] + b[15];
+ b[7] = (b[7] ^ b[11]) << 7 | (b[7] ^ b[11]) >> 25;
+ b[0] = b[0] + b[5];
+ b[15] = (b[15] ^ b[0]) << 16 | (b[15] ^ b[0]) >> 16;
+ b[10] = b[10] + b[15];
+ b[5] = (b[5] ^ b[10]) << 12 | (b[5] ^ b[10]) >> 20;
+ b[0] = b[0] + b[5];
+ b[15] = (b[15] ^ b[0]) << 8 | (b[15] ^ b[0]) >> 24;
+ b[10] = b[10] + b[15];
+ b[5] = (b[5] ^ b[10]) << 7 | (b[5] ^ b[10]) >> 25;
+ b[1] = b[1] + b[6];
+ b[12] = (b[12] ^ b[1]) << 16 | (b[12] ^ b[1]) >> 16;
+ b[11] = b[11] + b[12];
+ b[6] = (b[6] ^ b[11]) << 12 | (b[6] ^ b[11]) >> 20;
+ b[1] = b[1] + b[6];
+ b[12] = (b[12] ^ b[1]) << 8 | (b[12] ^ b[1]) >> 24;
+ b[11] = b[11] + b[12];
+ b[6] = (b[6] ^ b[11]) << 7 | (b[6] ^ b[11]) >> 25;
+ b[2] = b[2] + b[7];
+ b[13] = (b[13] ^ b[2]) << 16 | (b[13] ^ b[2]) >> 16;
+ b[8] = b[8] + b[13];
+ b[7] = (b[7] ^ b[8]) << 12 | (b[7] ^ b[8]) >> 20;
+ b[2] = b[2] + b[7];
+ b[13] = (b[13] ^ b[2]) << 8 | (b[13] ^ b[2]) >> 24;
+ b[8] = b[8] + b[13];
+ b[7] = (b[7] ^ b[8]) << 7 | (b[7] ^ b[8]) >> 25;
+ b[3] = b[3] + b[4];
+ b[14] = (b[14] ^ b[3]) << 16 | (b[14] ^ b[3]) >> 16;
+ b[9] = b[9] + b[14];
+ b[4] = (b[4] ^ b[9]) << 12 | (b[4] ^ b[9]) >> 20;
+ b[3] = b[3] + b[4];
+ b[14] = (b[14] ^ b[3]) << 8 | (b[14] ^ b[3]) >> 24;
+ b[9] = b[9] + b[14];
+ b[4] = (b[4] ^ b[9]) << 7 | (b[4] ^ b[9]) >> 25;
+ }
+
+ for (uint32_t i = 0; i < 4; ++i)
+ {
+ b[i] += ConstState[i];
+ }
+ for (uint32_t i = 0; i < 12; ++i)
+ {
+ b[i + 4] += state_dwords[i];
+ }
+
+ ++state_dwords[8]; // counter
+
+ if (RemainingBytes >= 64)
+ {
+ if (In)
+ {
+ uint32_t *In32bits = (uint32_t *)CurrentIn;
+ uint32_t *Out32bits = (uint32_t *)CurrentOut;
+ for (uint32_t i = 0; i < 16; i++)
+ {
+ Out32bits[i] = In32bits[i] ^ b[i];
+ }
+ }
+ else
+ memcpy(CurrentOut, b, 64);
+
+ if (In)
+ CurrentIn += 64;
+ CurrentOut += 64;
+ RemainingBytes -= 64;
+ if (RemainingBytes == 0)
+ return;
+ continue;
+ }
+ else
+ {
+ if (In)
+ {
+ for (int32_t i = 0; i < RemainingBytes; i++)
+ CurrentOut[i] = CurrentIn[i] ^ ((uint8_t *)b)[i];
+ }
+ else
+ memcpy(CurrentOut, b, RemainingBytes);
+ return;
+ }
+ }
+}
+
+
+
+void ChaCha20SetKey(uint8_t *state, const uint8_t *Key)
+{
+ memcpy(state, Key, 32);
+}
+
+void chacha_encrypt(uint8_t *key, uint8_t *nonce, uint8_t *in, uint8_t *out, size_t bytes, uint32_t rounds)
+{
+ uint8_t state[48] = {0};
+ ChaCha20SetKey(state, key);
+ ChaCha20SetNonce(state, nonce);
+ ChaCha20EncryptBytes(state, in, out, bytes, rounds);
+}
+
+
+// Blake3
+//
+//
+//
+
+
+
+#include "blake3.c"
+#include "blake3_dispatch.c"
+#include "blake3_portable.c"
+
+// template
+void xelis_goldenhash()
+{
+
+
+ uint64_t *scratch = (uint64_t *)calloc(XEL_MEMSIZE, sizeof(uint64_t));
+ uint8_t *scratch_uint8 = (uint8_t *)scratch;
+ uint8_t *blankinput = (uint8_t *)calloc(XEL_INPUT_LEN, sizeof(uint8_t));
+
+
+ xel_stage_1(blankinput, XEL_INPUT_LEN, scratch_uint8);
+ xel_stage_3(scratch);
+ uint8_t hashResult[XEL_HASHSIZE];
+ blake3((uint8_t*)scratch, XEL_OUTPUT_SIZE, hashResult);
+
+ uint8_t gold[XEL_HASHSIZE] = {
+ 126, 219, 112, 240, 116, 133, 115,
+ 144, 39, 40, 164, 105, 30, 158, 45,
+ 126, 64, 67, 238, 52, 200, 35, 161, 19,
+ 144, 211, 214, 225, 95, 190, 146, 27};
+
+ if (memcmp(gold, hashResult, XEL_HASHSIZE))
+ LogPrintf("XELV2: GOLD Failed\n");
+ else
+ LogPrintf("XELV2: GOLD Passed\n");
+ free(scratch);
+ free(blankinput);
+ return;
+}
+
+void xelis_hash_v2(const void* data, size_t len, uint8_t hashResult[XEL_HASHSIZE])
+{
+ // xelis_goldenhash();
+ static uint8_t pblank[1];
+
+ // LogPrintf("XEL2: Len is %d\n", len);
+
+ uint64_t *scratch = (uint64_t *)calloc(XEL_MEMSIZE, sizeof(uint64_t));
+ uint8_t *scratch_uint8 = (uint8_t *)scratch;
+ uint8_t *blankinput = (uint8_t *)calloc(XEL_INPUT_LEN, sizeof(uint8_t));
+ std::memcpy(blankinput, data, len);
+ blankinput[len] = '\0';
+
+
+ int j;
+
+ /*
+ LogPrintf("Stage1 Input as hex: ");
+ for(j = 0; j < len; ++j)
+ LogPrintf("%02x", blankinput[j]);
+ LogPrintf(": \n ");
+ */
+
+
+ xel_stage_1(blankinput, XEL_INPUT_LEN, scratch_uint8);
+ xel_stage_3(scratch);
+ blake3((uint8_t*)scratch, XEL_OUTPUT_SIZE, hashResult);
+ free(scratch);
+ free(blankinput);
+ return;
+
+}
+template
+void pre_xelis_hash_v2(const T1 pbegin, const T1 pend, uint256 hashPrevBlock, uint8_t hash_result[XEL_HASHSIZE]) {
+ static unsigned char pblank[1];
+ /*
+ if(pbegin == pend) {
+ LogPrintf("pre_xelis_hash_v2: pbegin == pend\n");
+ }
+ */
+ // xelis_hash_v2((pbegin == pend ? pblank : static_cast(&pbegin[0])), (pend - pbegin) * sizeof(pbegin[0]), PrevBlockHash, hash_result);
+ xelis_hash_v2((static_cast(&pbegin[0])), (pend - pbegin) * sizeof(pbegin[0]), hash_result);
+ return;
+}
+
+
+
+uint256 CBlockHeader::GetPOWHash() const
+{
+uint256 PePeHash;
+
+ // LogPrintf("CBlockHeader::GetHash %s\n",BEGIN(nVersion));
+ if(nVersion & 0x8000) {
+ uint8_t hash_result[XELIS_HASH_SIZE] = {0};
+ uint256 res;
+ int i,j,temp;
+ pre_xelis_hash_v2(BEGIN(nVersion), END(nNonce), hashPrevBlock, hash_result);
+ /*
+ LogPrintf("CBlockHeader:: SWAP: ");
+ for (i = 0, j = XELIS_HASH_SIZE - 1; i < j; i++, j--) { // loop to swap element
+ temp = hash_result[i];
+ LogPrintf("%02x", hash_result[i]);
+ hash_result[i] = hash_result[j];
+ hash_result[j] = temp;
+ }
+ LogPrintf("\n");
+ */
+ std::memcpy(&res, hash_result, sizeof(hash_result));
+ // LogPrintf("CBlockHeader::xelis_hash %s\n",res.ToString());
+ return res;
+ }
+ PePeHash = pepe_hash(BEGIN(nVersion), END(nNonce), hashPrevBlock);
+ // LogPrintf("CBlockHeader::pepe_hash - %s \n",PePeHash.ToString());
+ return PePeHash;
+
+}
+
+
uint256 CBlockHeader::GetHash() const
{
- return pepe_hash(BEGIN(nVersion), END(nNonce), hashPrevBlock);
+uint256 PePeHash;
+
+ // LogPrintf("CBlockHeader::GetHash %s\n",BEGIN(nVersion));
+ if(nVersion & 0x8000) {
+ uint8_t hash_result[XELIS_HASH_SIZE] = {0};
+ uint256 res;
+ int i,j,temp;
+ // LogPrintf("CBlockHeader::GetHash Xel Starts\n");
+ pre_xelis_hash_v2(BEGIN(nVersion), END(nNonce), hashPrevBlock, hash_result);
+ /*
+ LogPrintf("CBlockHeader:: SWAP: ");
+ for (i = 0, j = XELIS_HASH_SIZE - 1; i < j; i++, j--) { // loop to swap element
+ temp = hash_result[i];
+ LogPrintf("%02x", hash_result[i]);
+ hash_result[i] = hash_result[j];
+ hash_result[j] = temp;
+ }
+ LogPrintf("\n");
+ */
+ std::memcpy(&res, hash_result, sizeof(hash_result));
+ // LogPrintf("CBlockHeader::xelis_hash %s\n",res.ToString());
+ return res;
+ }
+ PePeHash = pepe_hash(BEGIN(nVersion), END(nNonce), hashPrevBlock);
+ // LogPrintf("CBlockHeader::pepe_hash - %s \n",PePeHash.ToString());
+ return PePeHash;
}
+
+
std::string CBlock::ToString() const
{
+ // LogPrintf("CBlockHeader::ToString\n");
+ // LogPrintf("CBlockHeader::nVersion %s\n",nVersion);
+ // LogPrintf("CBlockHeader::hashPrevBlock.ToString %s\n",hashPrevBlock.ToString());
+ // LogPrintf("CBlockHeader::GetHash.ToString %s\n",GetHash().ToString());
+ // LogPrintf("CBlockHeader::nVersion again %s\n",nVersion);
std::stringstream s;
s << strprintf("CBlock(hash=%s, ver=%d, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%u)\n",
GetHash().ToString(),
diff --git a/src/primitives/block.h b/src/primitives/block.h
index 46372ec3..6f22bbfc 100644
--- a/src/primitives/block.h
+++ b/src/primitives/block.h
@@ -63,6 +63,8 @@ class CBlockHeader
uint256 GetHash() const;
+ uint256 GetPOWHash() const;
+
int64_t GetBlockTime() const
{
return (int64_t)nTime;
diff --git a/src/privatesend-client.h b/src/privatesend-client.h
index 20a5b65c..7ba9daca 100644
--- a/src/privatesend-client.h
+++ b/src/privatesend-client.h
@@ -16,7 +16,7 @@ class CConnman;
static const int DENOMS_COUNT_MAX = 100;
static const int DEFAULT_PRIVATESEND_ROUNDS = 2;
-static const int DEFAULT_PRIVATESEND_AMOUNT = 1000;
+static const int DEFAULT_PRIVATESEND_AMOUNT = 100000;
static const int DEFAULT_PRIVATESEND_LIQUIDITY = 0;
static const bool DEFAULT_PRIVATESEND_MULTISESSION = false;
diff --git a/src/privatesend.cpp b/src/privatesend.cpp
index d6e9e9a6..0f58089e 100644
--- a/src/privatesend.cpp
+++ b/src/privatesend.cpp
@@ -163,9 +163,12 @@ void CPrivateSend::InitStandardDenominations()
1DRK+1000 == (.1DRK+100)*10
10DRK+10000 == (1DRK+1000)*10
*/
- /* Disabled
+
+ vecStandardDenominations.push_back( (1000000 * COIN)+1000000000 );
+ vecStandardDenominations.push_back( (100000 * COIN)+100000000 );
+ vecStandardDenominations.push_back( (10000 * COIN)+10000000 );
+ vecStandardDenominations.push_back( (1000 * COIN)+1000000 );
vecStandardDenominations.push_back( (100 * COIN)+100000 );
- */
vecStandardDenominations.push_back( (10 * COIN)+10000 );
vecStandardDenominations.push_back( (1 * COIN)+1000 );
vecStandardDenominations.push_back( (.1 * COIN)+100 );
diff --git a/src/privatesend.h b/src/privatesend.h
index b247a2d8..4389368e 100644
--- a/src/privatesend.h
+++ b/src/privatesend.h
@@ -23,7 +23,7 @@ static const int PRIVATESEND_QUEUE_TIMEOUT = 30;
static const int PRIVATESEND_SIGNING_TIMEOUT = 15;
//! minimum peer version accepted by mixing pool
-static const int MIN_PRIVATESEND_PEER_PROTO_VERSION = 70223;
+static const int MIN_PRIVATESEND_PEER_PROTO_VERSION = 70311;
static const CAmount PRIVATESEND_ENTRY_MAX_SIZE = 9;
diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp
index 242c6927..f63b8109 100644
--- a/src/qt/bitcoingui.cpp
+++ b/src/qt/bitcoingui.cpp
@@ -1435,15 +1435,15 @@ static bool ThreadSafeMessageBox(BitcoinGUI *gui, const std::string& message, co
void BitcoinGUI::subscribeToCoreSignals()
{
// Connect signals to client
- uiInterface.ThreadSafeMessageBox.connect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3));
- uiInterface.ThreadSafeQuestion.connect(boost::bind(ThreadSafeMessageBox, this, _1, _3, _4));
+ uiInterface.ThreadSafeMessageBox.connect(boost::bind(ThreadSafeMessageBox, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
+ uiInterface.ThreadSafeQuestion.connect(boost::bind(ThreadSafeMessageBox, this, boost::placeholders::_1, boost::placeholders::_3, boost::placeholders::_4));
}
void BitcoinGUI::unsubscribeFromCoreSignals()
{
// Disconnect signals from client
- uiInterface.ThreadSafeMessageBox.disconnect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3));
- uiInterface.ThreadSafeQuestion.disconnect(boost::bind(ThreadSafeMessageBox, this, _1, _3, _4));
+ uiInterface.ThreadSafeMessageBox.disconnect(boost::bind(ThreadSafeMessageBox, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
+ uiInterface.ThreadSafeQuestion.disconnect(boost::bind(ThreadSafeMessageBox, this, boost::placeholders::_1, boost::placeholders::_3, boost::placeholders::_4));
}
void BitcoinGUI::toggleNetworkActive()
diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h
index d35ad837..0a71e14d 100644
--- a/src/qt/bitcoingui.h
+++ b/src/qt/bitcoingui.h
@@ -56,6 +56,7 @@ class BitcoinGUI : public QMainWindow
explicit BitcoinGUI(const PlatformStyle *platformStyle, const NetworkStyle *networkStyle, QWidget *parent = 0);
~BitcoinGUI();
+
/** Set the client model.
The client model represents the part of the core that communicates with the P2P network, and is wallet-agnostic.
*/
diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp
index ab375fda..904a0168 100644
--- a/src/qt/clientmodel.cpp
+++ b/src/qt/clientmodel.cpp
@@ -375,25 +375,25 @@ static void NotifyAdditionalDataSyncProgressChanged(ClientModel *clientmodel, do
void ClientModel::subscribeToCoreSignals()
{
// Connect signals to client
- uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
- uiInterface.NotifyNumConnectionsChanged.connect(boost::bind(NotifyNumConnectionsChanged, this, _1));
- uiInterface.NotifyNetworkActiveChanged.connect(boost::bind(NotifyNetworkActiveChanged, this, _1));
- uiInterface.NotifyAlertChanged.connect(boost::bind(NotifyAlertChanged, this, _1, _2));
+ uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
+ uiInterface.NotifyNumConnectionsChanged.connect(boost::bind(NotifyNumConnectionsChanged, this, boost::placeholders::_1));
+ uiInterface.NotifyNetworkActiveChanged.connect(boost::bind(NotifyNetworkActiveChanged, this, boost::placeholders::_1));
+ uiInterface.NotifyAlertChanged.connect(boost::bind(NotifyAlertChanged, this, boost::placeholders::_1, boost::placeholders::_2));
uiInterface.BannedListChanged.connect(boost::bind(BannedListChanged, this));
- uiInterface.NotifyBlockTip.connect(boost::bind(BlockTipChanged, this, _1, _2, false));
- uiInterface.NotifyHeaderTip.connect(boost::bind(BlockTipChanged, this, _1, _2, true));
- uiInterface.NotifyAdditionalDataSyncProgressChanged.connect(boost::bind(NotifyAdditionalDataSyncProgressChanged, this, _1));
+ uiInterface.NotifyBlockTip.connect(boost::bind(BlockTipChanged, this, boost::placeholders::_1, boost::placeholders::_2, false));
+ uiInterface.NotifyHeaderTip.connect(boost::bind(BlockTipChanged, this, boost::placeholders::_1, boost::placeholders::_2, true));
+ uiInterface.NotifyAdditionalDataSyncProgressChanged.connect(boost::bind(NotifyAdditionalDataSyncProgressChanged, this, boost::placeholders::_1));
}
void ClientModel::unsubscribeFromCoreSignals()
{
// Disconnect signals from client
- uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
- uiInterface.NotifyNumConnectionsChanged.disconnect(boost::bind(NotifyNumConnectionsChanged, this, _1));
- uiInterface.NotifyNetworkActiveChanged.disconnect(boost::bind(NotifyNetworkActiveChanged, this, _1));
- uiInterface.NotifyAlertChanged.disconnect(boost::bind(NotifyAlertChanged, this, _1, _2));
+ uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
+ uiInterface.NotifyNumConnectionsChanged.disconnect(boost::bind(NotifyNumConnectionsChanged, this, boost::placeholders::_1));
+ uiInterface.NotifyNetworkActiveChanged.disconnect(boost::bind(NotifyNetworkActiveChanged, this, boost::placeholders::_1));
+ uiInterface.NotifyAlertChanged.disconnect(boost::bind(NotifyAlertChanged, this, boost::placeholders::_1, boost::placeholders::_2));
uiInterface.BannedListChanged.disconnect(boost::bind(BannedListChanged, this));
- uiInterface.NotifyBlockTip.disconnect(boost::bind(BlockTipChanged, this, _1, _2, false));
- uiInterface.NotifyHeaderTip.disconnect(boost::bind(BlockTipChanged, this, _1, _2, true));
- uiInterface.NotifyAdditionalDataSyncProgressChanged.disconnect(boost::bind(NotifyAdditionalDataSyncProgressChanged, this, _1));
+ uiInterface.NotifyBlockTip.disconnect(boost::bind(BlockTipChanged, this, boost::placeholders::_1, boost::placeholders::_2, false));
+ uiInterface.NotifyHeaderTip.disconnect(boost::bind(BlockTipChanged, this, boost::placeholders::_1, boost::placeholders::_2, true));
+ uiInterface.NotifyAdditionalDataSyncProgressChanged.disconnect(boost::bind(NotifyAdditionalDataSyncProgressChanged, this, boost::placeholders::_1));
}
diff --git a/src/qt/dash.qrc b/src/qt/dash.qrc
index 65560fad..593e649c 100644
--- a/src/qt/dash.qrc
+++ b/src/qt/dash.qrc
@@ -228,12 +228,69 @@
res/icons/trad/transaction_abandoned.png
res/icons/trad/network_disabled.png
+
+ res/icons/mosaicco/address-book.png
+ res/icons/mosaicco/quit.png
+ res/icons/mosaicco/send.png
+ res/icons/mosaicco/connect0_16.png
+ res/icons/mosaicco/connect1_16.png
+ res/icons/mosaicco/connect2_16.png
+ res/icons/mosaicco/connect3_16.png
+ res/icons/mosaicco/connect4_16.png
+ res/icons/mosaicco/transaction0.png
+ res/icons/mosaicco/transaction2.png
+ res/icons/mosaicco/transaction_conflicted.png
+ res/icons/mosaicco/clock1.png
+ res/icons/mosaicco/clock2.png
+ res/icons/mosaicco/clock3.png
+ res/icons/mosaicco/clock4.png
+ res/icons/mosaicco/clock5.png
+ res/icons/mosaicco/eye.png
+ res/icons/mosaicco/eye_minus.png
+ res/icons/mosaicco/eye_plus.png
+ res/icons/mosaicco/configure.png
+ res/icons/mosaicco/receive.png
+ res/icons/mosaicco/editpaste.png
+ res/icons/mosaicco/editcopy.png
+ res/icons/mosaicco/add.png
+ res/icons/mosaicco/edit.png
+ res/icons/mosaicco/history.png
+ res/icons/mosaicco/masternodes.png
+ res/icons/mosaicco/overview.png
+ res/icons/mosaicco/export.png
+ res/icons/mosaicco/synced.png
+ res/icons/mosaicco/remove.png
+ res/icons/mosaicco/tx_mined.png
+ res/icons/mosaicco/tx_input.png
+ res/icons/mosaicco/tx_output.png
+ res/icons/mosaicco/tx_inout.png
+ res/icons/mosaicco/lock_closed.png
+ res/icons/mosaicco/lock_open.png
+ res/icons/mosaicco/key.png
+ res/icons/mosaicco/filesave.png
+ res/icons/mosaicco/debugwindow.png
+ res/icons/mosaicco/drkblue_editpaste.png
+ res/icons/mosaicco/drkblue_address-book.png
+ res/icons/mosaicco/drkblue_editcopy.png
+ res/icons/mosaicco/drkblue_remove.png
+ res/icons/mosaicco/browse.png
+ res/icons/mosaicco/about.png
+ res/icons/mosaicco/about_qt.png
+ res/icons/mosaicco/verify.png
+ res/icons/mosaicco/hd_enabled.png
+ res/icons/mosaicco/hd_disabled.png
+ res/icons/mosaicco/fontbigger.png
+ res/icons/mosaicco/fontsmaller.png
+ res/icons/mosaicco/transaction_abandoned.png
+ res/icons/mosaicco/network_disabled.png
+
res/css/drkblue.css
res/css/crownium.css
res/css/light.css
res/css/light-hires.css
res/css/trad.css
+ res/css/mosaicco.css
res/images/drkblue/about.png
@@ -293,6 +350,21 @@
res/images/trad/splash.png
res/images/trad/splash_testnet.png
+
+ res/images/mosaicco/about.png
+ res/images/mosaicco/dash_logo_horizontal.png
+ res/images/mosaicco/unchecked.png
+ res/images/mosaicco/checked.png
+ res/images/mosaicco/drkblue_downArrow.png
+ res/images/mosaicco/drkblue_downArrow_small.png
+ res/images/mosaicco/drkblue_upArrow_small.png
+ res/images/mosaicco/drkblue_leftArrow_small.png
+ res/images/mosaicco/drkblue_rightArrow_small.png
+ res/images/mosaicco/drkblue_qtreeview_selected.png
+ res/images/mosaicco/drkblue_walletFrame_bg.png
+ res/images/mosaicco/splash.png
+ res/images/mosaicco/splash_testnet.png
+
res/movies/spinner-000.png
res/movies/spinner-001.png
diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui
index db178171..a43098c5 100644
--- a/src/qt/forms/optionsdialog.ui
+++ b/src/qt/forms/optionsdialog.ui
@@ -263,7 +263,7 @@
2
- 2000
+ 1000000
10
diff --git a/src/qt/intro.cpp b/src/qt/intro.cpp
index 21cbe49a..e9aaa09f 100644
--- a/src/qt/intro.cpp
+++ b/src/qt/intro.cpp
@@ -180,7 +180,7 @@ void Intro::pickDataDirectory()
/* Let the user choose one */
Intro intro;
intro.setDataDirectory(dataDirDefaultCurrent);
- intro.setWindowIcon(QIcon(":icons/bitcoin"));
+ intro.setWindowIcon(QIcon(QPixmap(":icons/bitcoin").scaled(QSize(128, 128), Qt::KeepAspectRatio, Qt::SmoothTransformation )));
while(true)
{
diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp
index 68911363..e1e21c22 100644
--- a/src/qt/optionsdialog.cpp
+++ b/src/qt/optionsdialog.cpp
@@ -92,11 +92,18 @@ OptionsDialog::OptionsDialog(QWidget *parent, bool enableWallet) :
}
/* Theme selector */
- ui->theme->addItem(QString("PEPEW-light"), QVariant("light"));
+ /* Other relative files: Makefile.qt.include, dash.qrc, optimize-pngs.py*/
+/* ui->theme->addItem(QString("PEPEW-light"), QVariant("light"));
ui->theme->addItem(QString("PEPEW-light-hires"), QVariant("light-hires"));
ui->theme->addItem(QString("PEPEW-blue"), QVariant("drkblue"));
ui->theme->addItem(QString("PEPEW-Crownium"), QVariant("crownium"));
- ui->theme->addItem(QString("PEPEW-traditional"), QVariant("trad"));
+ ui->theme->addItem(QString("PEPEW-traditional"), QVariant("trad")); */
+ ui->theme->addItem(QString("PEPEW-Homelife"), QVariant("light"));
+ ui->theme->addItem(QString("PEPEW-Starglow"), QVariant("drkblue"));
+ ui->theme->addItem(QString("PEPEW-Griffin"), QVariant("crownium"));
+ ui->theme->addItem(QString("PEPEW-3DMosaicco"), QVariant("mosaicco"));
+ ui->theme->addItem(QString("PEPEW-Punkwave"), QVariant("trad"));
+
/* Language selector */
QDir translations(":translations");
diff --git a/src/qt/res/css/crownium.css b/src/qt/res/css/crownium.css
index 9292e5f7..4b75c80d 100644
--- a/src/qt/res/css/crownium.css
+++ b/src/qt/res/css/crownium.css
@@ -1,1649 +1,1207 @@
-WalletFrame {
-border-image: url(':/images/crownium/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
-/* background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #222222, stop: .1 #EEEEEE, stop: .9 #EEEEEE, stop: 1 #222222); */
-border-top:0px solid #000;
-margin:0;
-padding:0;
-}
-
-QStatusBar {
-background-color:#ffffff;
-}
-
-.QFrame {
-background-color:transparent;
-border:0px solid #fff;
-}
-
-QMenuBar {
-background-color:#fff;
-}
-
-QMenuBar::item {
-background-color:#fff;
-}
-
-QMenuBar::item:selected {
-background-color:#f8f6f6;
-}
-
-QMenu {
-background-color:#f8f6f6;
-}
-
-QMenu::item {
-color:#333;
-}
-
-QMenu::item:selected {
-background-color:#666666;
-color:#333333;
-}
-
-QToolBar {
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .4 #EEEEEE, stop: .6 #EEEEEE, stop: 1 #222222);
-border:0px solid #333;
-padding:0;
-margin:0;
-}
-
-QToolBar > QToolButton {
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .4 #EEEEEE, stop: .6 #EEEEEE, stop: 1 #222222);
-min-height:2.5em;
-min-width:110px;
-padding: 0em 1em;
-color:#000000;
-}
-
-QToolBar > QToolButton:checked {
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #000000, stop: .4 #EEEEEE, stop: .6 #EEEEEE, stop: 1 #000000);
-font-weight:bold;
-color:#000000;
-border:none;
+/* Global Styles */
+* {
+ color: #FFFFFF; /* Set default text color to white */
+ font-size: 13px;
+ font-family: Arial, Helvetica, sans-serif;
+ outline: none;
}
-QToolBar > QToolButton:hover {
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .4 #EEEEEE, stop: .6 #EEEEEE, stop: 1 #222222);
-font-weight:bold;
-color:#000000;
-border:none;
-}
-
-QMessageBox {
-background-color:#F8F6F6;
-}
-
-/*******************************************************/
-
-QLabel { /* Base Text Size & Color */
-font-size:12px;
-color:#000000;
-}
-
-.QCheckBox { /* Checkbox Labels */
-color:#333333;
-background-color:transparent;
-}
-
-.QCheckBox:hover {
-background-color:transparent;
-}
-
-.QValidatedLineEdit, .QLineEdit { /* Text Entry Fields */
-border: 1px solid #000000;
-font-size:11px;
-min-height:25px;
-outline:0;
-padding:3px;
-background-color:#fcfcfc;
-}
-
-.QLineEdit:!focus {
-font-size:12px;
-}
-
-.QValidatedLineEdit:disabled, .QLineEdit:disabled {
-background-color:#f2f2f2;
-}
-
-/*******************************************************/
-
-QPushButton { /* Global Button Style */
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .3 #FFFFFF, stop: .7 #FFFFFF, stop: 1 #222222);
-border:0;
-border-radius:3px;
-color:#000000;
-font-size:12px;
-font-weight:bold;
-padding-left:25px;
-padding-right:25px;
-padding-top:5px;
-padding-bottom:5px;
-}
-
-QPushButton:hover {
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #444444, stop: .2 #FFFFFF, stop: .8 #FFFFFF, stop: 1 #444444);
-}
-
-QPushButton:focus {
-border:none;
-outline:none;
-}
-
-QPushButton:pressed {
-border:2px solid #000000;
+/* Background image (for widget) */
+WalletFrame {
+ border-image: url(':/images/crownium/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
}
-QComboBox { /* Dropdown Menus */
-border:1px solid #000000;
-padding: 3px 5px 3px 5px;
-background:#fcfcfc;
-min-height:25px;
-color:#818181;
+/* The first layer: Dialogs and Widgets */
+QDialog {
+ background-color: #2e0042;
+ color: #ffffff;
}
-
-QComboBox:checked {
-background:#f2f2f2;
+QWidget {
+ background-color: transparent;
+ color: #ffffff;
}
-QComboBox:editable {
-background: #3398CC;
-color:#616161;
-border:0px solid transparent;
+/* The second layer: Labels and Buttons */
+QLabel {
+ color: #FFFFFF;
}
-
-QComboBox::drop-down {
-width:25px;
-border:0px;
+QPushButton {
+ color: #FFFFFF;
}
-QComboBox::down-arrow {
-border-image: url(':/images/crownium/drkblue_downArrow') 0 0 0 0 stretch stretch;
+/* The thrid layer: Input fields */
+QLineEdit, QTextEdit, QPlainTextEdit {
+ background-color: #3f005b;
+ color: #FFFFFF;
}
-QComboBox QListView {
-background:#fff;
-border:1px solid #333;
-padding-right:1px;
-padding-left:1px;
+/* Restore alternating row styles */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #FFFFFF;
}
-QComboBox QAbstractItemView::item { margin:4px; }
-
-QComboBox::item {
-color:#818181;
+QTableView::item {
+ background-color: #2e0042;
+ color: #FFFFFF;
}
-QComboBox::item:alternate {
-background:#fff;
+QTableView::item:alternate {
+ background-color: #3f005b;
}
-QComboBox::item:selected {
-border:0px solid transparent;
-background:#f2f2f2;
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #FFFFFF;
}
-QComboBox::indicator {
-background-color:transparent;
-selection-background-color:transparent;
-color:transparent;
-selection-color:transparent;
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
}
-QAbstractSpinBox {
-border:1px solid #000000;
-padding: 3px 5px 3px 5px;
-background:#fcfcfc;
-min-height:25px;
-color:#818181;
+.QFrame {
+ background-color: rgba(75, 0, 110, 0.5); /* 50% transparent*/
+ border:0px solid #2e0042;
+ color: #ffffff; /* white text */
+ padding: 5px;
+ border-radius: 4px;
+}
+
+/* Pop up help(tip)*/
+QToolTip{
+ /*color: #856404;*/
+ color: #000;
+ background-color: #fff3cd;
+ border:1px solid #ffeeba;
+ border-radius: 5px;
+}
+/*Html hyperLink color*/
+a, QDialog a, *::Link{
+ color: #11c26d
+}
+
+/* Toolbar */
+QToolBar, QStatusBar {
+ background-color:#2e0042;
+ padding:0;
+ margin:0;
+ border:0px;
+}
+
+/*The second menu*/
+QToolBar > QToolButton {
+ min-height:2.5em;
+ min-width: 8em;
+ padding: 5px 8px;
+ border:0px;
+ margin: 0px;
+ background-color: #2e0042;
+ color: #ffffff;
+
+ }
+ QToolBar > QToolButton:hover{
+ background-color: #660099;
+ }
+ QToolBar > QToolButton:checked {
+ background-color:#660099;
+ font-weight:bold;
+ }
+
+ /* -------------------Main Menu--------------------- */
+QMenuBar {
+ background-color:#2e0042;
}
-
-QAbstractSpinBox::up-button {
-subcontrol-origin: border;
-subcontrol-position: top right;
-width:21px;
-background:#fcfcfc;
-border-left:0px;
-border-right:1px solid #000000;
-border-top:1px solid #000000;
-border-bottom:0px;
-padding-right:1px;
-padding-left:5px;
-padding-top:2px;
+QMenuBar::item {
+ /*padding: 5px;*/
+ background-color:#2e0042;
+ color:#ffffff;
}
-
-QAbstractSpinBox::up-arrow {
-image:url(':/images/crownium/drkblue_upArrow_small');
+QMenu {
+ background-color:#2e0042;
+ color:#ffffff;
+ border: 1px solid #3f3f5b;
+ padding: 0;
+ margin: 0;
}
-
-QAbstractSpinBox::down-button {
-subcontrol-origin: border;
-subcontrol-position: bottom right;
-width:21px;
-background:#fcfcfc;
-border-top:0px;
-border-left:0px;
-border-right:1px solid #000000;
-border-bottom:1px solid #000000;
-padding-right:1px;
-padding-left:5px;
-padding-bottom:2px;
+QMenu::item:hover {
+ background-color:#4b006e;
+ color: #ffffff
}
-
-QAbstractSpinBox::down-arrow {
-image:url(':/images/crownium/drkblue_downArrow_small');
+QMenu::item:selected {
+ background-color:#4b006e;
+ color: #ffffff
}
-
+
+ /* -------------------Checkbox--------------------- Not working*/
QCheckBox {
-spacing: 5px;
+ padding: 5px;
}
-
QCheckBox::indicator {
-width: 16px;
-height: 16px;
+ width: 16px;
+ height: 16px;
}
-
QCheckBox::indicator:unchecked {
-image:url(':/images/crownium/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:unchecked:hover {
-image:url(':/images/crownium/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:unchecked:pressed {
-image:url(':/images/crownium/checked');
+ image:url(':/images/light/checked');
}
-
QCheckBox::indicator:checked {
-image:url(':/images/crownium/checked');
+ image:url(':/images/light/checked');
}
-
QCheckBox::indicator:checked:hover {
-image:url(':/images/crownium/checked');
+ image:url(':/images/light/checked');
}
-
QCheckBox::indicator:checked:pressed {
-image:url(':/images/crownium/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:indeterminate:hover {
-image:url(':/images/crownium/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:indeterminate:pressed {
-image:url(':/images/crownium/checked');
-}
-
-/*******************************************************/
-
-QHeaderView { /* Table Header */
-background-color:transparent;
-}
-
-QHeaderView::section { /* Table Header Sections */
-qproperty-alignment:center;
-/* background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #4c97bf, stop: 1 #56ABD8); */
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .3 #FFFFFF, stop: .7 #FFFFFF, stop: 1 #222222);
-color:#000000;
-min-height:25px;
-/* font-weight:bold; */
-font-size:11px;
-outline:0;
-border:0px solid #fff;
-border-right:1px solid #fff;
-padding-left:5px;
-padding-right:5px;
-padding-top:2px;
-padding-bottom:2px;
-}
-
-QHeaderView::section:last {
-border-right: 0px solid #d7d7d7;
-}
-
-.QScrollArea {
-background:transparent;
-border:0px;
-}
-
-.QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */
-background:transparent;
-border:0px solid #fff;
-}
-
-QTableView::item { /* Table Item */
-background-color:#fcfcfc;
-font-size:12px;
-}
-
-QTableView::item:selected { /* Table Item Selected */
-background-color:#f0f0f0;
-color:#333;
-}
-
-QScrollBar { /* Scroll Bar */
-
-}
-
-QScrollBar:vertical { /* Vertical Scroll Bar Attributes */
-border:0;
-background:#ffffff;
-width:18px;
-margin: 18px 0px 18px 0px;
-}
-
-QScrollBar:horizontal { /* Horizontal Scroll Bar Attributes */
-border:0;
-background:#ffffff;
-height:18px;
-margin: 0px 18px 0px 18px;
-}
-
-
-QScrollBar::handle:vertical { /* Scroll Bar Slider - vertical */
-background:#e0e0e0;
-min-height:10px;
-}
-
-QScrollBar::handle:horizontal { /* Scroll Bar Slider - horizontal */
-background:#e0e0e0;
-min-width:10px;
-}
-
-QScrollBar::add-page, QScrollBar::sub-page { /* Scroll Bar Background */
-background:#F8F6F6;
-}
-
-QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { /* Define Arrow Button Dimensions */
-background-color:#F8F6F6;
-border: 1px solid #f2f0f0;
-width:16px;
-height:16px;
-}
-
-QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed {
-background-color:#e0e0e0;
-}
-
-QScrollBar::sub-line:vertical { /* Vertical - top button position */
-subcontrol-position:top;
-subcontrol-origin: margin;
-}
-
-QScrollBar::add-line:vertical { /* Vertical - bottom button position */
-subcontrol-position:bottom;
-subcontrol-origin: margin;
-}
-
-QScrollBar::sub-line:horizontal { /* Vertical - left button position */
-subcontrol-position:left;
-subcontrol-origin: margin;
-}
-
-QScrollBar::add-line:horizontal { /* Vertical - right button position */
-subcontrol-position:right;
-subcontrol-origin: margin;
-}
+ image:url(':/images/light/checked');
+}
+
+/* -------------------Button--------------------- */
+QPushButton {
+ display: inline-block;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ padding: 8px 14px;
+ border-radius: 4px;
+ color: #fff;
+ background-color: #2e0042;
+ border: 1px solid #ffffff;
+ }
+ QPushButton:hover {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+ QPushButton:focus {
+ border-color: #660099;
+ }
+ QPushButton:pressed {
+ color: #fff;
+ background-color: #330066;
+ border-color: #fff
+ }
+ QPushButton:disabled {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+
+ /* -------------------Textbox--------------------- */
+.QValidatedLineEdit, .QLineEdit, .QTextEdit, QMessageBox, QPlainTextEdit {
+
+ min-height:24px;
+ padding:3px;
+ background-color:#2e0042;
+ border: 1px solid #3f3f5b;
+ color: #ffffff;
+ }
+
+ .QValidatedLineEdit:disabled, .QLineEdit:disabled {
+ /* background-color:#f2f2f2; */
+ background-color: #2e0042;
+ opacity: 0.7;
+ color: #3f3f5b;
+ }
+ .QValidatedLineEdit:focus, .QLineEdit:focus{
+ border-color: #555576;
+ }
+
+ /* -------------------Dropdown, Spinbox--------------------- */
+ QAbstractSpinBox, QSpinBox, QComboBox {
+ /* Dropdown Menus */
+ padding: 3px 5px;
+ min-height:24px;
+ background-color:#2e0042;
+ border: 1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ }
+
+/*
+QComboBox:checked {
+ background:#111111;
+} */
-QScrollBar:up-arrow, QScrollBar:down-arrow, QScrollBar:left-arrow, QScrollBar:right-arrow { /* Arrows Icon */
-width:10px;
-height:10px;
+QComboBox::drop-down {
+ width:24px;
+ border:0px;
}
-
-QScrollBar:up-arrow {
-background-image: url(':/images/crownium/drkblue_upArrow_small');
+QComboBox::down-arrow {
+ border-image: url(':/images/light/drkblue_downArrow') 0 0 0 0 stretch stretch;
}
-
-QScrollBar:down-arrow {
-background-image: url(':/images/crownium/drkblue_downArrow_small');
+QComboBox QListView {
+ background-color:#2e0042;
+ border:1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ padding-right:1px;
+ padding-left:1px;
+
}
-QScrollBar:left-arrow {
-background-image: url(':/images/crownium/drkblue_leftArrow_small');
+QComboBox>QListView::item {
+ padding: 5px;
+ color: #0e056ebd;
}
-QScrollBar:right-arrow {
-background-image: url(':/images/crownium/drkblue_rightArrow_small');
+QComboBox::item:alternate {
+ background:#680f8ebb;
}
-
-
-/*******************************************************/
-
-/* DIALOG BOXES */
-
-QDialog {
-border-image: url(':/images/crownium/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+QComboBox::item:selected {
+ border:0px solid transparent;
+ background:#08675abb;
+ /* color: #ffffff; White text */
}
-
-QDialog .QTabWidget {
-border-bottom:1px solid #333;
+QComboBox::indicator {
+ background-color:transparent;
+ selection-background-color:transparent;
+ color:transparent;
+ selection-color:transparent;
}
-QDialog .QTabWidget::pane {
-border: 1px solid #d7d7d7;
+QAbstractSpinBox::down-button, QAbstractSpinBox::up-button{
+ width:20px;
+ height: 15px;
+ background:#2e0042;
+ border: 0;
}
-
-QDialog .QTabWidget QTabBar::tab {
-background-color:#f2f0f0;
-color:#333;
-padding-left:10px;
-padding-right:10px;
-padding-top:5px;
-padding-bottom:5px;
-border-top: 1px solid #d7d7d7;
+QAbstractSpinBox::up-button:pressed, QAbstractSpinBox::down-button:pressed{
+ background:#2e0042;
}
-QDialog .QTabWidget QTabBar::tab:first {
-border-left: 1px solid #d7d7d7;
+QAbstractSpinBox::up-button {
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ border-right:1px solid #3f3f5b;
+ border-top:1px solid #3f3f5b;
}
-QDialog .QTabWidget QTabBar::tab:last {
-border-right: 1px solid #d7d7d7;
+QAbstractSpinBox::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
}
-QDialog .QTabWidget QTabBar::tab:selected, QDialog .QTabWidget QTabBar::tab:hover {
-background-color:#ffffff;
-color:#333;
+QAbstractSpinBox::down-arrow, QAbstractSpinBox::up-arrow{
+ width:12px;
+ height:12px;
}
-QDialog .QTabWidget .QWidget {
-background-color:#fff;
-color:#333;
+QAbstractSpinBox::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
}
+QAbstractSpinBox::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+}
+
+ /* -------------------Table--------------------- */
+
+QHeaderView::section {
+ /* Table Header Sections */
+ qproperty-alignment:center;
+ background: #2e0042;
+ color: #ffffff; /* White font*/
+ min-height:25px;
+ font-weight:bold;
+ border-top:1px solid #3f3f5b;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
+ padding: 3px 5px;
+ }
+ QHeaderView::section:hover{
+ background: #4b006e;
+ }
+
+ QHeaderView::down-arrow, QHeaderView::up-arrow{
+ width: 14px;
+ height: 14px;
+ margin-right: 3px;
+ }
+ QHeaderView::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+ }
+
+ QHeaderView::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
+ }
-QDialog .QTabWidget .QWidget QAbstractSpinBox {
-min-height:15px;
+/* define QTableView alternating */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
}
-QDialog .QTabWidget .QWidget QAbstractSpinBox::down-button {
-width:15px;
+QTableView::item {
+ background-color: #2e0042;
+ color: #ffffff;
}
-QDialog .QTabWidget .QWidget QAbstractSpinBox::up-button {
-width:15px;
+QTableView::item:alternate {
+ background-color: #3f005b;
}
-QDialog .QTabWidget .QWidget QComboBox {
-min-height:15px;
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
}
-QDialog QWidget { /* Remove Annoying Focus Rectangle */
-outline: 0;
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
}
-/*******************************************************/
-/* FILE MENU */
-
-/* Dialog: Open URI */
-QDialog#OpenURIDialog {
-background-color:#F8F6F6;
+/* define QTreeView alternating */
+QTreeView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
}
-QDialog#OpenURIDialog QLabel#label { /* URI Label */
-font-weight:bold;
+QTreeView::item {
+ background-color: #2e0042;
+ color: #ffffff;
}
-QDialog#OpenURIDialog QPushButton#selectFileButton { /* ... Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+QTreeView::item:alternate {
+ background-color: #3f005b;
}
-QDialog#OpenURIDialog QPushButton#selectFileButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
+QTreeView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
}
-QDialog#OpenURIDialog QPushButton#selectFileButton:pressed {
-border:1px solid #9e9e9e;
+QTreeView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
}
-
-/* Dialog: Sign / Verify Message */
-QDialog#SignVerifyMessageDialog {
+
+ /* -------------------Scrollbar--------------------- */
+QScrollBar {
+ /* Scroll Bar */
+ border:0;
+ background: #2e0042;
+ }
+ QScrollBar:vertical {
+ /* Vertical Scroll Bar Attributes */
+
+ width:6px;
+ margin: 6px 0px 6px 0px;
+ }
+ QScrollBar:horizontal {
+ /* Horizontal Scroll Bar Attributes */
+
+ height:6px;
+ margin: 0px 6px 0px 6px;
+ }
+ QScrollBar::handle:vertical {
+ /* Scroll Bar Slider - vertical */
+ background: #2e0042;
+ min-height:6px;
+ }
+ QScrollBar::handle:horizontal {
+ /* Scroll Bar Slider - horizontal */
+ background: #2e0042;
+ min-width:6px;
+ }
+ QScrollBar::add-page, QScrollBar::sub-page {
+ /* Scroll Bar Background */
+ background:#2e0042;
+ }
+ QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
+ /* Define Arrow Button Dimensions */
+ background-color:#2e0042;
+ /* border: 1px solid #2e0042; */
+ width:6px;
+ height:6px;
+ }
+ QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed {
+ background-color:#2e0042;
+ }
+ QScrollBar::sub-line:vertical {
+ /* Vertical - top button position */
+ subcontrol-position:top;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:vertical {
+ /* Vertical - bottom button position */
+ subcontrol-position:bottom;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::sub-line:horizontal {
+ /* Vertical - left button position */
+ subcontrol-position:left;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:horizontal {
+ /* Vertical - right button position */
+ subcontrol-position:right;
+ subcontrol-origin: margin;
+ }
+ QScrollBar:up-arrow, QScrollBar:down-arrow, QScrollBar:left-arrow, QScrollBar:right-arrow {
+ /* Arrows Icon */
+ width:6px;
+ height:6px;
+ }
+
+/*
+ QScrollBar:up-arrow {
+ image: url(':/images/light/drkblue_upArrow_small');
+ }
+ QScrollBar:down-arrow {
+ image: url(':/images/light/drkblue_downArrow_small');
+ }
+ QScrollBar:left-arrow {
+ image: url(':/images/light/drkblue_leftArrow_small');
+ }
+ QScrollBar:right-arrow {
+ image: url(':/images/light/drkblue_rightArrow_small');
+ } */
+
+
+
+ /* -------------------Tab--------------------- */
+.QTabWidget::pane {
+ border: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab {
+ background-color:#2e0042;
+ padding: 8px 10px;
+ border-top: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:first {
+ border-left: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:last {
+ border-right: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:selected, .QTabWidget QTabBar::tab:hover {
+ background-color:#4b006e;
+ color: #fff;;
+}
+
+/* -------------------MODAL OVERLAY--------------------- */
+QWidget#bgWidget {
+ /* The 'frame' overlaying the overview-page */
+ /*background: rgba(9, 9, 9, 0.6);*/
+ background:#2e0042;
+ }
+ QWidget#bgWidget .QPushButton#warningIcon {
+ width:64px;
+ height:64px;
+ padding:5px;
+ margin-right: 20px;
+ /*background-color:transparent;*/
+ /*background:#2e0042;*/
+ background:rgba(75, 0, 110, 0.5); /* 50%*/
+ color: #ffffff;
+ }
+ QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
border-image: url(':/images/crownium/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+border-top:0px solid #000;
+margin:0;
+padding-top:20px;
+padding-bottom: 20px;
}
-QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM { /* Address Book Button */
-background-color:transparent;
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SignVerifyMessageDialog QPlainTextEdit { /* Message Signing Text */
-border:1px solid #000000;
-background-color:#fff;
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM { /* Paste Button */
-/* qproperty-icon: url(":/icons/drkblue/drkblue_editpaste"); */
-background-color:transparent;
-padding-left:15px;
-}
-
-QDialog#SignVerifyMessageDialog QLineEdit:!focus { /* Font Hack */
-font-size:10px;
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM { /* Copy Button */
-/* qproperty-icon: url(":/icons/drkblue/drkblue_editcopy"); */
-background-color:transparent;
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM { /* Clear Button */
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover {
-
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed {
-
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM { /* Verify Message - Address Book Button */
-background-color:transparent;
-border:0;
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM { /* Verify Message - Clear Button */
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover {
-
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed {
+ /* -------------------OVERVIEW SCREEN--------------------- */
+QWidget .QFrame#frameWallet {
+ /* Wallet Balance */
+ max-width: 451px;
+ min-width: 451px;
+ }
+ QWidget .QFrame#frameWallet > .QLabel {
+ min-width:190px;
+ font-weight:normal;
+ min-height:30px;
+ }
+
+ QWidget .QFrame#frameWallet .QLabel#labelWallet {
+ /* Wallet Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ font-size: 14px;
+ height: 35px;
+ max-width: 421px;
+ min-width: 421px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWalletStatus {
+ /* Wallet Sync Status */
+ /* qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:3px; */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelSpendable {
+ /* Spendable Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:12px;
+ margin-left:18px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchonly {
+ /* Watch-only Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalanceText {
+ /* Available Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalance {
+ /* Available Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color:#11c26d;
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchAvailable {
+ /* Watch-only Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelPendingText {
+ /* Pending Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelUnconfirmed {
+ /* Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchPending {
+ /* Watch-only Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmatureText {
+ /* Immature Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmature {
+ /* Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchImmature {
+ /* Watch-only Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ color: #555576
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotalText {
+ /* Total Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ font-size:14px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotal {
+ /* Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:0px;
+ color: #2e0042
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchTotal {
+ /* Watch-only Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:16px;
+ color: #555576
+ }
+
+ QWidget .QFrame#frameWallet #lineSpendableBalance, QWidget .QFrame#frameWallet #lineWatchBalance {
+ border-bottom: 1px dashed #3f3f5b;
+}
+
+
+/* -------------------PRIVATESEND WIDGET--------------------- */
+QWidget .QFrame#framePrivateSend {
+ /* PrivateSend Widget */
+ /* background-color:transparent;*/
+ color: #fff;
+ /*background-color: #660099 ;*/
+ max-width: 451px;
+ min-width: 451px;
+ max-height: 350px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader {
+ /* PrivateSend Header */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ max-width: 421px;
+ min-width: 421px;
+ background-color:transparent;
+ margin-right: 5px;
+ padding-right: 5px;
+ font-weight:normal;
+ font-size:14px;
+ min-height:35px;
+ max-height:35px;
+ }
+ /******************************************************************/
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus {
+ /* PrivateSend Sync Status */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:2px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget {
+ max-width: 451px;
+ max-height: 175px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel {
+ min-width:175px;
+ font-weight:normal;
+ min-height:25px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText {
+ /* PrivateSend Enabled Status Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText {
+ /* PrivateSend Completion Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress {
+ /* PrivateSend Completion */
+ margin-right:43px;
+ text-align: right;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk {
+ background-color: #28a745;
+ width:1px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText {
+ /* PrivateSend Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText {
+ /* PrivateSend Amount and Rounds Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText {
+ /* PrivateSend Submitted Denom Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons {
+ max-width: 451px;
+ }
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage {
+ /* PrivateSend Status Notifications */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ min-width: 288px;
+ min-height: 43px;
+
+ }
+ /* PRIVATESEND BUTTONS */
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo {
+ /* Info Button */
+ color: #fff;
+ background-color: #2e0042;
+ border-color: #2e0042;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover {
+
+ color: #fff;
+ background-color: #4b006e;
+ border-color: #2e0042;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed {
+
+ border-color: #0099b8;
+ }
+/* RECENT TRANSACTIONS */
+QWidget .QFrame#frame_2 {
+ /* Transactions Widget */
+ min-width:410px;
+ margin-right:20px;
+ margin-left:0;
+ margin-top:0px;
+
+}
+QWidget .QFrame#frame_2 .QLabel#label_4 {
+ /* Recent Transactions Label */
+ min-width:180px;
+ margin-left:20px;
+ margin-right:5px;
+ padding-right:5px;
+ font-weight:normal;
+ font-size:14px;
+ /* min-height:24px; */
+}
+QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus {
+ /* Recent Transactions Sync Status */
+ qproperty-alignment: 'AlignBottom | AlignRight';
+ min-width:93px;
+ margin-left:16px;
+ margin-right:5px;
+ min-height:16px;
+}
+QWidget .QFrame#frame_2 QListView {
+ /* Transaction List */
+ font-weight:normal;
+ font-size:12px;
+ max-width:369px;
+ margin-top:12px;
+ margin-left:0px;
+ /* CSS Voodoo - set to -66px to hide default transaction icons */
+}
+
+ /* -------------------SEND DIALOG--------------------- */
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures {
+ /* Coin Control Header */
+ font-weight:normal;
+ font-size:14px;
+ }
+
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel {
+ /* Custom Change Address Validation Label */
+ font-weight:normal;
+ qproperty-margin:-6;
+ margin-right:112px;
+ }
+
+ QDialog#SendCoinsDialog .QPushButton#clearButton {
+ color: #eb6709;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:hover {
+
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:pressed {
+ border-color: #de4e00;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton {
+ /* Add Button */
+ color: #11c26d;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #11c26d;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:hover {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:pressed {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog .QCheckBox#checkUsePrivateSend, QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend {
+ /* PrivateSend Checkbox */
+ margin-right: 15px;
+ }
+
+ QDialog#SendCoinsDialog #checkboxSubtractFeeFromAmount{
+ margin-left: 8px;
+ }
+ /* This QLabel uses name = "label" which conflicts with Address Book -> New Address */
+ /* To maximize backwards compatibility this formatting has been removed */
+ QDialog#SendCoinsDialog QLabel#label {
+ font-size:14px;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog QLabel#labelBalance {
+ /*color:#11c26d;*/
+ color:#ffffff;
+ font-size:14px;
+ }
+
+ /* -------------------SEND COINS ENTRY--------------------- */
+ QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel {
+ /* Send Coin Entry Labels */
+ min-width:102px;
+ font-weight:normal;
+ min-height:25px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+/* -------------------COIN CONTROL POPUP--------------------- */
+QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText {
+ /* Coin Control Quantity Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity {
+ /* Coin Control Quantity */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText {
+ /* Coin Control Bytes Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytes {
+ /* Coin Control Bytes */
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText {
+ /* Coin Control Amount Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmount {
+ /* Coin Control Amount */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText {
+ /* Coin Control Priority Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText {
+ /* Coin Control Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFee {
+ /* Coin Control Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText {
+ /* Coin Control Low Output Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText {
+ /* Coin Control After Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee {
+ /* Coin Control After Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText {
+ /* Coin Control Change Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
+ padding:3px 5px;
+ background: #2e0042;
+ border-right: 1px solid #3f3f5b;
+ border-bottom: 1px solid #3f3f5b;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:hover {
+ background: #660099;
+}
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected {
+ /* Coin Control Item (selected) */
+ background: #2e0042;
+ color: #fff;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked {
+ /* Coin Control Item (checked) */
+ background: #2e0042;
+ color: #fff
+ }
+
+/* -------------------RECEIVE COINS--------------------- */
+QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
+ /* Label Label */
+ min-width:102px;
+ padding-right:5px;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton {
+ /* Clear Button */
+ color: #eb6709;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed {
+ border-color: #f2353c;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton {
+ /* Remove Button */
+ color: #ff4c52;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover {
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed {
+ border-color: #f2353c;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 {
+ /* Requested Payments History Label */
+ font-weight:normal;
+ font-size:14px;
+ }
+
+ /* -------------------TRANSACTIONS PAGE--------------------- */
+ TransactionView QLineEdit {
+ /* Filters */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:111px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#addressWidget {
+ /* Address Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:405px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#amountWidget {
+ /* Amount Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ max-width:100px;
+ text-align:center;
+ }
+ TransactionView QComboBox {
+ margin-bottom:1px;
+ margin-right:1px;
+ }
+ QLabel#transactionSumLabel {
+ /* Example of setObjectName for widgets without name */
+ font-weight:bold;
+ }
+
+/* -------------------Dialog: Open URI--------------------- */
+QDialog#OpenURIDialog QLabel#label {
+ /* URI Label */
+ font-weight:bold;
+}
+
+/* -------------------Dialog: Sign / Verify Message--------------------- */
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM {
+ border-color: #3f3f5b;
+ margin-left: 8px;
+ color: #ffffff;
+}
+
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM {
+ /* Clear Button */
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed {
+ border-color: #de4e00;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM {
+ /* Verify Message - Clear Button */
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed {
+ border-color: #de4e00;
}
/* Dialog: Send and Receive */
-QWidget#AddressBookPage {
-background-color:#F8F6F6;
-}
-
-QWidget#AddressBookPage QPushButton#newAddress { /* New Address Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#AddressBookPage QPushButton#newAddress:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#AddressBookPage QPushButton#newAddress:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#AddressBookPage QPushButton#copyAddress { /* Copy Address Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#AddressBookPage QPushButton#copyAddress:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#AddressBookPage QPushButton#copyAddress:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#AddressBookPage QPushButton#deleteAddress { /* Delete Address Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+QWidget#AddressBookPage QPushButton#deleteAddress {
+ /* Delete Address Button */
+ color: #ff4c52;
+ background-color: transparent;
+ border-color: #ff4c52;
}
-
QWidget#AddressBookPage QPushButton#deleteAddress:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
}
-
QWidget#AddressBookPage QPushButton#deleteAddress:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#AddressBookPage QTableView { /* Address Listing */
-font-size:12px;
+ border-color: #f2353c;
}
-QWidget#AddressBookPage QHeaderView::section { /* Min width for Windows fix */
-min-width:260px;
+QWidget#AddressBookPage #tableView{
+ font-size: 13px;
}
-/* SETTINGS MENU */
-
-/* Encrypt Wallet and Change Passphrase Dialog */
-QDialog#AskPassphraseDialog {
-background-color:#F8F6F6;
+QWidget#AddressBookPage QHeaderView::section {
+ /* Min width for Windows fix */
+ min-width:260px;
}
+/*------Encrypt Wallet and Change Passphrase Dialog (in SETTINGS MENU)---------*/
QDialog#AskPassphraseDialog QLabel#passLabel1, QDialog#AskPassphraseDialog QLabel#passLabel2, QDialog#AskPassphraseDialog QLabel#passLabel3 {
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:170px;
-min-height:33px; /* base width of 25px for QLineEdit, plus padding and border */
-}
-
-/* Options Dialog */
-QDialog#OptionsDialog {
-background-color:#F8F6F6;
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:170px;
+ min-height:33px;
+ /* base width of 25px for QLineEdit, plus padding and border */
}
-QDialog#OptionsDialog QValueComboBox, QDialog#OptionsDialog QSpinBox {
-margin-top:5px;
-margin-bottom:5px;
+/*------------Options Dialog--------------- */
+QDialog#OptionsDialog QValueComboBox,
+QDialog#OptionsDialog QSpinBox,
+QDialog#OptionsDialog .QLineEdit,
+QDialog#OptionsDialog .QValidatedLineEdit {
+ min-height: 24px;
}
-
QDialog#OptionsDialog QValidatedLineEdit, QDialog#OptionsDialog QValidatedLineEdit:disabled, QDialog#OptionsDialog QLineEdit, QDialog#OptionsDialog QLineEdit:disabled {
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-min-height:20px;
-margin-top:0px;
-margin-bottom:0px;
-padding-top:1px;
-padding-bottom:1px;
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ min-height:20px;
+ margin-top:0px;
+ margin-bottom:0px;
+ padding-top:1px;
+ padding-bottom:1px;
}
-
QDialog#OptionsDialog > QLabel {
-qproperty-alignment: 'AlignVCenter';
-min-height:20px;
-}
-
-QDialog#OptionsDialog QWidget#tabDisplay QValueComboBox {
-margin-top:0px;
-margin-bottom:0px;
+ qproperty-alignment: 'AlignVCenter';
+ min-height:20px;
}
-QDialog#OptionsDialog QLabel#label_3 { /* Translations Missing? Label */
-qproperty-alignment: 'AlignVCenter | AlignCenter';
-color:#818181;
-padding-bottom:8px;
+QDialog#OptionsDialog QLabel#label_3 {
+ /* Translations Missing? Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ padding-bottom:8px;
}
-
QDialog#OptionsDialog QCheckBox {
-min-height:20px;
-}
-
-QDialog#OptionsDialog QCheckBox#displayAddresses {
-min-height:33px;
-
-}
-
-/* TOOLS MENU */
-
-QDialog#RPCConsole { /* RPC Console Dialog Box */
-background-color:#F8F6F6;
-}
-
-QDialog#RPCConsole QWidget#tab_info QLabel#label_11, QDialog#RPCConsole QWidget#tab_info QLabel#label_10 { /* Margin between Network and Block Chain headers */
-qproperty-alignment: 'AlignBottom';
-min-height:25px;
-min-width:180px;
-}
-
-QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading { /* Peers Info Header */
-color:#333333;
-}
-
-QDialog#RPCConsole QPushButton#openDebugLogfileButton {
-max-width:60px;
-}
-
-QDialog#RPCConsole QTextEdit#messagesWidget { /* Console Messages Window */
-border:0;
-}
-
-QDialog#RPCConsole QLineEdit#lineEdit { /* Console Input */
-margin-right:5px;
-}
-
-QDialog#RPCConsole QPushButton#clearButton { /* Console Clear Button */
-background-color:transparent;
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#RPCConsole .QGroupBox #line { /* Network In Line */
-background-color:#00ff00;
-}
-
-QDialog#RPCConsole .QGroupBox #line_2 { /* Network Out Line */
-background:#ff0000;
-}
-
-QDialog#RPCConsole QWidget#tab_nettraffic {
-border-image: url(':/images/crownium/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
-}
-
-QDialog#RPCConsole QWidget#tab_nettraffic QSlider#sldGraphRange{ /* Network slider background */
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #000000, stop: .5 #FFFFFF, stop: .5 #FFFFFF, stop: 1 #000000);
-}
-
-
-QDialog#RPCConsole QWidget#tab_info {
-border-image: url(':/images/crownium/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
-}
-
-QDialog#RPCConsole QWidget#tab_repair {
-border-image: url(':/images/crownium/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
-}
-
-/* HELP MENU */
-
-/* Command Line Options Dialog */
-QDialog#HelpMessageDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#HelpMessageDialog QScrollArea * {
-background-color:#ffffff;
-}
-
-QDialog#HelpMessageDialog QScrollBar:vertical, QDialog#HelpMessageDialog QScrollBar:horizontal {
-border:0;
-}
-
-/* About RussellCoin2 Dialog */
-QDialog#AboutDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 { /* About RussellCoin2 Contents */
-margin-left:10px;
-}
-
-QDialog#AboutDialog QLabel#label_2 { /* Margin for About RussellCoin2 text */
-margin-right:10px;
-}
-
-/* Edit Address Dialog */
-QDialog#EditAddressDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#EditAddressDialog QLabel {
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-height:27px;
-font-weight:normal;
-padding-right:5px;
-}
-
-/* OVERVIEW SCREEN */
-
-QWidget .QFrame#frame { /* Wallet Balance */
-min-width:490px;
-}
-
-QWidget .QFrame#frame > .QLabel {
-min-width:190px;
-font-weight:normal;
-min-height:30px;
-}
-
-QWidget .QFrame#frame .QLabel#label_5 { /* Wallet Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:transparent;
-color:transparent;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWalletStatus { /* Wallet Sync Status */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-margin-left:3px;
-}
-
-QWidget .QFrame#frame .QLabel#labelSpendable { /* Spendable Header */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:18px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchonly { /* Watch-only Header */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelBalanceText { /* Available Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #000000, stop: .4 #444444, stop: .6 #444444, stop: 1 #000000);
-color:#ffffff;
-margin-right:5px;
-padding-right:5px;
-font-weight:bold;
-font-size:14px;
-min-height:35px;
-}
-
-QWidget .QFrame#frame .QLabel#labelBalance { /* Available Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-font-weight:bold;
-color:#000000;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchAvailable { /* Watch-only Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelPendingText { /* Pending Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-font-size:12px;
-background-color:#F0F0F0;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelUnconfirmed { /* Pending Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchPending { /* Watch-only Pending Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelImmatureText { /* Immature Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-font-size:12px;
-background-color:#F0F0F0;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelImmature { /* Immature Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchImmature { /* Watch-only Immature Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelTotalText { /* Total Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-font-size:12px;
-background-color:#F0F0F0;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelTotal { /* Total Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchTotal { /* Watch-only Total Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-/* PRIVATESEND WIDGET */
-
-QWidget .QFrame#framePrivateSend { /* PrivateSend Widget */
-background-color:transparent;
-max-width: 451px;
-min-width: 451px;
-max-height: 350px;
-}
-
-QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetPrivateSendHeader { /* PrivateSend Header */
-max-width: 421px;
-min-width: 421px;
-}
-
-QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader { /* PrivateSend Header */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #000000, stop: .4 #444444, stop: .6 #444444, stop: 1 #000000);
-/* border:3px outset #888888; */
-color:#ffffff;
-margin-right:5px;
-padding-right:5px;
-font-weight:bold;
-font-size:14px;
-min-height:35px;
-max-height:35px;
-}
-/******************************************************************/
-QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus { /* PrivateSend Sync Status */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-margin-left:2px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget {
-max-width: 451px;
-max-height: 175px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel {
-min-width:175px;
-font-weight:normal;
-min-height:25px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText { /* PrivateSend Status Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F0F0F0;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabled { /* PrivateSend Status */
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText { /* PrivateSend Completion Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F0F0F0;
-margin-right:5px;
-padding-right:5px;
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress { /* PrivateSend Completion */
-border: 1px solid #333333;
-border-radius: 1px;
-margin-right:43px;
-text-align: right;
-color:#333333;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk {
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #000000, stop: .4 #EEEEEE, stop: .6 #EEEEEE, stop: 1 #000000);
-width:1px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText { /* PrivateSend Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F0F0F0;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymized { /* PrivateSend Balance */
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText { /* PrivateSend Amount and Rounds Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F0F0F0;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountRounds { /* PrivateSend Amount and Rounds */
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText { /* PrivateSend Submitted Denom Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F0F0F0;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenom { /* PrivateSend Submitted Denom */
-
-}
-
-QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons {
-max-width: 451px;
-}
-
-QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage { /* PrivateSend Status Notifications */
-qproperty-alignment: 'AlignVCenter | AlignCenter';
-min-width: 288px;
-min-height: 43px;
-font-size:11px;
-color:#222222;
-}
-
-/* PRIVATESEND BUTTONS */
-
-QWidget .QFrame#framePrivateSend .QPushButton { /* PrivateSend Buttons - General Attributes */
-border:0px solid #ffffff;
-}
-
-QWidget .QFrame#framePrivateSend QPushButton:focus {
-border:none;
-outline:none;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend { /* Start PrivateSend Mixing */
-font-size:15px;
-font-weight:bold;
-color:#000000;
-padding-left:10px;
-padding-right:10px;
-padding-top:5px;
-padding-bottom:6px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend:hover {
-
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendAuto { /* Try Mix Button */
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .3 #FFFFFF, stop: .7 #FFFFFF, stop: 1 #222222);
-border:1px solid #d2d2d2;
-color:#616161;
-min-height:25px;
-font-size:9px;
-padding:0px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendAuto:hover {
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .2 #FFFFFF, stop: .6 #FFFFFF, stop: 1 #222222);
-color:#000000;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendAuto:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset { /* Reset Button */
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .3 #FFFFFF, stop: .7 #FFFFFF, stop: 1 #222222);
-border:1px solid #d2d2d2;
-color:#616161;
-min-height:25px;
-font-size:9px;
-padding:0px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset:hover {
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .2 #FFFFFF, stop: .6 #FFFFFF, stop: 1 #222222);
-color:#000000;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo { /* Info Button */
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .3 #FFFFFF, stop: .7 #FFFFFF, stop: 1 #222222);
-border:1px solid #d2d2d2;
-color:#616161;
-min-height:25px;
-font-size:9px;
-padding:0px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover {
-background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .2 #FFFFFF, stop: .6 #FFFFFF, stop: 1 #222222);
-color:#000000;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed {
-border:1px solid #9e9e9e;
-}
-
-/* RECENT TRANSACTIONS */
-
-QWidget .QFrame#frame_2 { /* Transactions Widget */
-min-width:410px;
-margin-right:20px;
-margin-left:0;
-margin-top:0;
-background-image: url(':/images/crownium/RussellCoin2_logo_horizontal');
-background-repeat:none;
-}
-
-QWidget .QFrame#frame_2 .QLabel#label_4 { /* Recent Transactions Label */
-min-width:180px;
-color:#333333;
-margin-left:67px;
-margin-top:83px;
-margin-right:5px;
-padding-right:5px;
-font-weight:bold;
-font-size:15px;
-min-height:24px;
-}
-
-QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus { /* Recent Transactions Sync Status */
-qproperty-alignment: 'AlignBottom | AlignRight';
-min-width:93px;
-margin-top:83px;
-margin-left:16px;
-margin-right:5px;
-min-height:16px;
-}
-
-QWidget .QFrame#frame_2 QListView { /* Transaction List */
-font-weight:normal;
-font-size:12px;
-max-width:369px;
-color:#333333;
-margin-top:12px;
-margin-left:0px; /* CSS Voodoo - set to -66px to hide default transaction icons */
-}
-
-/* MODAL OVERLAY */
-
-QWidget#bgWidget { /* The 'frame' overlaying the overview-page */
- background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
- color:#616161;
- padding-left:10px;
- padding-right:10px;
-}
-
-QWidget#bgWidget .QPushButton#warningIcon {
-width:64px;
-height:64px;
-padding:5px;
-background-color:transparent;
-}
-
-QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
-border-image: url(':/images/crownium/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
-border-top:0px solid #000;
-margin:0;
-padding-top:20px;
-padding-bottom: 20px;
-}
-
-QWidget#bgWidget .QPushButton#closeButton {
-
-}
-
-/* SEND DIALOG */
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl { /* Coin Control Section */
-
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl > .QLabel { /* Default Font Color and Size */
-font-weight:normal;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QPushButton#pushButtonCoinControl { /* Coin Control Inputs Button */
-padding-left:10px;
-padding-right:10px;
-min-height:25px;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures { /* Coin Control Header */
-color:#333333;
-font-weight:bold;
-font-size:14px;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl { /* Coin Control Inputs */
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl > .QLabel { /* Coin Control Inputs Labels */
-padding:2px;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QCheckBox#checkBoxCoinControlChange { /* Custom Change Label */
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QValidatedLineEdit#lineEditCoinControlChange { /* Custom Change Address */
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel { /* Custom Change Address Validation Label */
-font-weight:normal;
-qproperty-margin:-6;
-margin-right:112px;
-}
-
-QDialog#SendCoinsDialog .QScrollArea#scrollArea .QWidget#scrollAreaWidgetContents { /* Send To Widget */
-background:transparent;
-}
-
-QDialog#SendCoinsDialog .QPushButton#sendButton { /* Send Button */
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SendCoinsDialog .QPushButton#clearButton { /* Clear Button */
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SendCoinsDialog .QPushButton#clearButton:hover {
-
-}
-
-QDialog#SendCoinsDialog .QPushButton#clearButton:pressed {
-
-}
-
-QDialog#SendCoinsDialog .QPushButton#addButton { /* Add Button */
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SendCoinsDialog .QPushButton#addButton:hover {
-
-}
-
-QDialog#SendCoinsDialog .QPushButton#addButton:pressed {
-
-}
-
-QDialog#SendCoinsDialog .QCheckBox#checkUsePrivateSend { /* PrivateSend Checkbox */
-color:#555555;
-font-weight:bold;
-background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5, fx:0.5, fy:0.5, stop:0 rgba(248, 246, 246, 128), stop: 1 rgba(0, 0, 0, 0));
-border-radius:5px;
-padding-top:20px;
-padding-bottom:18px;
-}
-
-QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend { /* InstantSend Checkbox */
-color:#555555;
-font-weight:bold;
-background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5, fx:0.5, fy:0.5, stop:0 rgba(248, 246, 246, 128), stop: 1 rgba(0, 0, 0, 0));
-border-radius:5px;
-padding-top:20px;
-padding-bottom:18px;
-margin-left:10px;
-margin-right:20px;
-}
-
-/* This QLabel uses name = "label" which conflicts with Address Book -> New Address */
-/* To maximize backwards compatibility this formatting has been removed */
-
-QDialog#SendCoinsDialog QLabel#label {
-/*margin-left:20px;
-margin-right:-2px;
-padding-right:-2px;
-color:#616161;
-font-size:14px;
-font-weight:bold;
-border-radius:5px;
-padding-top:20px;
-padding-bottom:20px;*/
-min-height:27px;
-}
-
-QDialog#SendCoinsDialog QLabel#labelBalance {
-margin-left:0px;
-padding-left:0px;
-color:#333333;
-/* font-weight:bold;
-border-radius:5px;
-padding-top:20px;
-padding-bottom:20px; */
-min-height:27px;
-}
-
-#checkboxSubtractFeeFromAmount {
-padding-left:10px;
-}
-
-/* SEND COINS ENTRY */
-
-QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel { /* Send Coin Entry Labels */
-background-color:#F0F0F0;
-min-width:102px;
-font-weight:bold;
-font-size:11px;
-color:#000000;
-min-height:25px;
-margin-right:5px;
-padding-right:5px;
-}
-
-QStackedWidget#SendCoinsEntry .QFrame#SendCoins .QLabel#amountLabel {
-background-color:#6a6a6a;
-color:#ffffff;
-}
-
-QStackedWidget#SendCoinsEntry .QValidatedLineEdit#payTo { /* Pay To Input Field */
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton { /* General Settings for Pay To Icons */
-background-color:transparent;
-padding-left:5px;
-padding-right:5px;
-border: 0;
-outline: 0;
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { /* Address Book Button */
-padding-left:10px;
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton {
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#pasteButton {
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#deleteButton {
-}
-
-QStackedWidget#SendCoinsEntry .QLineEdit#addAsLabel { /* Pay To Input Field */
-}
-
-/* COIN CONTROL POPUP */
-
-QDialog#CoinControlDialog { /* Coin Control Dialog Window */
-background-color:#F8F6F6;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText { /* Coin Control Quantity Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity { /* Coin Control Quantity */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText { /* Coin Control Bytes Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlBytes { /* Coin Control Bytes */
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText { /* Coin Control Amount Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAmount { /* Coin Control Amount */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText { /* Coin Control Priority Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlPriority { /* Coin Control Priority */
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText { /* Coin Control Fee Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlFee { /* Coin Control Fee */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText { /* Coin Control Low Output Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutput { /* Coin Control Low Output */
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText { /* Coin Control After Fee Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee { /* Coin Control After Fee */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText { /* Coin Control Change Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlChange { /* Coin Control Change */
-
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonSelectAll { /* (un)select all button */
-padding-left:10px;
-padding-right:10px;
-min-height:25px;
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonToggleLock { /* Toggle lock state button */
-padding-left:10px;
-padding-right:10px;
-min-height:25px;
-}
-
-QDialog#CoinControlDialog .QDialogButtonBox#buttonBox QPushButton { /* Coin Control 'OK' button */
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QRadioButton#radioTreeMode { /* Coin Control Tree Mode Selector */
-color:#818181;
-background-color:transparent;
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QRadioButton#radioListMode { /* Coin Control List Mode Selector */
-color:#818181;
-background-color:transparent;
-}
-
-QDialog#CoinControlDialog QHeaderView::section:first { /* Bug Fix: the number "1" displays in this table for some reason... */
-color:transparent;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget { /* Coin Control Widget Container */
-outline:0;
-background-color:#ffffff;
-border:0px solid #818181;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected { /* Coin Control Item (selected) */
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked { /* Coin Control Item (checked) */
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:selected { /* Coin Control Branch Icon */
-background-image: url(':/images/crownium/drkblue_qtreeview_selected');
-background-repeat:no-repeat;
-background-position:center;
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:checked { /* Coin Control Branch Icon */
-background-image: url(':/images/crownium/drkblue_qtreeview_selected');
-background-repeat:no-repeat;
-background-position:center;
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::seperator {
-
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::indicator { /* Coin Control Widget Checkbox */
-
-}
-
-/* RECEIVE COINS */
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_2 { /* Label Label */
-background-color:#F0F0F0;
-min-width:102px;
-color:#000000;
-font-weight:bold;
-font-size:11px;
-padding-right:5px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label { /* Amount Label */
-background-color:#6a6a6a;
-min-width:102px;
-color:#ffffff;
-font-weight:bold;
-font-size:11px;
-padding-right:5px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_3 { /* Message Label */
-background-color:#6a6a6a;
-min-width:102px;
-color:#000000;
-font-weight:bold;
-font-size:11px;
-padding-right:5px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton { /* Clear Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton { /* Show Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton { /* Remove Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 { /* Requested Payments History Label */
-color:#333333;
-font-weight:bold;
-font-size:14px;
-}
-
-/* RECEIVE COINS DIALOG */
-
-QDialog#ReceiveRequestDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#ReceiveRequestDialog QTextEdit { /* Contents of Receive Coin Dialog */
-border:1px solid #d7d7d7;
-}
-
-/* TRANSACTIONS PAGE */
-
-TransactionView QLineEdit { /* Filters */
-margin-bottom:2px;
-margin-right:1px;
-min-width:111px;
-text-align:center;
-}
-
-TransactionView QLineEdit#addressWidget { /* Address Filter */
-margin-bottom:2px;
-margin-right:1px;
-min-width:405px;
-text-align:center;
-}
-
-TransactionView QLineEdit#amountWidget { /* Amount Filter */
-margin-bottom:2px;
-margin-right:1px;
-max-width:100px;
-text-align:center;
-}
-
-TransactionView QComboBox {
-margin-bottom:1px;
-margin-right:1px;
-}
-
-QLabel#transactionSumLabel { /* Example of setObjectName for widgets without name */
-color:#333333;
-font-weight:bold;
-}
+ /* min-height:20px; */
+ margin-bottom: 4px;
+}
+QDialog#OptionsDialog QGroupBox::title {
+ padding: 5px 3px;
+ font-weight: bold;
+}
+
+/* -------------------Toolbox--------------------- */
+
+QDialog#RPCConsole QWidget#tab_info QLabel#label_11, QDialog#RPCConsole QWidget#tab_info QLabel#label_10 {
+ /* Margin between Network and Block Chain headers */
+ qproperty-alignment: 'AlignBottom';
+ min-height:25px;
+ min-width:180px;
+ }
+ QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading {
+ /* Peers Info Header */
+ color:#2e0042;
+ }
+ QDialog#RPCConsole QPushButton#openDebugLogfileButton {
+ max-width:60px;
+ }
+ QDialog#RPCConsole QTextEdit#messagesWidget {
+ /* Console Messages Window */
+ border:0;
+ }
+ QDialog#RPCConsole QLineEdit#lineEdit {
+ /* Console Input */
+ margin-right:5px;
+ }
+ QDialog#RPCConsole QPushButton#clearButton {
+ /* Console Clear Button */
+ background-color:transparent;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#RPCConsole .QGroupBox #line {
+ /* Network In Line */
+ background-color:#00ff00;
+ }
+ QDialog#RPCConsole .QGroupBox #line_2 {
+ /* Network Out Line */
+ background:#ff3300;
+ }
-QLabel#transactionSum { /* Example of setObjectName for widgets without name */
-color:#333333;
-}
-
-/* TRANSACTION DETAIL DIALOG */
-
-QDialog#TransactionDescDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#TransactionDescDialog QTextEdit { /* Contents of Receive Coin Dialog */
-border:1px solid #d7d7d7;
-}
-
-
+ #RPCConsole #fontSmallerButton, #RPCConsole #fontBiggerButton,#RPCConsole #clearButton{
+ border-color: #3f3f5b;
+ padding: 3px;
+ }
+ #RPCConsole #promptIcon{
+ border: 0;
+ }
+
+ /* HELP MENU */
+
+
+ /* About GeekCash Dialog */
+
+ QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 {
+ /* About GeekCash Contents */
+ margin-left:10px;
+ }
+ QDialog#AboutDialog QLabel#label_2 {
+ /* Margin for About GeekCash text */
+ margin-right:10px;
+ }
+ /* Edit Address Dialog */
+
+ QDialog#EditAddressDialog QLabel {
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-height:27px;
+ font-weight:normal;
+ padding-right:5px;
+ }
diff --git a/src/qt/res/css/drkblue.css b/src/qt/res/css/drkblue.css
index ac29a682..77a2f46a 100644
--- a/src/qt/res/css/drkblue.css
+++ b/src/qt/res/css/drkblue.css
@@ -1,1632 +1,1208 @@
-WalletFrame {
-border-image: url(':/images/drkblue/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
-border-top:0px solid #000;
-margin:0;
-padding:0;
-}
-
-QStatusBar {
-background-color:#ffffff;
-}
-
-.QFrame {
-background-color:transparent;
-border:0px solid #fff;
-}
-
-QMenuBar {
-background-color:#fff;
-}
-
-QMenuBar::item {
-background-color:#fff;
-}
-
-QMenuBar::item:selected {
-background-color:#f8f6f6;
-}
-
-QMenu {
-background-color:#f8f6f6;
-}
-
-QMenu::item {
-color:#333;
-}
-
-QMenu::item:selected {
-background-color:#f2f0f0;
-color:#333;
-}
-
-QToolBar {
-background-color:#3398CC;
-border:0px solid #000;
-padding:0;
-margin:0;
-}
-
-QToolBar > QToolButton {
-background-color:#3398CC;
-border:0px solid #333;
-min-height:2.5em;
-padding: 0em 1em;
-font-weight:bold;
-color:#fff;
-}
-
-QToolBar > QToolButton:checked {
-background-color:#fff;
-color:#333;
-font-weight:bold;
+/* Global Styles */
+* {
+ color: #FFFFFF; /* Set default text color to white */
+ font-size: 13px;
+ font-family: Arial, Helvetica, sans-serif;
+ outline: none;
}
-QMessageBox {
-background-color:#F8F6F6;
-}
-
-/*******************************************************/
-
-QLabel { /* Base Text Size & Color */
-font-size:12px;
-color:#333333;
-}
-
-.QCheckBox { /* Checkbox Labels */
-color:#333333;
-background-color:transparent;
-}
-
-.QCheckBox:hover {
-background-color:transparent;
-}
-
-.QValidatedLineEdit, .QLineEdit { /* Text Entry Fields */
-border: 1px solid #82C3E6;
-font-size:11px;
-min-height:25px;
-outline:0;
-padding:3px;
-background-color:#fcfcfc;
-}
-
-.QLineEdit:!focus {
-font-size:12px;
-}
-
-.QValidatedLineEdit:disabled, .QLineEdit:disabled {
-background-color:#f2f2f2;
-}
-
-/*******************************************************/
-
-QPushButton { /* Global Button Style */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #64ACD2, stop: .1 #3398CC, stop: .95 #3398CC, stop: 1 #1D80B5);
-border:0;
-border-radius:3px;
-color:#ffffff;
-font-size:12px;
-font-weight:bold;
-padding-left:25px;
-padding-right:25px;
-padding-top:5px;
-padding-bottom:5px;
-}
-
-QPushButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #64ACD2, stop: .1 #46AADE, stop: .95 #46AADE, stop: 1 #1D80B5);
-}
-
-QPushButton:focus {
-border:none;
-outline:none;
-}
-
-QPushButton:pressed {
-border:1px solid #333;
+/* Background image (for widget) */
+WalletFrame {
+ border-image: url(':/images/drkblue/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
}
-QComboBox { /* Dropdown Menus */
-border:1px solid #82C3E6;
-padding: 3px 5px 3px 5px;
-background:#fcfcfc;
-min-height:25px;
-color:#818181;
+/* The first layer: Dialogs and Widgets */
+QDialog {
+ background-color: #2e0042;
+ color: #ffffff;
}
-
-QComboBox:checked {
-background:#f2f2f2;
+QWidget {
+ background-color: transparent;
+ color: #ffffff;
}
-QComboBox:editable {
-background: #3398CC;
-color:#616161;
-border:0px solid transparent;
+/* The second layer: Labels and Buttons */
+QLabel {
+ color: #FFFFFF;
}
-
-QComboBox::drop-down {
-width:25px;
-border:0px;
+QPushButton {
+ color: #FFFFFF;
}
-QComboBox::down-arrow {
-border-image: url(':/images/drkblue/drkblue_downArrow') 0 0 0 0 stretch stretch;
+/* The thrid layer: Input fields */
+QLineEdit, QTextEdit, QPlainTextEdit {
+ background-color: #3f005b;
+ color: #FFFFFF;
}
-QComboBox QListView {
-background:#fff;
-border:1px solid #333;
-padding-right:1px;
-padding-left:1px;
+/* Restore alternating row styles */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #FFFFFF;
}
-QComboBox QAbstractItemView::item { margin:4px; }
-
-QComboBox::item {
-color:#818181;
+QTableView::item {
+ background-color: #2e0042;
+ color: #FFFFFF;
}
-QComboBox::item:alternate {
-background:#fff;
+QTableView::item:alternate {
+ background-color: #3f005b;
}
-QComboBox::item:selected {
-border:0px solid transparent;
-background:#f2f2f2;
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #FFFFFF;
}
-QComboBox::indicator {
-background-color:transparent;
-selection-background-color:transparent;
-color:transparent;
-selection-color:transparent;
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
}
-QAbstractSpinBox {
-border:1px solid #82C3E6;
-padding: 3px 5px 3px 5px;
-background:#fcfcfc;
-min-height:25px;
-color:#818181;
+.QFrame {
+ background-color: rgba(75, 0, 110, 0.5); /* 50% transparent*/
+ border:0px solid #2e0042;
+ color: #ffffff; /* white text */
+ padding: 5px;
+ border-radius: 4px;
+}
+
+/* Pop up help(tip)*/
+QToolTip{
+ /*color: #856404;*/
+ color: #000;
+ background-color: #fff3cd;
+ border:1px solid #ffeeba;
+ border-radius: 5px;
+}
+/*Html hyperLink color*/
+a, QDialog a, *::Link{
+ color: #11c26d
+}
+
+/* Toolbar */
+QToolBar, QStatusBar {
+ background-color:#2e0042;
+ padding:0;
+ margin:0;
+ border:0px;
+}
+
+/*The second menu*/
+QToolBar > QToolButton {
+ min-height:2.5em;
+ min-width: 8em;
+ padding: 5px 8px;
+ border:0px;
+ margin: 0px;
+ background-color: #2e0042;
+ color: #ffffff;
+
+ }
+ QToolBar > QToolButton:hover{
+ background-color: #660099;
+ }
+ QToolBar > QToolButton:checked {
+ background-color:#660099;
+ font-weight:bold;
+ }
+
+ /* -------------------Main Menu--------------------- */
+QMenuBar {
+ background-color:#2e0042;
}
-
-QAbstractSpinBox::up-button {
-subcontrol-origin: border;
-subcontrol-position: top right;
-width:21px;
-background:#fcfcfc;
-border-left:0px;
-border-right:1px solid #82C3E6;
-border-top:1px solid #82C3E6;
-border-bottom:0px;
-padding-right:1px;
-padding-left:5px;
-padding-top:2px;
+QMenuBar::item {
+ /*padding: 5px;*/
+ background-color:#2e0042;
+ color:#ffffff;
}
-
-QAbstractSpinBox::up-arrow {
-image:url(':/images/drkblue/drkblue_upArrow_small');
+QMenu {
+ background-color:#2e0042;
+ color:#ffffff;
+ border: 1px solid #3f3f5b;
+ padding: 0;
+ margin: 0;
}
-
-QAbstractSpinBox::down-button {
-subcontrol-origin: border;
-subcontrol-position: bottom right;
-width:21px;
-background:#fcfcfc;
-border-top:0px;
-border-left:0px;
-border-right:1px solid #82C3E6;
-border-bottom:1px solid #82C3E6;
-padding-right:1px;
-padding-left:5px;
-padding-bottom:2px;
+QMenu::item:hover {
+ background-color:#4b006e;
+ color: #ffffff
}
-
-QAbstractSpinBox::down-arrow {
-image:url(':/images/drkblue/drkblue_downArrow_small');
+QMenu::item:selected {
+ background-color:#4b006e;
+ color: #ffffff
}
-
+
+ /* -------------------Checkbox--------------------- Not working*/
QCheckBox {
-spacing: 5px;
+ padding: 5px;
}
-
QCheckBox::indicator {
-width: 16px;
-height: 16px;
+ width: 16px;
+ height: 16px;
}
-
QCheckBox::indicator:unchecked {
-image:url(':/images/drkblue/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:unchecked:hover {
-image:url(':/images/drkblue/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:unchecked:pressed {
-image:url(':/images/drkblue/checked');
+ image:url(':/images/light/checked');
}
-
QCheckBox::indicator:checked {
-image:url(':/images/drkblue/checked');
+ image:url(':/images/light/checked');
}
-
QCheckBox::indicator:checked:hover {
-image:url(':/images/drkblue/checked');
+ image:url(':/images/light/checked');
}
-
QCheckBox::indicator:checked:pressed {
-image:url(':/images/drkblue/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:indeterminate:hover {
-image:url(':/images/drkblue/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:indeterminate:pressed {
-image:url(':/images/drkblue/checked');
-}
-
-/*******************************************************/
-
-QHeaderView { /* Table Header */
-background-color:transparent;
-}
-
-QHeaderView::section { /* Table Header Sections */
-qproperty-alignment:center;
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #4c97bf, stop: 1 #56ABD8);
-color:#fff;
-min-height:25px;
-font-weight:bold;
-font-size:11px;
-outline:0;
-border:0px solid #fff;
-border-right:1px solid #fff;
-padding-left:5px;
-padding-right:5px;
-padding-top:2px;
-padding-bottom:2px;
-}
-
-QHeaderView::section:last {
-border-right: 0px solid #d7d7d7;
-}
-
-.QScrollArea {
-background:transparent;
-border:0px;
-}
-
-.QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */
-background:transparent;
-border:0px solid #fff;
-}
-
-QTableView::item { /* Table Item */
-background-color:#fcfcfc;
-font-size:12px;
-}
-
-QTableView::item:selected { /* Table Item Selected */
-background-color:#f0f0f0;
-color:#333;
-}
-
-QScrollBar { /* Scroll Bar */
-
-}
-
-QScrollBar:vertical { /* Vertical Scroll Bar Attributes */
-border:0;
-background:#ffffff;
-width:18px;
-margin: 18px 0px 18px 0px;
-}
-
-QScrollBar:horizontal { /* Horizontal Scroll Bar Attributes */
-border:0;
-background:#ffffff;
-height:18px;
-margin: 0px 18px 0px 18px;
-}
-
-
-QScrollBar::handle:vertical { /* Scroll Bar Slider - vertical */
-background:#e0e0e0;
-min-height:10px;
-}
-
-QScrollBar::handle:horizontal { /* Scroll Bar Slider - horizontal */
-background:#e0e0e0;
-min-width:10px;
-}
-
-QScrollBar::add-page, QScrollBar::sub-page { /* Scroll Bar Background */
-background:#F8F6F6;
-}
-
-QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { /* Define Arrow Button Dimensions */
-background-color:#F8F6F6;
-border: 1px solid #f2f0f0;
-width:16px;
-height:16px;
-}
-
-QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed {
-background-color:#e0e0e0;
-}
-
-QScrollBar::sub-line:vertical { /* Vertical - top button position */
-subcontrol-position:top;
-subcontrol-origin: margin;
-}
-
-QScrollBar::add-line:vertical { /* Vertical - bottom button position */
-subcontrol-position:bottom;
-subcontrol-origin: margin;
-}
-
-QScrollBar::sub-line:horizontal { /* Vertical - left button position */
-subcontrol-position:left;
-subcontrol-origin: margin;
-}
-
-QScrollBar::add-line:horizontal { /* Vertical - right button position */
-subcontrol-position:right;
-subcontrol-origin: margin;
-}
-
-QScrollBar:up-arrow, QScrollBar:down-arrow, QScrollBar:left-arrow, QScrollBar:right-arrow { /* Arrows Icon */
-width:10px;
-height:10px;
-}
-
-QScrollBar:up-arrow {
-background-image: url(':/images/drkblue/drkblue_upArrow_small');
-}
-
-QScrollBar:down-arrow {
-background-image: url(':/images/drkblue/drkblue_downArrow_small');
-}
-
-QScrollBar:left-arrow {
-background-image: url(':/images/drkblue/drkblue_leftArrow_small');
-}
-
-QScrollBar:right-arrow {
-background-image: url(':/images/drkblue/drkblue_rightArrow_small');
-}
-
-
-/*******************************************************/
-
-/* DIALOG BOXES */
-
-QDialog .QTabWidget {
-border-bottom:1px solid #333;
-}
-
-QDialog .QTabWidget::pane {
-border: 1px solid #d7d7d7;
-}
-
-QDialog .QTabWidget QTabBar::tab {
-background-color:#f2f0f0;
-color:#333;
-padding-left:10px;
-padding-right:10px;
-padding-top:5px;
-padding-bottom:5px;
-border-top: 1px solid #d7d7d7;
-}
-
-QDialog .QTabWidget QTabBar::tab:first {
-border-left: 1px solid #d7d7d7;
-}
+ image:url(':/images/light/checked');
+}
+
+/* -------------------Button--------------------- */
+QPushButton {
+ display: inline-block;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ padding: 8px 14px;
+ border-radius: 4px;
+ color: #fff;
+ background-color: #2e0042;
+ border: 1px solid #ffffff;
+ }
+ QPushButton:hover {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+ QPushButton:focus {
+ border-color: #660099;
+ }
+ QPushButton:pressed {
+ color: #fff;
+ background-color: #330066;
+ border-color: #fff
+ }
+ QPushButton:disabled {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+
+ /* -------------------Textbox--------------------- */
+.QValidatedLineEdit, .QLineEdit, .QTextEdit, QMessageBox, QPlainTextEdit {
+
+ min-height:24px;
+ padding:3px;
+ background-color:#2e0042;
+ border: 1px solid #3f3f5b;
+ color: #ffffff;
+ }
+
+ .QValidatedLineEdit:disabled, .QLineEdit:disabled {
+ /* background-color:#f2f2f2; */
+ background-color: #2e0042;
+ opacity: 0.7;
+ color: #3f3f5b;
+ }
+ .QValidatedLineEdit:focus, .QLineEdit:focus{
+ border-color: #555576;
+ }
+
+ /* -------------------Dropdown, Spinbox--------------------- */
+ QAbstractSpinBox, QSpinBox, QComboBox {
+ /* Dropdown Menus */
+ padding: 3px 5px;
+ min-height:24px;
+ background-color:#2e0042;
+ border: 1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ }
+
+/*
+QComboBox:checked {
+ background:#111111;
+} */
-QDialog .QTabWidget QTabBar::tab:last {
-border-right: 1px solid #d7d7d7;
+QComboBox::drop-down {
+ width:24px;
+ border:0px;
}
-
-QDialog .QTabWidget QTabBar::tab:selected, QDialog .QTabWidget QTabBar::tab:hover {
-background-color:#ffffff;
-color:#333;
+QComboBox::down-arrow {
+ border-image: url(':/images/light/drkblue_downArrow') 0 0 0 0 stretch stretch;
}
-
-QDialog .QTabWidget .QWidget {
-background-color:#fff;
-color:#333;
+QComboBox QListView {
+ background-color:#2e0042;
+ border:1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ padding-right:1px;
+ padding-left:1px;
+
}
-QDialog .QTabWidget .QWidget QAbstractSpinBox {
-min-height:15px;
+QComboBox>QListView::item {
+ padding: 5px;
+ color: #0e056ebd;
}
-QDialog .QTabWidget .QWidget QAbstractSpinBox::down-button {
-width:15px;
+QComboBox::item:alternate {
+ background:#680f8ebb;
}
-
-QDialog .QTabWidget .QWidget QAbstractSpinBox::up-button {
-width:15px;
+QComboBox::item:selected {
+ border:0px solid transparent;
+ background:#08675abb;
+ /* color: #ffffff; White text */
}
-
-QDialog .QTabWidget .QWidget QComboBox {
-min-height:15px;
+QComboBox::indicator {
+ background-color:transparent;
+ selection-background-color:transparent;
+ color:transparent;
+ selection-color:transparent;
}
-QDialog QWidget { /* Remove Annoying Focus Rectangle */
-outline: 0;
+QAbstractSpinBox::down-button, QAbstractSpinBox::up-button{
+ width:20px;
+ height: 15px;
+ background:#2e0042;
+ border: 0;
}
-
-/*******************************************************/
-/* FILE MENU */
-
-/* Dialog: Open URI */
-QDialog#OpenURIDialog {
-background-color:#F8F6F6;
+QAbstractSpinBox::up-button:pressed, QAbstractSpinBox::down-button:pressed{
+ background:#2e0042;
}
-QDialog#OpenURIDialog QLabel#label { /* URI Label */
-font-weight:bold;
+QAbstractSpinBox::up-button {
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ border-right:1px solid #3f3f5b;
+ border-top:1px solid #3f3f5b;
}
-QDialog#OpenURIDialog QPushButton#selectFileButton { /* ... Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+QAbstractSpinBox::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
}
-QDialog#OpenURIDialog QPushButton#selectFileButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
+QAbstractSpinBox::down-arrow, QAbstractSpinBox::up-arrow{
+ width:12px;
+ height:12px;
}
-QDialog#OpenURIDialog QPushButton#selectFileButton:pressed {
-border:1px solid #9e9e9e;
+QAbstractSpinBox::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
}
+QAbstractSpinBox::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+}
+
+ /* -------------------Table--------------------- */
+
+QHeaderView::section {
+ /* Table Header Sections */
+ qproperty-alignment:center;
+ background: #2e0042;
+ color: #ffffff; /* White font*/
+ min-height:25px;
+ font-weight:bold;
+ border-top:1px solid #3f3f5b;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
+ padding: 3px 5px;
+ }
+ QHeaderView::section:hover{
+ background: #4b006e;
+ }
+
+ QHeaderView::down-arrow, QHeaderView::up-arrow{
+ width: 14px;
+ height: 14px;
+ margin-right: 3px;
+ }
+ QHeaderView::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+ }
+
+ QHeaderView::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
+ }
-/* Dialog: Sign / Verify Message */
-QDialog#SignVerifyMessageDialog {
-background-color:#F8F6F6;
+/* define QTableView alternating */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
}
-QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM { /* Address Book Button */
-background-color:transparent;
-padding-left:10px;
-padding-right:10px;
+QTableView::item {
+ background-color: #2e0042;
+ color: #ffffff;
}
-QDialog#SignVerifyMessageDialog QPlainTextEdit { /* Message Signing Text */
-border:1px solid #82C3E6;
-background-color:#fff;
+QTableView::item:alternate {
+ background-color: #3f005b;
}
-QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM { /* Paste Button */
-/* qproperty-icon: url(":/icons/drkblue/drkblue_editpaste"); */
-background-color:transparent;
-padding-left:15px;
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
}
-QDialog#SignVerifyMessageDialog QLineEdit:!focus { /* Font Hack */
-font-size:10px;
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
}
-QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM { /* Copy Button */
-/* qproperty-icon: url(":/icons/drkblue/drkblue_editcopy"); */
-background-color:transparent;
-padding-left:10px;
-padding-right:10px;
+/* define QTreeView alternating */
+QTreeView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
}
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM { /* Clear Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+QTreeView::item {
+ background-color: #2e0042;
+ color: #ffffff;
}
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
+QTreeView::item:alternate {
+ background-color: #3f005b;
}
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed {
-border:1px solid #9e9e9e;
+QTreeView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
}
-QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM { /* Verify Message - Address Book Button */
-background-color:transparent;
-border:0;
-padding-left:10px;
-padding-right:10px;
+QTreeView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
}
-
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM { /* Verify Message - Clear Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+
+ /* -------------------Scrollbar--------------------- */
+QScrollBar {
+ /* Scroll Bar */
+ border:0;
+ background: #2e0042;
+ }
+ QScrollBar:vertical {
+ /* Vertical Scroll Bar Attributes */
+
+ width:6px;
+ margin: 6px 0px 6px 0px;
+ }
+ QScrollBar:horizontal {
+ /* Horizontal Scroll Bar Attributes */
+
+ height:6px;
+ margin: 0px 6px 0px 6px;
+ }
+ QScrollBar::handle:vertical {
+ /* Scroll Bar Slider - vertical */
+ background: #2e0042;
+ min-height:6px;
+ }
+ QScrollBar::handle:horizontal {
+ /* Scroll Bar Slider - horizontal */
+ background: #2e0042;
+ min-width:6px;
+ }
+ QScrollBar::add-page, QScrollBar::sub-page {
+ /* Scroll Bar Background */
+ background:#2e0042;
+ }
+ QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
+ /* Define Arrow Button Dimensions */
+ background-color:#2e0042;
+ /* border: 1px solid #2e0042; */
+ width:6px;
+ height:6px;
+ }
+ QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed {
+ background-color:#2e0042;
+ }
+ QScrollBar::sub-line:vertical {
+ /* Vertical - top button position */
+ subcontrol-position:top;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:vertical {
+ /* Vertical - bottom button position */
+ subcontrol-position:bottom;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::sub-line:horizontal {
+ /* Vertical - left button position */
+ subcontrol-position:left;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:horizontal {
+ /* Vertical - right button position */
+ subcontrol-position:right;
+ subcontrol-origin: margin;
+ }
+ QScrollBar:up-arrow, QScrollBar:down-arrow, QScrollBar:left-arrow, QScrollBar:right-arrow {
+ /* Arrows Icon */
+ width:6px;
+ height:6px;
+ }
+
+/*
+ QScrollBar:up-arrow {
+ image: url(':/images/light/drkblue_upArrow_small');
+ }
+ QScrollBar:down-arrow {
+ image: url(':/images/light/drkblue_downArrow_small');
+ }
+ QScrollBar:left-arrow {
+ image: url(':/images/light/drkblue_leftArrow_small');
+ }
+ QScrollBar:right-arrow {
+ image: url(':/images/light/drkblue_rightArrow_small');
+ } */
+
+
+
+ /* -------------------Tab--------------------- */
+.QTabWidget::pane {
+ border: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab {
+ background-color:#2e0042;
+ padding: 8px 10px;
+ border-top: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:first {
+ border-left: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:last {
+ border-right: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:selected, .QTabWidget QTabBar::tab:hover {
+ background-color:#4b006e;
+ color: #fff;;
+}
+
+/* -------------------MODAL OVERLAY--------------------- */
+QWidget#bgWidget {
+ /* The 'frame' overlaying the overview-page */
+ /*background: rgba(9, 9, 9, 0.6);*/
+ background:#2e0042;
+ }
+ QWidget#bgWidget .QPushButton#warningIcon {
+ width:64px;
+ height:64px;
+ padding:5px;
+ margin-right: 20px;
+ /*background-color:transparent;*/
+ /*background:#2e0042;*/
+ background:rgba(75, 0, 110, 0.5); /* 50%*/
+ color: #ffffff;
+ }
+ QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
+border-image: url(':/images/drkblue/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+border-top:0px solid #000;
+margin:0;
+padding-top:20px;
+padding-bottom: 20px;
}
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
+ /* -------------------OVERVIEW SCREEN--------------------- */
+QWidget .QFrame#frameWallet {
+ /* Wallet Balance */
+ max-width: 451px;
+ min-width: 451px;
+ }
+ QWidget .QFrame#frameWallet > .QLabel {
+ min-width:190px;
+ font-weight:normal;
+ min-height:30px;
+ }
+
+ QWidget .QFrame#frameWallet .QLabel#labelWallet {
+ /* Wallet Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ font-size: 14px;
+ height: 35px;
+ max-width: 421px;
+ min-width: 421px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWalletStatus {
+ /* Wallet Sync Status */
+ /* qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:3px; */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelSpendable {
+ /* Spendable Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:12px;
+ margin-left:18px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchonly {
+ /* Watch-only Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalanceText {
+ /* Available Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalance {
+ /* Available Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color:#11c26d;
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchAvailable {
+ /* Watch-only Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelPendingText {
+ /* Pending Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelUnconfirmed {
+ /* Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchPending {
+ /* Watch-only Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmatureText {
+ /* Immature Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmature {
+ /* Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchImmature {
+ /* Watch-only Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ color: #555576
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotalText {
+ /* Total Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ font-size:14px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotal {
+ /* Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:0px;
+ color: #2e0042
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchTotal {
+ /* Watch-only Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:16px;
+ color: #555576
+ }
+
+ QWidget .QFrame#frameWallet #lineSpendableBalance, QWidget .QFrame#frameWallet #lineWatchBalance {
+ border-bottom: 1px dashed #3f3f5b;
+}
+
+
+/* -------------------PRIVATESEND WIDGET--------------------- */
+QWidget .QFrame#framePrivateSend {
+ /* PrivateSend Widget */
+ /* background-color:transparent;*/
+ color: #fff;
+ /*background-color: #660099 ;*/
+ max-width: 451px;
+ min-width: 451px;
+ max-height: 350px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader {
+ /* PrivateSend Header */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ max-width: 421px;
+ min-width: 421px;
+ background-color:transparent;
+ margin-right: 5px;
+ padding-right: 5px;
+ font-weight:normal;
+ font-size:14px;
+ min-height:35px;
+ max-height:35px;
+ }
+ /******************************************************************/
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus {
+ /* PrivateSend Sync Status */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:2px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget {
+ max-width: 451px;
+ max-height: 175px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel {
+ min-width:175px;
+ font-weight:normal;
+ min-height:25px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText {
+ /* PrivateSend Enabled Status Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText {
+ /* PrivateSend Completion Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress {
+ /* PrivateSend Completion */
+ margin-right:43px;
+ text-align: right;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk {
+ background-color: #28a745;
+ width:1px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText {
+ /* PrivateSend Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText {
+ /* PrivateSend Amount and Rounds Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText {
+ /* PrivateSend Submitted Denom Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons {
+ max-width: 451px;
+ }
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage {
+ /* PrivateSend Status Notifications */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ min-width: 288px;
+ min-height: 43px;
+
+ }
+ /* PRIVATESEND BUTTONS */
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo {
+ /* Info Button */
+ color: #fff;
+ background-color: #2e0042;
+ border-color: #2e0042;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover {
+
+ color: #fff;
+ background-color: #4b006e;
+ border-color: #2e0042;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed {
+
+ border-color: #0099b8;
+ }
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed {
-border:1px solid #9e9e9e;
+/* RECENT TRANSACTIONS */
+QWidget .QFrame#frame_2 {
+ /* Transactions Widget */
+ min-width:410px;
+ margin-right:20px;
+ margin-left:0;
+ margin-top:0px;
+
+}
+QWidget .QFrame#frame_2 .QLabel#label_4 {
+ /* Recent Transactions Label */
+ min-width:180px;
+ margin-left:20px;
+ margin-right:5px;
+ padding-right:5px;
+ font-weight:normal;
+ font-size:14px;
+ /* min-height:24px; */
+}
+QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus {
+ /* Recent Transactions Sync Status */
+ qproperty-alignment: 'AlignBottom | AlignRight';
+ min-width:93px;
+ margin-left:16px;
+ margin-right:5px;
+ min-height:16px;
+}
+QWidget .QFrame#frame_2 QListView {
+ /* Transaction List */
+ font-weight:normal;
+ font-size:12px;
+ max-width:369px;
+ margin-top:12px;
+ margin-left:0px;
+ /* CSS Voodoo - set to -66px to hide default transaction icons */
+}
+
+ /* -------------------SEND DIALOG--------------------- */
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures {
+ /* Coin Control Header */
+ font-weight:normal;
+ font-size:14px;
+ }
+
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel {
+ /* Custom Change Address Validation Label */
+ font-weight:normal;
+ qproperty-margin:-6;
+ margin-right:112px;
+ }
+
+ QDialog#SendCoinsDialog .QPushButton#clearButton {
+ color: #eb6709;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:hover {
+
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:pressed {
+ border-color: #de4e00;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton {
+ /* Add Button */
+ color: #11c26d;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #11c26d;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:hover {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:pressed {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog .QCheckBox#checkUsePrivateSend, QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend {
+ /* PrivateSend Checkbox */
+ margin-right: 15px;
+ }
+
+ QDialog#SendCoinsDialog #checkboxSubtractFeeFromAmount{
+ margin-left: 8px;
+ }
+ /* This QLabel uses name = "label" which conflicts with Address Book -> New Address */
+ /* To maximize backwards compatibility this formatting has been removed */
+ QDialog#SendCoinsDialog QLabel#label {
+ font-size:14px;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog QLabel#labelBalance {
+ /*color:#11c26d;*/
+ color:#ffffff;
+ font-size:14px;
+ }
+
+ /* -------------------SEND COINS ENTRY--------------------- */
+ QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel {
+ /* Send Coin Entry Labels */
+ min-width:102px;
+ font-weight:normal;
+ min-height:25px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+/* -------------------COIN CONTROL POPUP--------------------- */
+QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText {
+ /* Coin Control Quantity Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity {
+ /* Coin Control Quantity */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText {
+ /* Coin Control Bytes Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytes {
+ /* Coin Control Bytes */
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText {
+ /* Coin Control Amount Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmount {
+ /* Coin Control Amount */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText {
+ /* Coin Control Priority Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText {
+ /* Coin Control Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFee {
+ /* Coin Control Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText {
+ /* Coin Control Low Output Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText {
+ /* Coin Control After Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee {
+ /* Coin Control After Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText {
+ /* Coin Control Change Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
+ padding:3px 5px;
+ background: #2e0042;
+ border-right: 1px solid #3f3f5b;
+ border-bottom: 1px solid #3f3f5b;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:hover {
+ background: #660099;
+}
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected {
+ /* Coin Control Item (selected) */
+ background: #2e0042;
+ color: #fff;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked {
+ /* Coin Control Item (checked) */
+ background: #2e0042;
+ color: #fff
+ }
+
+/* -------------------RECEIVE COINS--------------------- */
+QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
+ /* Label Label */
+ min-width:102px;
+ padding-right:5px;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton {
+ /* Clear Button */
+ color: #eb6709;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed {
+ border-color: #f2353c;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton {
+ /* Remove Button */
+ color: #ff4c52;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover {
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed {
+ border-color: #f2353c;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 {
+ /* Requested Payments History Label */
+ font-weight:normal;
+ font-size:14px;
+ }
+
+ /* -------------------TRANSACTIONS PAGE--------------------- */
+ TransactionView QLineEdit {
+ /* Filters */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:111px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#addressWidget {
+ /* Address Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:405px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#amountWidget {
+ /* Amount Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ max-width:100px;
+ text-align:center;
+ }
+ TransactionView QComboBox {
+ margin-bottom:1px;
+ margin-right:1px;
+ }
+ QLabel#transactionSumLabel {
+ /* Example of setObjectName for widgets without name */
+ font-weight:bold;
+ }
+
+/* -------------------Dialog: Open URI--------------------- */
+QDialog#OpenURIDialog QLabel#label {
+ /* URI Label */
+ font-weight:bold;
+}
+
+/* -------------------Dialog: Sign / Verify Message--------------------- */
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM {
+ border-color: #3f3f5b;
+ margin-left: 8px;
+ color: #ffffff;
+}
+
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM {
+ /* Clear Button */
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed {
+ border-color: #de4e00;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM {
+ /* Verify Message - Clear Button */
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed {
+ border-color: #de4e00;
}
/* Dialog: Send and Receive */
-QWidget#AddressBookPage {
-background-color:#F8F6F6;
-}
-
-QWidget#AddressBookPage QPushButton#newAddress { /* New Address Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#AddressBookPage QPushButton#newAddress:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#AddressBookPage QPushButton#newAddress:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#AddressBookPage QPushButton#copyAddress { /* Copy Address Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#AddressBookPage QPushButton#copyAddress:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#AddressBookPage QPushButton#copyAddress:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#AddressBookPage QPushButton#deleteAddress { /* Delete Address Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+QWidget#AddressBookPage QPushButton#deleteAddress {
+ /* Delete Address Button */
+ color: #ff4c52;
+ background-color: transparent;
+ border-color: #ff4c52;
}
-
QWidget#AddressBookPage QPushButton#deleteAddress:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
}
-
QWidget#AddressBookPage QPushButton#deleteAddress:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#AddressBookPage QTableView { /* Address Listing */
-font-size:12px;
+ border-color: #f2353c;
}
-QWidget#AddressBookPage QHeaderView::section { /* Min width for Windows fix */
-min-width:260px;
+QWidget#AddressBookPage #tableView{
+ font-size: 13px;
}
-/* SETTINGS MENU */
-
-/* Encrypt Wallet and Change Passphrase Dialog */
-QDialog#AskPassphraseDialog {
-background-color:#F8F6F6;
+QWidget#AddressBookPage QHeaderView::section {
+ /* Min width for Windows fix */
+ min-width:260px;
}
+/*------Encrypt Wallet and Change Passphrase Dialog (in SETTINGS MENU)---------*/
QDialog#AskPassphraseDialog QLabel#passLabel1, QDialog#AskPassphraseDialog QLabel#passLabel2, QDialog#AskPassphraseDialog QLabel#passLabel3 {
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:170px;
-min-height:33px; /* base width of 25px for QLineEdit, plus padding and border */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:170px;
+ min-height:33px;
+ /* base width of 25px for QLineEdit, plus padding and border */
}
-/* Options Dialog */
-QDialog#OptionsDialog {
-background-color:#F8F6F6;
+/*------------Options Dialog--------------- */
+QDialog#OptionsDialog QValueComboBox,
+QDialog#OptionsDialog QSpinBox,
+QDialog#OptionsDialog .QLineEdit,
+QDialog#OptionsDialog .QValidatedLineEdit {
+ min-height: 24px;
}
-
-QDialog#OptionsDialog QValueComboBox, QDialog#OptionsDialog QSpinBox {
-margin-top:5px;
-margin-bottom:5px;
-}
-
QDialog#OptionsDialog QValidatedLineEdit, QDialog#OptionsDialog QValidatedLineEdit:disabled, QDialog#OptionsDialog QLineEdit, QDialog#OptionsDialog QLineEdit:disabled {
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-min-height:20px;
-margin-top:0px;
-margin-bottom:0px;
-padding-top:1px;
-padding-bottom:1px;
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ min-height:20px;
+ margin-top:0px;
+ margin-bottom:0px;
+ padding-top:1px;
+ padding-bottom:1px;
}
-
QDialog#OptionsDialog > QLabel {
-qproperty-alignment: 'AlignVCenter';
-min-height:20px;
+ qproperty-alignment: 'AlignVCenter';
+ min-height:20px;
}
-QDialog#OptionsDialog QWidget#tabDisplay QValueComboBox {
-margin-top:0px;
-margin-bottom:0px;
+QDialog#OptionsDialog QLabel#label_3 {
+ /* Translations Missing? Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ padding-bottom:8px;
}
-
-QDialog#OptionsDialog QLabel#label_3 { /* Translations Missing? Label */
-qproperty-alignment: 'AlignVCenter | AlignCenter';
-color:#818181;
-padding-bottom:8px;
-}
-
QDialog#OptionsDialog QCheckBox {
-min-height:20px;
-}
-
-QDialog#OptionsDialog QCheckBox#displayAddresses {
-min-height:33px;
-
-}
-
-/* TOOLS MENU */
-
-QDialog#RPCConsole { /* RPC Console Dialog Box */
-background-color:#F8F6F6;
-}
-
-QDialog#RPCConsole QWidget#tab_info QLabel#label_11, QDialog#RPCConsole QWidget#tab_info QLabel#label_10 { /* Margin between Network and Block Chain headers */
-qproperty-alignment: 'AlignBottom';
-min-height:25px;
-min-width:180px;
-}
-
-QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading { /* Peers Info Header */
-color:#3398CC;
-}
-
-QDialog#RPCConsole QPushButton#openDebugLogfileButton {
-max-width:60px;
-}
-
-QDialog#RPCConsole QTextEdit#messagesWidget { /* Console Messages Window */
-border:0;
-}
-
-QDialog#RPCConsole QLineEdit#lineEdit { /* Console Input */
-margin-right:5px;
-}
-
-QDialog#RPCConsole QPushButton#clearButton { /* Console Clear Button */
-background-color:transparent;
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#RPCConsole .QGroupBox #line { /* Network In Line */
-background-color:#00ff00;
-}
-
-QDialog#RPCConsole .QGroupBox #line_2 { /* Network Out Line */
-background:#ff0000;
-}
-
-/* HELP MENU */
-
-/* Command Line Options Dialog */
-QDialog#HelpMessageDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#HelpMessageDialog QScrollArea * {
-background-color:#ffffff;
-}
-
-QDialog#HelpMessageDialog QScrollBar:vertical, QDialog#HelpMessageDialog QScrollBar:horizontal {
-border:0;
-}
-
-/* About RussellCoin2 Dialog */
-QDialog#AboutDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 { /* About RussellCoin2 Contents */
-margin-left:10px;
-}
-
-QDialog#AboutDialog QLabel#label_2 { /* Margin for About RussellCoin2 text */
-margin-right:10px;
-}
-
-/* Edit Address Dialog */
-QDialog#EditAddressDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#EditAddressDialog QLabel {
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-height:27px;
-font-weight:normal;
-padding-right:5px;
-}
-
-/* OVERVIEW SCREEN */
-
-QWidget .QFrame#frame { /* Wallet Balance */
-min-width:490px;
-}
-
-QWidget .QFrame#frame > .QLabel {
-min-width:190px;
-font-weight:normal;
-min-height:30px;
-}
-
-QWidget .QFrame#frame .QLabel#label_5 { /* Wallet Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:transparent;
-color:#fff;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWalletStatus { /* Wallet Sync Status */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-margin-left:3px;
-}
-
-QWidget .QFrame#frame .QLabel#labelSpendable { /* Spendable Header */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:18px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchonly { /* Watch-only Header */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelBalanceText { /* Available Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#56ABD8;
-color:#ffffff;
-margin-right:5px;
-padding-right:5px;
-font-weight:bold;
-font-size:14px;
-min-height:35px;
-}
-
-QWidget .QFrame#frame .QLabel#labelBalance { /* Available Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-font-weight:bold;
-color:#56ABD8;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchAvailable { /* Watch-only Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelPendingText { /* Pending Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-font-size:12px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelUnconfirmed { /* Pending Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchPending { /* Watch-only Pending Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelImmatureText { /* Immature Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-font-size:12px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelImmature { /* Immature Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchImmature { /* Watch-only Immature Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelTotalText { /* Total Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-font-size:12px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelTotal { /* Total Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchTotal { /* Watch-only Total Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12px;
-margin-left:16px;
-}
-
-/* PRIVATESEND WIDGET */
-
-QWidget .QFrame#framePrivateSend { /* PrivateSend Widget */
-background-color:transparent;
-max-width: 451px;
-min-width: 451px;
-max-height: 350px;
-}
-
-QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetPrivateSendHeader { /* PrivateSend Header */
-max-width: 421px;
-min-width: 421px;
-}
-
-QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader { /* PrivateSend Header */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#56ABD8;
-color:#fff;
-margin-right:5px;
-padding-right:5px;
-font-weight:bold;
-font-size:14px;
-min-height:35px;
-max-height:35px;
-}
-/******************************************************************/
-QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus { /* PrivateSend Sync Status */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-margin-left:2px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget {
-max-width: 451px;
-max-height: 175px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel {
-min-width:175px;
-font-weight:normal;
-min-height:25px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText { /* PrivateSend Status Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabled { /* PrivateSend Status */
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText { /* PrivateSend Completion Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress { /* PrivateSend Completion */
-border: 1px solid #818181;
-border-radius: 1px;
-margin-right:43px;
-text-align: right;
-color:#818181;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk {
-background-color: #3398CC;
-width:1px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText { /* PrivateSend Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymized { /* PrivateSend Balance */
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText { /* PrivateSend Amount and Rounds Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountRounds { /* PrivateSend Amount and Rounds */
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText { /* PrivateSend Submitted Denom Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenom { /* PrivateSend Submitted Denom */
-
-}
-
-QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons {
-max-width: 451px;
-}
-
-QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage { /* PrivateSend Status Notifications */
-qproperty-alignment: 'AlignVCenter | AlignCenter';
-min-width: 288px;
-min-height: 43px;
-font-size:11px;
-color:#818181;
-}
-
-/* PRIVATESEND BUTTONS */
-
-QWidget .QFrame#framePrivateSend .QPushButton { /* PrivateSend Buttons - General Attributes */
-border:0px solid #ffffff;
-}
-
-QWidget .QFrame#framePrivateSend QPushButton:focus {
-border:none;
-outline:none;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend { /* Start PrivateSend Mixing */
-font-size:15px;
-font-weight:bold;
-color:#ffffff;
-padding-left:10px;
-padding-right:10px;
-padding-top:5px;
-padding-bottom:6px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend:hover {
-
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendAuto { /* Try Mix Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-min-height:25px;
-font-size:9px;
-padding:0px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendAuto:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendAuto:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset { /* Reset Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-min-height:25px;
-font-size:9px;
-padding:0px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo { /* Info Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-min-height:25px;
-font-size:9px;
-padding:0px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed {
-border:1px solid #9e9e9e;
-}
-
-/* RECENT TRANSACTIONS */
-
-QWidget .QFrame#frame_2 { /* Transactions Widget */
-min-width:410px;
-margin-right:20px;
-margin-left:0;
-margin-top:0;
-background-image: url(':/images/drkblue/RussellCoin2_logo_horizontal');
-background-repeat:none;
-}
-
-QWidget .QFrame#frame_2 .QLabel#label_4 { /* Recent Transactions Label */
-min-width:180px;
-color:#3398CC;
-margin-left:67px;
-margin-top:83px;
-margin-right:5px;
-padding-right:5px;
-font-weight:bold;
-font-size:15px;
-min-height:24px;
-}
-
-QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus { /* Recent Transactions Sync Status */
-qproperty-alignment: 'AlignBottom | AlignRight';
-min-width:93px;
-margin-top:83px;
-margin-left:16px;
-margin-right:5px;
-min-height:16px;
-}
-
-QWidget .QFrame#frame_2 QListView { /* Transaction List */
-font-weight:normal;
-font-size:12px;
-max-width:369px;
-margin-top:12px;
-margin-left:0px; /* CSS Voodoo - set to -66px to hide default transaction icons */
-}
-
-/* MODAL OVERLAY */
-
-QWidget#bgWidget { /* The 'frame' overlaying the overview-page */
- background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
- color:#616161;
- padding-left:10px;
- padding-right:10px;
-}
-
-QWidget#bgWidget .QPushButton#warningIcon {
-width:64px;
-height:64px;
-padding:5px;
-background-color:transparent;
-}
-
-QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
-border-image: url(':/images/drkblue/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
-border-top:0px solid #000;
-margin:0;
-padding-top:20px;
-padding-bottom: 20px;
-}
-
-QWidget#bgWidget .QPushButton#closeButton {
-
-}
-
-/* SEND DIALOG */
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl { /* Coin Control Section */
-
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl > .QLabel { /* Default Font Color and Size */
-font-weight:normal;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QPushButton#pushButtonCoinControl { /* Coin Control Inputs Button */
-padding-left:10px;
-padding-right:10px;
-min-height:25px;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures { /* Coin Control Header */
-color:#3398CC;
-font-weight:bold;
-font-size:14px;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl { /* Coin Control Inputs */
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl > .QLabel { /* Coin Control Inputs Labels */
-padding:2px;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QCheckBox#checkBoxCoinControlChange { /* Custom Change Label */
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QValidatedLineEdit#lineEditCoinControlChange { /* Custom Change Address */
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel { /* Custom Change Address Validation Label */
-font-weight:normal;
-qproperty-margin:-6;
-margin-right:112px;
-}
-
-QDialog#SendCoinsDialog .QScrollArea#scrollArea .QWidget#scrollAreaWidgetContents { /* Send To Widget */
-background:transparent;
-}
-
-QDialog#SendCoinsDialog .QPushButton#sendButton { /* Send Button */
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SendCoinsDialog .QPushButton#clearButton { /* Clear Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SendCoinsDialog .QPushButton#clearButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QDialog#SendCoinsDialog .QPushButton#clearButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QDialog#SendCoinsDialog .QPushButton#addButton { /* Add Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SendCoinsDialog .QPushButton#addButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QDialog#SendCoinsDialog .QPushButton#addButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QDialog#SendCoinsDialog .QCheckBox#checkUsePrivateSend { /* PrivateSend Checkbox */
-color:#616161;
-font-weight:bold;
-background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5, fx:0.5, fy:0.5, stop:0 rgba(248, 246, 246, 128), stop: 1 rgba(0, 0, 0, 0));
-border-radius:5px;
-padding-top:20px;
-padding-bottom:18px;
-}
-
-QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend { /* InstantSend Checkbox */
-color:#616161;
-font-weight:bold;
-background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5, fx:0.5, fy:0.5, stop:0 rgba(248, 246, 246, 128), stop: 1 rgba(0, 0, 0, 0));
-border-radius:5px;
-padding-top:20px;
-padding-bottom:18px;
-margin-left:10px;
-margin-right:20px;
-}
-
-/* This QLabel uses name = "label" which conflicts with Address Book -> New Address */
-/* To maximize backwards compatibility this formatting has been removed */
-
-QDialog#SendCoinsDialog QLabel#label {
-/*margin-left:20px;
-margin-right:-2px;
-padding-right:-2px;
-color:#616161;
-font-size:14px;
-font-weight:bold;
-border-radius:5px;
-padding-top:20px;
-padding-bottom:20px;*/
-min-height:27px;
-}
-
-QDialog#SendCoinsDialog QLabel#labelBalance {
-margin-left:0px;
-padding-left:0px;
-color:#333333;
-/* font-weight:bold;
-border-radius:5px;
-padding-top:20px;
-padding-bottom:20px; */
-min-height:27px;
-}
-
-#checkboxSubtractFeeFromAmount {
-padding-left:10px;
-}
-
-/* SEND COINS ENTRY */
-
-QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel { /* Send Coin Entry Labels */
-background-color:#56ABD8;
-min-width:102px;
-font-weight:bold;
-font-size:11px;
-color:#ffffff;
-min-height:25px;
-margin-right:5px;
-padding-right:5px;
-}
-
-QStackedWidget#SendCoinsEntry .QFrame#SendCoins .QLabel#amountLabel {
-background-color:#6a6a6a;
-}
-
-QStackedWidget#SendCoinsEntry .QValidatedLineEdit#payTo { /* Pay To Input Field */
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton { /* General Settings for Pay To Icons */
-background-color:transparent;
-padding-left:5px;
-padding-right:5px;
-border: 0;
-outline: 0;
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { /* Address Book Button */
-padding-left:10px;
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton {
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#pasteButton {
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#deleteButton {
-}
-
-QStackedWidget#SendCoinsEntry .QLineEdit#addAsLabel { /* Pay To Input Field */
-}
-
-/* COIN CONTROL POPUP */
-
-QDialog#CoinControlDialog { /* Coin Control Dialog Window */
-background-color:#F8F6F6;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText { /* Coin Control Quantity Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity { /* Coin Control Quantity */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText { /* Coin Control Bytes Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlBytes { /* Coin Control Bytes */
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText { /* Coin Control Amount Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAmount { /* Coin Control Amount */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText { /* Coin Control Priority Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlPriority { /* Coin Control Priority */
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText { /* Coin Control Fee Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlFee { /* Coin Control Fee */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText { /* Coin Control Low Output Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutput { /* Coin Control Low Output */
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText { /* Coin Control After Fee Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee { /* Coin Control After Fee */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText { /* Coin Control Change Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlChange { /* Coin Control Change */
-
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonSelectAll { /* (un)select all button */
-padding-left:10px;
-padding-right:10px;
-min-height:25px;
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonToggleLock { /* Toggle lock state button */
-padding-left:10px;
-padding-right:10px;
-min-height:25px;
-}
-
-QDialog#CoinControlDialog .QDialogButtonBox#buttonBox QPushButton { /* Coin Control 'OK' button */
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QRadioButton#radioTreeMode { /* Coin Control Tree Mode Selector */
-color:#818181;
-background-color:transparent;
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QRadioButton#radioListMode { /* Coin Control List Mode Selector */
-color:#818181;
-background-color:transparent;
-}
-
-QDialog#CoinControlDialog QHeaderView::section:first { /* Bug Fix: the number "1" displays in this table for some reason... */
-color:transparent;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget { /* Coin Control Widget Container */
-outline:0;
-background-color:#ffffff;
-border:0px solid #818181;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected { /* Coin Control Item (selected) */
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked { /* Coin Control Item (checked) */
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:selected { /* Coin Control Branch Icon */
-background-image: url(':/images/drkblue/drkblue_qtreeview_selected');
-background-repeat:no-repeat;
-background-position:center;
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:checked { /* Coin Control Branch Icon */
-background-image: url(':/images/drkblue/drkblue_qtreeview_selected');
-background-repeat:no-repeat;
-background-position:center;
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::seperator {
-
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::indicator { /* Coin Control Widget Checkbox */
-
-}
-
-/* RECEIVE COINS */
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_2 { /* Label Label */
-background-color:#56ABD8;
-min-width:102px;
-color:#ffffff;
-font-weight:bold;
-font-size:11px;
-padding-right:5px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label { /* Amount Label */
-background-color:#6a6a6a;
-min-width:102px;
-color:#ffffff;
-font-weight:bold;
-font-size:11px;
-padding-right:5px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_3 { /* Message Label */
-background-color:#56ABD8;
-min-width:102px;
-color:#ffffff;
-font-weight:bold;
-font-size:11px;
-padding-right:5px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton { /* Clear Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton { /* Show Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton { /* Remove Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 { /* Requested Payments History Label */
-color:#3398CC;
-font-weight:bold;
-font-size:14px;
-}
-
-/* RECEIVE COINS DIALOG */
-
-QDialog#ReceiveRequestDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#ReceiveRequestDialog QTextEdit { /* Contents of Receive Coin Dialog */
-border:1px solid #d7d7d7;
-}
-
-/* TRANSACTIONS PAGE */
-
-TransactionView QLineEdit { /* Filters */
-margin-bottom:2px;
-margin-right:1px;
-min-width:111px;
-text-align:center;
-}
-
-TransactionView QLineEdit#addressWidget { /* Address Filter */
-margin-bottom:2px;
-margin-right:1px;
-min-width:405px;
-text-align:center;
-}
-
-TransactionView QLineEdit#amountWidget { /* Amount Filter */
-margin-bottom:2px;
-margin-right:1px;
-max-width:100px;
-text-align:center;
-}
-
-TransactionView QComboBox {
-margin-bottom:1px;
-margin-right:1px;
-}
-
-QLabel#transactionSumLabel { /* Example of setObjectName for widgets without name */
-color:#333333;
-font-weight:bold;
-}
+ /* min-height:20px; */
+ margin-bottom: 4px;
+}
+QDialog#OptionsDialog QGroupBox::title {
+ padding: 5px 3px;
+ font-weight: bold;
+}
+
+/* -------------------Toolbox--------------------- */
+
+QDialog#RPCConsole QWidget#tab_info QLabel#label_11, QDialog#RPCConsole QWidget#tab_info QLabel#label_10 {
+ /* Margin between Network and Block Chain headers */
+ qproperty-alignment: 'AlignBottom';
+ min-height:25px;
+ min-width:180px;
+ }
+ QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading {
+ /* Peers Info Header */
+ color:#2e0042;
+ }
+ QDialog#RPCConsole QPushButton#openDebugLogfileButton {
+ max-width:60px;
+ }
+ QDialog#RPCConsole QTextEdit#messagesWidget {
+ /* Console Messages Window */
+ border:0;
+ }
+ QDialog#RPCConsole QLineEdit#lineEdit {
+ /* Console Input */
+ margin-right:5px;
+ }
+ QDialog#RPCConsole QPushButton#clearButton {
+ /* Console Clear Button */
+ background-color:transparent;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#RPCConsole .QGroupBox #line {
+ /* Network In Line */
+ background-color:#00ff00;
+ }
+ QDialog#RPCConsole .QGroupBox #line_2 {
+ /* Network Out Line */
+ background:#ff3300;
+ }
-QLabel#transactionSum { /* Example of setObjectName for widgets without name */
-color:#333333;
-}
-
-/* TRANSACTION DETAIL DIALOG */
-
-QDialog#TransactionDescDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#TransactionDescDialog QTextEdit { /* Contents of Receive Coin Dialog */
-border:1px solid #d7d7d7;
-}
-
-
+ #RPCConsole #fontSmallerButton, #RPCConsole #fontBiggerButton,#RPCConsole #clearButton{
+ border-color: #3f3f5b;
+ padding: 3px;
+ }
+ #RPCConsole #promptIcon{
+ border: 0;
+ }
+
+ /* HELP MENU */
+
+
+ /* About GeekCash Dialog */
+
+ QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 {
+ /* About GeekCash Contents */
+ margin-left:10px;
+ }
+ QDialog#AboutDialog QLabel#label_2 {
+ /* Margin for About GeekCash text */
+ margin-right:10px;
+ }
+ /* Edit Address Dialog */
+
+ QDialog#EditAddressDialog QLabel {
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-height:27px;
+ font-weight:normal;
+ padding-right:5px;
+ }
+
\ No newline at end of file
diff --git a/src/qt/res/css/light-hires.css b/src/qt/res/css/light-hires.css
index b4caac57..d707c6b3 100644
--- a/src/qt/res/css/light-hires.css
+++ b/src/qt/res/css/light-hires.css
@@ -1,1643 +1,1187 @@
-WalletFrame {
-border-image: url(':/images/light/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
-border-top:0px solid #000;
-margin:0;
-padding-top:20px;
-padding-bottom: 20px;
-}
-
-QStatusBar {
-background-color:#ffffff;
-}
-
-.QFrame {
-background-color:transparent;
-border:0px solid #fff;
-}
-
-QMenuBar {
-background-color:#fff;
-}
-
-QMenuBar::item {
-background-color:#fff;
-}
-QMenuBar::item:selected {
-background-color:#f8f6f6;
+/* reset all */
+* {
+ /*color: #d3d3e0;*/
+ color: #fff;
+ font-size:13px; /*12 -> 13*/
+ font-family: Arial, Helvetica, sans-serif;
+ outline:none;
+ background-color: #159ac0;
+ transition: border .2s linear,color .2s linear,width .2s linear,background-color .2s linear;
+ /* margin: 0px;
+ padding: 0px; */
}
-QMenu {
-background-color:#f8f6f6;
+*:focus{
+ font-size: 12px;
}
-QMenu::item {
-color:#333;
-}
-
-QMenu::item:selected {
-background-color:#f2f0f0;
-color:#333;
-}
-
-QToolBar {
-background-color:#fff;
-border:0px solid #000;
-padding:0;
+WalletFrame {
+border-image: url(':/images/trad/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+border-top:0px solid #000;
margin:0;
+padding:0;
}
-QToolBar > QToolButton {
-background-color:#fff;
-border:0px solid #333;
-min-height:2.5em;
-min-width: 8em;
-padding: 0em 1em;
-/*font-weight:bold;*/
-color:#333;
-}
-
-QToolBar > QToolButton:checked {
-background-color:#1c75bc;
-color:#fff;
-font-weight:bold;
-}
-
-QMessageBox {
-background-color:#F8F6F6;
-}
-
-/*******************************************************/
-
-QLabel { /* Base Text Size & Color */
-font-size:9pt;
-color:#333333;
-}
-
-.QCheckBox { /* Checkbox Labels */
-color:#333333;
-background-color:transparent;
-}
-
-.QCheckBox:hover {
-background-color:transparent;
-}
-
-.QValidatedLineEdit, .QLineEdit { /* Text Entry Fields */
-border: 1px solid #82C3E6;
-font-size:8pt;
-min-height:25px;
-outline:0;
-padding:3px;
-background-color:#fcfcfc;
-}
-
-.QLineEdit:!focus {
-font-size:9pt;
-}
-
-.QValidatedLineEdit:disabled, .QLineEdit:disabled {
-background-color:#f2f2f2;
-}
-
-/*******************************************************/
-
-QPushButton { /* Global Button Style */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #4ca5dc, stop: .1 #2c85cc, stop: .95 #2c85cc, stop: 1 #1D80B5);
-border:0;
-border-radius:3px;
-color:#ffffff;
-font-size:9pt;
-font-weight:normal;
-height: 26px;
-padding-left:25px;
-padding-right:25px;
-padding-top:5px;
-padding-bottom:5px;
-}
-
-QPushButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #4ca5dc, stop: .1 #4ca5dc, stop: .95 #4ca5dc, stop: 1 #1D80B5);
-}
-
-QPushButton:focus {
-border:none;
-outline:none;
-}
-
-QPushButton:pressed {
-border:1px solid #333;
-}
-
-QComboBox { /* Dropdown Menus */
-border:1px solid #82C3E6;
-padding: 3px 5px 3px 5px;
-background:#fcfcfc;
-min-height:25px;
-color:#818181;
-}
-
-QComboBox:checked {
-background:#f2f2f2;
-}
-
-QComboBox:editable {
-background: #1c75bc;
-color:#616161;
-border:0px solid transparent;
+.QFrame {
+ /*background-color:transparent;*/
+ background-color: rgba(75, 0, 110, 0.35); /* 50%->35% transparent*/
+ border:0px solid #159ac0;
+ color: #ffffff; /* white text */
+ padding: 5px;
+ border-radius: 4px;
}
-QComboBox::drop-down {
-width:25px;
-border:0px;
-}
-QComboBox::down-arrow {
-border-image: url(':/images/light/drkblue_downArrow') 0 0 0 0 stretch stretch;
+QToolTip{
+ color: #856404;
+ background-color: #fff3cd;
+ border:1px solid #ffeeba;
+ border-radius: 5px;
}
-QComboBox QListView {
-background:#fff;
-border:1px solid #333;
-padding-right:1px;
-padding-left:1px;
+a, QDialog a, *::Link{
+ color: #11c26d
}
-QComboBox QAbstractItemView::item { margin:4px; }
+/* Toolbar */
-QComboBox::item {
-color:#818181;
-}
+QToolBar, QStatusBar {
+ background-color:#159ac0;
-QComboBox::item:alternate {
-background:#fff;
+ padding:0;
+ margin:0;
+ border:0px;
}
-QComboBox::item:selected {
-border:0px solid transparent;
-background:#f2f2f2;
-}
+QToolBar > QToolButton {
+ min-height:2.5em;
+ min-width: 8em;
+ padding: 5px 8px;
+ border:0px;
+ margin: 0px;
+
+ }
+ QToolBar > QToolButton:hover{
+ background-color: #660099
+ }
+ QToolBar > QToolButton:checked {
+ background-color:#159ac0;
+ font-weight:bold;
+ }
-QComboBox::indicator {
-background-color:transparent;
-selection-background-color:transparent;
-color:transparent;
-selection-color:transparent;
+ /* -------------------Right Menu--------------------- */
+QMenuBar{background-color:#159ac0;}
+QMenuBar::item {
+ /*padding: 5px;*/
+ background-color:#159ac0;
+ color:#ffffff;
}
-
-QAbstractSpinBox {
-border:1px solid #82C3E6;
-padding: 3px 5px 3px 5px;
-background:#fcfcfc;
-min-height:25px;
-color:#818181;
+QMenu{
+ background-color:#159ac0;
+ color:#ffffff;
+ border: 1px solid #3f3f5b;
+ padding: 0;
+ margin: 0;
}
-
-QAbstractSpinBox::up-button {
-subcontrol-origin: border;
-subcontrol-position: top right;
-width:21px;
-background:#fcfcfc;
-border-left:0px;
-border-right:1px solid #82C3E6;
-border-top:1px solid #82C3E6;
-border-bottom:0px;
-padding-right:1px;
-padding-left:5px;
-padding-top:2px;
+QMenuBar::item {
+ /*padding: 5px;*/
}
-
-QAbstractSpinBox::up-arrow {
-image:url(':/images/light/drkblue_upArrow_small');
+QMenu::item:hover {
+ background-color:#4b006e;
+ color: #ffffff
}
-
-QAbstractSpinBox::down-button {
-subcontrol-origin: border;
-subcontrol-position: bottom right;
-width:21px;
-background:#fcfcfc;
-border-top:0px;
-border-left:0px;
-border-right:1px solid #82C3E6;
-border-bottom:1px solid #82C3E6;
-padding-right:1px;
-padding-left:5px;
-padding-bottom:2px;
+QMenu::item:selected {
+ background-color:#4b006e;
+ color: #ffffff
}
+
+ /* -------------------Checkbox--------------------- */
-QAbstractSpinBox::down-arrow {
-image:url(':/images/light/drkblue_downArrow_small');
-}
QCheckBox {
-spacing: 5px;
+ spacing: 5px;
}
-
QCheckBox::indicator {
-width: 16px;
-height: 16px;
+ width: 16px;
+ height: 16px;
}
-
QCheckBox::indicator:unchecked {
-image:url(':/images/light/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:unchecked:hover {
-image:url(':/images/light/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:unchecked:pressed {
-image:url(':/images/light/checked');
+ image:url(':/images/light/checked');
}
-
QCheckBox::indicator:checked {
-image:url(':/images/light/checked');
+ image:url(':/images/light/checked');
}
-
QCheckBox::indicator:checked:hover {
-image:url(':/images/light/checked');
+ image:url(':/images/light/checked');
}
-
QCheckBox::indicator:checked:pressed {
-image:url(':/images/light/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:indeterminate:hover {
-image:url(':/images/light/unchecked');
+ image:url(':/images/light/unchecked');
}
-
QCheckBox::indicator:indeterminate:pressed {
-image:url(':/images/light/checked');
-}
-
-/*******************************************************/
-
-QHeaderView { /* Table Header */
-background-color:transparent;
-}
-
-QHeaderView::section { /* Table Header Sections */
-qproperty-alignment:center;
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #1070B0, stop: 1 #1c75bc);
-color:#fff;
-min-height:25px;
-font-weight:bold;
-font-size:8pt;
-outline:0;
-border:0px solid #fff;
-border-right:1px solid #fff;
-padding-left:5px;
-padding-right:5px;
-padding-top:2px;
-padding-bottom:2px;
-}
-
-QHeaderView::section:last {
-border-right: 0px solid #d7d7d7;
-}
-
-.QScrollArea {
-background:transparent;
-border:0px;
-}
-
-.QTableView { /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */
-background:transparent;
-border:0px solid #fff;
-}
-
-QTableView::item { /* Table Item */
-background-color:#fcfcfc;
-font-size:9pt;
-}
-
-QTableView::item:selected { /* Table Item Selected */
-background-color:#f0f0f0;
-color:#333;
-}
-
-QScrollBar { /* Scroll Bar */
-
-}
-
-QScrollBar:vertical { /* Vertical Scroll Bar Attributes */
-border:0;
-background:#ffffff;
-width:18px;
-margin: 18px 0px 18px 0px;
-}
-
-QScrollBar:horizontal { /* Horizontal Scroll Bar Attributes */
-border:0;
-background:#ffffff;
-height:18px;
-margin: 0px 18px 0px 18px;
-}
-
-
-QScrollBar::handle:vertical { /* Scroll Bar Slider - vertical */
-background:#e0e0e0;
-min-height:10px;
-}
-
-QScrollBar::handle:horizontal { /* Scroll Bar Slider - horizontal */
-background:#e0e0e0;
-min-width:10px;
-}
-
-QScrollBar::add-page, QScrollBar::sub-page { /* Scroll Bar Background */
-background:#F8F6F6;
-}
-
-QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal { /* Define Arrow Button Dimensions */
-background-color:#F8F6F6;
-border: 1px solid #f2f0f0;
-width:16px;
-height:16px;
-}
-
-QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed {
-background-color:#e0e0e0;
-}
-
-QScrollBar::sub-line:vertical { /* Vertical - top button position */
-subcontrol-position:top;
-subcontrol-origin: margin;
-}
-
-QScrollBar::add-line:vertical { /* Vertical - bottom button position */
-subcontrol-position:bottom;
-subcontrol-origin: margin;
-}
-
-QScrollBar::sub-line:horizontal { /* Vertical - left button position */
-subcontrol-position:left;
-subcontrol-origin: margin;
-}
-
-QScrollBar::add-line:horizontal { /* Vertical - right button position */
-subcontrol-position:right;
-subcontrol-origin: margin;
-}
-
-QScrollBar:up-arrow, QScrollBar:down-arrow, QScrollBar:left-arrow, QScrollBar:right-arrow { /* Arrows Icon */
-width:10px;
-height:10px;
-}
-
-QScrollBar:up-arrow {
-background-image: url(':/images/light/drkblue_upArrow_small');
-}
-
-QScrollBar:down-arrow {
-background-image: url(':/images/light/drkblue_downArrow_small');
-}
-
-QScrollBar:left-arrow {
-background-image: url(':/images/light/drkblue_leftArrow_small');
-}
-
-QScrollBar:right-arrow {
-background-image: url(':/images/light/drkblue_rightArrow_small');
-}
-
-
-/*******************************************************/
-
-/* DIALOG BOXES */
+ image:url(':/images/light/checked');
+}
+
+/* -------------------Button--------------------- */
+
+QPushButton {
+ display: inline-block;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ padding: 8px 14px;
+ border-radius: 4px;
+ color: #fff;
+ background-color: #159ac0;
+ border: 1px solid #ffffff;
+ }
+ QPushButton:hover {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+ QPushButton:focus {
+ border-color: #660099;
+
+ }
+ QPushButton:pressed {
+ color: #fff;
+ background-color: #330066;
+ border-color: #fff
+
+ }
+ QPushButton:disabled {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+
+ /* -------------------Textbox--------------------- */
-QDialog .QTabWidget {
-border-bottom:1px solid #333;
-}
-QDialog .QTabWidget::pane {
-border: 1px solid #d7d7d7;
-}
+.QValidatedLineEdit, .QLineEdit, .QTextEdit, QMessageBox, QPlainTextEdit {
+
+ min-height:24px;
+ padding:3px;
+ background-color:#159ac0;
+ border: 1px solid #3f3f5b;
+ }
+
+ .QValidatedLineEdit:disabled, .QLineEdit:disabled {
+ /* background-color:#f2f2f2; */
+ background-color: #159ac0;
+ opacity: 0.7;
+ color: #3f3f5b;
+ }
+ .QValidatedLineEdit:focus, .QLineEdit:focus{
+ border-color: #555576;
+ }
+
+ /* -------------------Dropdown, Spinbox--------------------- */
+
+ QAbstractSpinBox, QSpinBox, QComboBox {
+ /* Dropdown Menus */
+ padding: 3px 5px;
+ min-height:24px;
+ background-color:#159ac0;
+ border: 1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ }
+
+/*
+QComboBox:checked {
+ background:#111111;
+} */
-QDialog .QTabWidget QTabBar::tab {
-background-color:#f2f0f0;
-color:#333;
-padding-left:10px;
-padding-right:10px;
-padding-top:5px;
-padding-bottom:5px;
-border-top: 1px solid #d7d7d7;
+QComboBox::drop-down {
+ width:24px;
+ border:0px;
}
-
-QDialog .QTabWidget QTabBar::tab:first {
-border-left: 1px solid #d7d7d7;
+QComboBox::down-arrow {
+ border-image: url(':/images/light/drkblue_downArrow') 0 0 0 0 stretch stretch;
}
-
-QDialog .QTabWidget QTabBar::tab:last {
-border-right: 1px solid #d7d7d7;
+QComboBox QListView {
+ background-color:#159ac0;
+ border:1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ padding-right:1px;
+ padding-left:1px;
+
}
-QDialog .QTabWidget QTabBar::tab:selected, QDialog .QTabWidget QTabBar::tab:hover {
-background-color:#ffffff;
-color:#333;
+QComboBox>QListView::item {
+ padding: 5px;
+ color: #0e056ebd;
}
-QDialog .QTabWidget .QWidget {
-background-color:#fff;
-color:#333;
+QComboBox::item:alternate {
+ background:#680f8ebb;
}
-
-QDialog .QTabWidget .QWidget QAbstractSpinBox {
-min-height:15px;
+QComboBox::item:selected {
+ border:0px solid transparent;
+ background:#08675abb;
+ /* color: #ffffff; White text */
}
-
-QDialog .QTabWidget .QWidget QAbstractSpinBox::down-button {
-width:15px;
+QComboBox::indicator {
+ background-color:transparent;
+ selection-background-color:transparent;
+ color:transparent;
+ selection-color:transparent;
}
-QDialog .QTabWidget .QWidget QAbstractSpinBox::up-button {
-width:15px;
+QAbstractSpinBox::down-button, QAbstractSpinBox::up-button{
+ width:20px;
+ height: 15px;
+ background:#159ac0;
+ border: 0;
}
-
-QDialog .QTabWidget .QWidget QComboBox {
-min-height:15px;
+QAbstractSpinBox::up-button:pressed, QAbstractSpinBox::down-button:pressed{
+ background:#159ac0;
}
-QDialog QWidget { /* Remove Annoying Focus Rectangle */
-outline: 0;
+QAbstractSpinBox::up-button {
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ border-right:1px solid #3f3f5b;
+ border-top:1px solid #3f3f5b;
}
-/*******************************************************/
-/* FILE MENU */
-
-/* Dialog: Open URI */
-QDialog#OpenURIDialog {
-background-color:#F8F6F6;
+QAbstractSpinBox::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
}
-QDialog#OpenURIDialog QLabel#label { /* URI Label */
-font-weight:bold;
+QAbstractSpinBox::down-arrow, QAbstractSpinBox::up-arrow{
+ width:12px;
+ height:12px;
}
-QDialog#OpenURIDialog QPushButton#selectFileButton { /* ... Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+QAbstractSpinBox::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
}
-
-QDialog#OpenURIDialog QPushButton#selectFileButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
+QAbstractSpinBox::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+}
+
+ /* -------------------Table--------------------- */
+
+QHeaderView::section {
+ /* Table Header Sections */
+ qproperty-alignment:center;
+ background: #159ac0;
+ min-height:25px;
+ font-weight:bold;
+ border-top:1px solid #3f3f5b;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
+ padding: 3px 5px;
+ }
+ QHeaderView::section:hover{
+ background: #159ac0;
+ }
+
+ QHeaderView::down-arrow, QHeaderView::up-arrow{
+ width: 14px;
+ height: 14px;
+ margin-right: 3px;
+ }
+ QHeaderView::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+ }
+
+ QHeaderView::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
+ }
+
+
+.QTableView, QTableWidget {
+ /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */
+ border:0px;
+ border-collapse: collapse;
+ gridline-color: #84c6d6d6;
+ font-size:12px;
+
+ }
+ QTableView::item {
+ /* Table Item */
+ background: #159ac0;
+ color: #ffffff
+ border:0px;
+ margin: 0;
+ font-size:12px;
+ }
+ QTableView::item:selected {
+ /* Table Item Selected */
+ background: #0e1073;
+ color: #ffffff
+ }
+
+ /* -------------------Scrollbar--------------------- */
+
+
+QScrollBar {
+ /* Scroll Bar */
+ border:0;
+ background: #159ac0;
+ }
+ QScrollBar:vertical {
+ /* Vertical Scroll Bar Attributes */
+
+ width:6px;
+ margin: 6px 0px 6px 0px;
+ }
+ QScrollBar:horizontal {
+ /* Horizontal Scroll Bar Attributes */
+
+ height:6px;
+ margin: 0px 6px 0px 6px;
+ }
+ QScrollBar::handle:vertical {
+ /* Scroll Bar Slider - vertical */
+ background: #159ac0;
+ min-height:6px;
+ }
+ QScrollBar::handle:horizontal {
+ /* Scroll Bar Slider - horizontal */
+ background: #159ac0;
+ min-width:6px;
+ }
+ QScrollBar::add-page, QScrollBar::sub-page {
+ /* Scroll Bar Background */
+ background:#159ac0;
+ }
+ QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
+ /* Define Arrow Button Dimensions */
+ background-color:#159ac0;
+ /* border: 1px solid #2e0042; */
+ width:6px;
+ height:6px;
+ }
+ QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed {
+ background-color:#159ac0;
+ }
+ QScrollBar::sub-line:vertical {
+ /* Vertical - top button position */
+ subcontrol-position:top;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:vertical {
+ /* Vertical - bottom button position */
+ subcontrol-position:bottom;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::sub-line:horizontal {
+ /* Vertical - left button position */
+ subcontrol-position:left;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:horizontal {
+ /* Vertical - right button position */
+ subcontrol-position:right;
+ subcontrol-origin: margin;
+ }
+ QScrollBar:up-arrow, QScrollBar:down-arrow, QScrollBar:left-arrow, QScrollBar:right-arrow {
+ /* Arrows Icon */
+ width:6px;
+ height:6px;
+ }
+
+/*
+ QScrollBar:up-arrow {
+ image: url(':/images/light/drkblue_upArrow_small');
+ }
+ QScrollBar:down-arrow {
+ image: url(':/images/light/drkblue_downArrow_small');
+ }
+ QScrollBar:left-arrow {
+ image: url(':/images/light/drkblue_leftArrow_small');
+ }
+ QScrollBar:right-arrow {
+ image: url(':/images/light/drkblue_rightArrow_small');
+ } */
+
+
+
+ /* -------------------Tab--------------------- */
+
+
+.QTabWidget::pane {
+ border: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab {
+ background-color:#159ac0;
+ padding: 8px 10px;
+ border-top: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:first {
+ border-left: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:last {
+ border-right: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:selected, .QTabWidget QTabBar::tab:hover {
+ background-color:#159ac0;
+ color: #fff;;
+}
+
+/* -------------------MODAL OVERLAY--------------------- */
+
+/* */
+QWidget#bgWidget {
+ /* The 'frame' overlaying the overview-page */
+
+ background: rgba(9, 9, 9, 0.6);
+ }
+ QWidget#bgWidget .QPushButton#warningIcon {
+ width:64px;
+ height:64px;
+ padding:5px;
+ margin-right: 20px;
+ background-color:transparent;
+ }
+ QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
+border-image: url(':/images/trad/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+border-top:0px solid #000;
+margin:0;
+padding-top:20px;
+padding-bottom: 20px;
}
-QDialog#OpenURIDialog QPushButton#selectFileButton:pressed {
-border:1px solid #9e9e9e;
-}
+ /* -------------------OVERVIEW SCREEN--------------------- */
-/* Dialog: Sign / Verify Message */
-QDialog#SignVerifyMessageDialog {
-background-color:#F8F6F6;
-}
-QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM { /* Address Book Button */
-background-color:transparent;
-padding-left:10px;
-padding-right:10px;
-}
+QWidget .QFrame#frameWallet {
+ /* Wallet Balance */
+ max-width: 451px;
+ min-width: 451px;
+ }
+ QWidget .QFrame#frameWallet > .QLabel {
+ min-width:190px;
+ font-weight:normal;
+ min-height:30px;
+ }
+
+
+ QWidget .QFrame#frameWallet .QLabel#labelWallet {
+ /* Wallet Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ background-color:#159ac0;
+ margin-right:5px;
+ padding-right:5px;
+ font-size: 14px;
+ height: 35px;
+ max-width: 421px;
+ min-width: 421px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWalletStatus {
+ /* Wallet Sync Status */
+ /* qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:3px; */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:5px;
+
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelSpendable {
+ /* Spendable Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:12px;
+ margin-left:18px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchonly {
+ /* Watch-only Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalanceText {
+ /* Available Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalance {
+ /* Available Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color:#11c26d;
+ margin-left:0px;
+
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchAvailable {
+ /* Watch-only Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelPendingText {
+ /* Pending Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelUnconfirmed {
+ /* Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchPending {
+ /* Watch-only Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmatureText {
+ /* Immature Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmature {
+ /* Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchImmature {
+ /* Watch-only Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ color: #555576
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotalText {
+ /* Total Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ font-size:14px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotal {
+ /* Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:0px;
+ color: #159ac0
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchTotal {
+ /* Watch-only Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:16px;
+ color: #555576
+ }
+
+ QWidget .QFrame#frameWallet #lineSpendableBalance, QWidget .QFrame#frameWallet #lineWatchBalance {
+ border-bottom: 1px dashed #3f3f5b;
+}
+
+
+/* -------------------PRIVATESEND WIDGET--------------------- */
+QWidget .QFrame#framePrivateSend {
+ /* PrivateSend Widget */
+ /* background-color:transparent;*/
+ color: #fff;
+ background-color: #660099
+ max-width: 451px;
+ min-width: 451px;
+ max-height: 350px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader {
+ /* PrivateSend Header */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ max-width: 421px;
+ min-width: 421px;
+ background-color:transparent;
+ margin-right: 5px;
+ padding-right: 5px;
+ font-weight:normal;
+ font-size:14px;
+ min-height:35px;
+ max-height:35px;
+ }
+ /******************************************************************/
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus {
+ /* PrivateSend Sync Status */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:2px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget {
+ max-width: 451px;
+ max-height: 175px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel {
+ min-width:175px;
+ font-weight:normal;
+ min-height:25px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText {
+ /* PrivateSend Enabled Status Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#159ac0;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText {
+ /* PrivateSend Completion Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#159ac0;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress {
+ /* PrivateSend Completion */
+
+ margin-right:43px;
+ text-align: right;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk {
+ background-color: #28a745;
+ width:1px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText {
+ /* PrivateSend Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText {
+ /* PrivateSend Amount and Rounds Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#159ac0;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText {
+ /* PrivateSend Submitted Denom Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons {
+ max-width: 451px;
+ }
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage {
+ /* PrivateSend Status Notifications */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ min-width: 288px;
+ min-height: 43px;
+
+ }
+ /* PRIVATESEND BUTTONS */
+
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo {
+ /* Info Button */
+ color: #fff;
+ background-color: #159ac0;
+ border-color: #159ac0;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover {
+
+ color: #fff;
+ background-color: #159ac0;
+ border-color: #159ac0;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed {
+
+ border-color: #0099b8;
+ }
-QDialog#SignVerifyMessageDialog QPlainTextEdit { /* Message Signing Text */
-border:1px solid #82C3E6;
-background-color:#fff;
-}
+/* RECENT TRANSACTIONS */
-QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM { /* Paste Button */
-/* qproperty-icon: url(":/icons/light/drkblue_editpaste"); */
-background-color:transparent;
-padding-left:15px;
-}
+QWidget .QFrame#frame_2 {
+ /* Transactions Widget */
+ min-width:410px;
+ margin-right:20px;
+ margin-left:0;
+ margin-top:0px;
+
+}
+QWidget .QFrame#frame_2 .QLabel#label_4 {
+ /* Recent Transactions Label */
+ min-width:180px;
+ margin-left:20px;
+ margin-right:5px;
+ padding-right:5px;
+ font-weight:normal;
+ font-size:14px;
+ /* min-height:24px; */
+}
+QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus {
+ /* Recent Transactions Sync Status */
+ qproperty-alignment: 'AlignBottom | AlignRight';
+ min-width:93px;
+ margin-left:16px;
+ margin-right:5px;
+ min-height:16px;
+}
+QWidget .QFrame#frame_2 QListView {
+ /* Transaction List */
+ font-weight:normal;
+ font-size:12px;
+ max-width:369px;
+ margin-top:12px;
+ margin-left:0px;
+
+ /* CSS Voodoo - set to -66px to hide default transaction icons */
+}
+
+ /* -------------------SEND DIALOG--------------------- */
+
+
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures {
+ /* Coin Control Header */
+ font-weight:normal;
+ font-size:14px;
+ }
+
-QDialog#SignVerifyMessageDialog QLineEdit:!focus { /* Font Hack */
-font-size:8pt;
-}
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel {
+ /* Custom Change Address Validation Label */
+ font-weight:normal;
+ qproperty-margin:-6;
+ margin-right:112px;
+ }
+
+ QDialog#SendCoinsDialog .QPushButton#clearButton {
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:hover {
+
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:pressed {
+ border-color: #de4e00;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton {
+ /* Add Button */
+
+ color: #11c26d;
+ background-color: transparent;
+ border-color: #11c26d;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:hover {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:pressed {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff
+ }
+ QDialog#SendCoinsDialog .QCheckBox#checkUsePrivateSend, QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend {
+ /* PrivateSend Checkbox */
+ margin-right: 15px;
+ }
+
+ QDialog#SendCoinsDialog #checkboxSubtractFeeFromAmount{
+ margin-left: 8px;
+ }
+ /* This QLabel uses name = "label" which conflicts with Address Book -> New Address */
+ /* To maximize backwards compatibility this formatting has been removed */
+ QDialog#SendCoinsDialog QLabel#label {
+ font-size:14px;
+ }
+ QDialog#SendCoinsDialog QLabel#labelBalance {
+ color:#11c26d;
+ font-size:14px;
+ }
-QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM { /* Copy Button */
-/* qproperty-icon: url(":/icons/light/drkblue_editcopy"); */
-background-color:transparent;
-padding-left:10px;
-padding-right:10px;
-}
+
+ /* -------------------SEND COINS ENTRY--------------------- */
+ QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel {
+ /* Send Coin Entry Labels */
+ min-width:102px;
+ font-weight:normal;
+ min-height:25px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+/* -------------------COIN CONTROL POPUP--------------------- */
+
+QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText {
+ /* Coin Control Quantity Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity {
+ /* Coin Control Quantity */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText {
+ /* Coin Control Bytes Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytes {
+ /* Coin Control Bytes */
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText {
+ /* Coin Control Amount Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmount {
+ /* Coin Control Amount */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText {
+ /* Coin Control Priority Label */
+ padding-left:15px;
+ }
+
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText {
+ /* Coin Control Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFee {
+ /* Coin Control Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText {
+ /* Coin Control Low Output Label */
+ padding-left:15px;
+ }
+
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText {
+ /* Coin Control After Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee {
+ /* Coin Control After Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText {
+ /* Coin Control Change Label */
+ padding-left:15px;
+ }
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM { /* Clear Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
+
+ padding:3px 5px;
+ background: #660099;
+ border-right: 1px solid #3f3f5b;
+ border-bottom: 1px solid #3f3f5b;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected {
+ /* Coin Control Item (selected) */
+ background: #159ac0;
+ color: #fff
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked {
+ /* Coin Control Item (checked) */
+
+ background: #159ac0;
+ color: #fff
+ }
+
+
+
+/* -------------------RECEIVE COINS--------------------- */
+
+
+QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
+ /* Label Label */
+ min-width:102px;
+ padding-right:5px;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton {
+ /* Clear Button */
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed {
+ border-color: #f2353c;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton {
+ /* Remove Button */
+ color: #ff4c52;
+ background-color: transparent;
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover {
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed {
+ border-color: #f2353c;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 {
+ /* Requested Payments History Label */
+ font-weight:normal;
+ font-size:14px;
+ }
+
+ /* -------------------TRANSACTIONS PAGE--------------------- */
+
+ TransactionView QLineEdit {
+ /* Filters */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:111px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#addressWidget {
+ /* Address Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:405px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#amountWidget {
+ /* Amount Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ max-width:100px;
+ text-align:center;
+ }
+ TransactionView QComboBox {
+ margin-bottom:1px;
+ margin-right:1px;
+ }
+ QLabel#transactionSumLabel {
+ /* Example of setObjectName for widgets without name */
+ font-weight:bold;
+ }
+
+/* -------------------Dialog: Open URI--------------------- */
+
+QDialog#OpenURIDialog QLabel#label {
+ /* URI Label */
+ font-weight:bold;
+}
+
+/* -------------------Dialog: Sign / Verify Message--------------------- */
+
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM {
+ border-color: #3f3f5b;
+ margin-left: 8px;
+}
+
+
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM {
+ /* Clear Button */
+
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
}
-
QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
+
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
}
-
QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed {
-border:1px solid #9e9e9e;
-}
-
-QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM { /* Verify Message - Address Book Button */
-background-color:transparent;
-border:0;
-padding-left:10px;
-padding-right:10px;
+
+ border-color: #de4e00;
}
-
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM { /* Verify Message - Clear Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM {
+ /* Verify Message - Clear Button */
+
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
}
-
QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
+
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
}
-
QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed {
-border:1px solid #9e9e9e;
+
+ border-color: #de4e00;
}
-
/* Dialog: Send and Receive */
-QWidget#AddressBookPage {
-background-color:#F8F6F6;
-}
-
-QWidget#AddressBookPage QPushButton#newAddress { /* New Address Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-QWidget#AddressBookPage QPushButton#newAddress:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#AddressBookPage QPushButton#newAddress:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#AddressBookPage QPushButton#copyAddress { /* Copy Address Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#AddressBookPage QPushButton#copyAddress:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#AddressBookPage QPushButton#copyAddress:pressed {
-border:1px solid #9e9e9e;
-}
-QWidget#AddressBookPage QPushButton#deleteAddress { /* Delete Address Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
+QWidget#AddressBookPage QPushButton#deleteAddress {
+ /* Delete Address Button */
+ color: #ff4c52;
+ background-color: transparent;
+ border-color: #ff4c52;
}
-
QWidget#AddressBookPage QPushButton#deleteAddress:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
}
-
QWidget#AddressBookPage QPushButton#deleteAddress:pressed {
-border:1px solid #9e9e9e;
+ border-color: #f2353c;
}
-QWidget#AddressBookPage QTableView { /* Address Listing */
-font-size:9pt;
+QWidget#AddressBookPage #tableView{
+ font-size: 13px;
}
-QWidget#AddressBookPage QHeaderView::section { /* Min width for Windows fix */
-min-width:260px;
+QWidget#AddressBookPage QHeaderView::section {
+ /* Min width for Windows fix */
+ min-width:260px;
}
-
/* SETTINGS MENU */
-
/* Encrypt Wallet and Change Passphrase Dialog */
-QDialog#AskPassphraseDialog {
-background-color:#F8F6F6;
-}
QDialog#AskPassphraseDialog QLabel#passLabel1, QDialog#AskPassphraseDialog QLabel#passLabel2, QDialog#AskPassphraseDialog QLabel#passLabel3 {
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:170px;
-min-height:33px; /* base width of 25px for QLineEdit, plus padding and border */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:170px;
+ min-height:33px;
+ /* base width of 25px for QLineEdit, plus padding and border */
}
-
/* Options Dialog */
-QDialog#OptionsDialog {
-background-color:#F8F6F6;
-}
-QDialog#OptionsDialog QValueComboBox, QDialog#OptionsDialog QSpinBox {
-margin-top:5px;
-margin-bottom:5px;
+QDialog#OptionsDialog QValueComboBox,
+QDialog#OptionsDialog QSpinBox,
+QDialog#OptionsDialog .QLineEdit,
+QDialog#OptionsDialog .QValidatedLineEdit {
+ min-height: 24px;
}
-
QDialog#OptionsDialog QValidatedLineEdit, QDialog#OptionsDialog QValidatedLineEdit:disabled, QDialog#OptionsDialog QLineEdit, QDialog#OptionsDialog QLineEdit:disabled {
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-min-height:20px;
-margin-top:0px;
-margin-bottom:0px;
-padding-top:1px;
-padding-bottom:1px;
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ min-height:20px;
+ margin-top:0px;
+ margin-bottom:0px;
+ padding-top:1px;
+ padding-bottom:1px;
}
-
QDialog#OptionsDialog > QLabel {
-qproperty-alignment: 'AlignVCenter';
-min-height:20px;
-}
-
-QDialog#OptionsDialog QWidget#tabDisplay QValueComboBox {
-margin-top:0px;
-margin-bottom:0px;
+ qproperty-alignment: 'AlignVCenter';
+ min-height:20px;
}
-QDialog#OptionsDialog QLabel#label_3 { /* Translations Missing? Label */
-qproperty-alignment: 'AlignVCenter | AlignCenter';
-color:#818181;
-padding-bottom:8px;
+QDialog#OptionsDialog QLabel#label_3 {
+ /* Translations Missing? Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+
+ padding-bottom:8px;
}
-
QDialog#OptionsDialog QCheckBox {
-min-height:20px;
+ /* min-height:20px; */
+ margin-bottom: 4px;
}
-QDialog#OptionsDialog QCheckBox#displayAddresses {
-min-height:33px;
-
+QDialog#OptionsDialog QGroupBox::title {
+ padding: 5px 3px;
+ font-weight: bold;
}
-/* TOOLS MENU */
-QDialog#RPCConsole { /* RPC Console Dialog Box */
-background-color:#F8F6F6;
-}
+/* -------------------Toolbox--------------------- */
-QDialog#RPCConsole QWidget#tab_info QLabel#label_11, QDialog#RPCConsole QWidget#tab_info QLabel#label_10 { /* Margin between Network and Block Chain headers */
-qproperty-alignment: 'AlignBottom';
-min-height:25px;
-min-width:180px;
+QDialog#RPCConsole QWidget#tab_info QLabel#label_11, QDialog#RPCConsole QWidget#tab_info QLabel#label_10 {
+ /* Margin between Network and Block Chain headers */
+ qproperty-alignment: 'AlignBottom';
+ min-height:25px;
+ min-width:180px;
}
-
-QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading { /* Peers Info Header */
-color:#1c75bc;
+QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading {
+ /* Peers Info Header */
+ color:#159ac0;
}
-
QDialog#RPCConsole QPushButton#openDebugLogfileButton {
-max-width:60px;
+ max-width:60px;
}
-
-QDialog#RPCConsole QTextEdit#messagesWidget { /* Console Messages Window */
-border:0;
+QDialog#RPCConsole QTextEdit#messagesWidget {
+ /* Console Messages Window */
+ border:0;
}
-
-QDialog#RPCConsole QLineEdit#lineEdit { /* Console Input */
-margin-right:5px;
+QDialog#RPCConsole QLineEdit#lineEdit {
+ /* Console Input */
+ margin-right:5px;
}
-
-QDialog#RPCConsole QPushButton#clearButton { /* Console Clear Button */
-background-color:transparent;
-padding-left:10px;
-padding-right:10px;
+QDialog#RPCConsole QPushButton#clearButton {
+ /* Console Clear Button */
+ background-color:transparent;
+ padding-left:10px;
+ padding-right:10px;
}
-
-QDialog#RPCConsole .QGroupBox #line { /* Network In Line */
-background-color:#00ff00;
+QDialog#RPCConsole .QGroupBox #line {
+ /* Network In Line */
+ background-color:#00ff00;
}
-
-QDialog#RPCConsole .QGroupBox #line_2 { /* Network Out Line */
-background:#ff0000;
+QDialog#RPCConsole .QGroupBox #line_2 {
+ /* Network Out Line */
+ background:#ff3300;
}
-/* HELP MENU */
-
-/* Command Line Options Dialog */
-QDialog#HelpMessageDialog {
-background-color:#F8F6F6;
+#RPCConsole #fontSmallerButton, #RPCConsole #fontBiggerButton,#RPCConsole #clearButton{
+ border-color: #3f3f5b;
+ padding: 3px;
}
-
-QDialog#HelpMessageDialog QScrollArea * {
-background-color:#ffffff;
+#RPCConsole #promptIcon{
+ border: 0;
}
-QDialog#HelpMessageDialog QScrollBar:vertical, QDialog#HelpMessageDialog QScrollBar:horizontal {
-border:0;
-}
+/* HELP MENU */
-/* About RussellCoin2 Dialog */
-QDialog#AboutDialog {
-background-color:#F8F6F6;
-}
-QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 { /* About RussellCoin2 Contents */
-margin-left:10px;
-}
+/* About GeekCash Dialog */
-QDialog#AboutDialog QLabel#label_2 { /* Margin for About RussellCoin2 text */
-margin-right:10px;
+QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 {
+ /* About GeekCash Contents */
+ margin-left:10px;
}
-
-/* Edit Address Dialog */
-QDialog#EditAddressDialog {
-background-color:#F8F6F6;
+QDialog#AboutDialog QLabel#label_2 {
+ /* Margin for About GeekCash text */
+ margin-right:10px;
}
+/* Edit Address Dialog */
QDialog#EditAddressDialog QLabel {
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-height:27px;
-font-weight:normal;
-padding-right:5px;
-}
-
-/* OVERVIEW SCREEN */
-
-QWidget .QFrame#frame { /* Wallet Balance */
-min-width:490px;
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-height:27px;
+ font-weight:normal;
+ padding-right:5px;
}
-QWidget .QFrame#frame > .QLabel {
-min-width:190px;
-font-weight:normal;
-min-height:30px;
-}
-QWidget .QFrame#frame .QLabel#label_5 { /* Wallet Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:transparent;
-color:#f4f4f5;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWalletStatus { /* Wallet Sync Status */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-margin-left:3px;
-}
-
-QWidget .QFrame#frame .QLabel#labelSpendable { /* Spendable Header */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:9pt;
-margin-left:18px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchonly { /* Watch-only Header */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:9pt;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelBalanceText { /* Available Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#1c75bc;
-color:#ffffff;
-margin-right:5px;
-padding-right:5px;
-font-size:10pt;
-font-weight: bold;
-min-height:35px;
-}
-
-QWidget .QFrame#frame .QLabel#labelBalance { /* Available Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:12pt;
-color:#1c75bc;
-margin-left:0px;
- font-weight: bold;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchAvailable { /* Watch-only Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:9pt;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelPendingText { /* Pending Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-font-size:9pt;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelUnconfirmed { /* Pending Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:9pt;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchPending { /* Watch-only Pending Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:9pt;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelImmatureText { /* Immature Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-font-size:9pt;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelImmature { /* Immature Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:9pt;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchImmature { /* Watch-only Immature Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:9pt;
-margin-left:16px;
-}
-
-QWidget .QFrame#frame .QLabel#labelTotalText { /* Total Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-font-size:9pt;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#frame .QLabel#labelTotal { /* Total Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:9pt;
-margin-left:0px;
-}
-
-QWidget .QFrame#frame .QLabel#labelWatchTotal { /* Watch-only Total Balance */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-font-size:9pt;
-margin-left:16px;
-}
-
-/* PRIVATESEND WIDGET */
-
-QWidget .QFrame#framePrivateSend { /* PrivateSend Widget */
-background-color:transparent;
-max-width: 451px;
-min-width: 451px;
-max-height: 350px;
-}
-
-QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetPrivateSendHeader { /* PrivateSend Header */
-max-width: 421px;
-min-width: 421px;
-}
-
-QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader { /* PrivateSend Header */
-qproperty-alignment: 'AlignVCenter | AlignCenter';
-max-width: 421px;
-min-width: 421px;
-background-color:#1c75bc;
-color:#fff;
-margin-right: 5px;
-padding-right: 5px;
-font-weight:bold;
-font-size:10pt;
-min-height:35px;
-max-height:35px;
-}
-/******************************************************************/
-QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus { /* PrivateSend Sync Status */
-qproperty-alignment: 'AlignVCenter | AlignLeft';
-margin-left:2px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget {
-max-width: 451px;
-max-height: 175px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel {
-min-width:175px;
-font-weight:normal;
-min-height:25px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText { /* PrivateSend Enabled Status Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabled { /* PrivateSend Enabled Status */
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText { /* PrivateSend Completion Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress { /* PrivateSend Completion */
-border: 1px solid #818181;
-border-radius: 1px;
-margin-right:43px;
-text-align: right;
-color:#818181;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk {
-background-color: #1c75bc;
-width:1px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText { /* PrivateSend Balance Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymized { /* PrivateSend Balance */
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText { /* PrivateSend Amount and Rounds Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountRounds { /* PrivateSend Amount and Rounds */
-
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText { /* PrivateSend Submitted Denom Label */
-qproperty-alignment: 'AlignVCenter | AlignRight';
-min-width:160px;
-background-color:#F8F6F6;
-margin-right:5px;
-padding-right:5px;
-}
-
-QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenom { /* PrivateSend Submitted Denom */
-
-}
-
-QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons {
-max-width: 451px;
-}
-
-QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage { /* PrivateSend Status Notifications */
-qproperty-alignment: 'AlignVCenter | AlignCenter';
-min-width: 288px;
-min-height: 43px;
-font-size:8pt;
-color:#818181;
-}
-
-/* PRIVATESEND BUTTONS */
-
-QWidget .QFrame#framePrivateSend .QPushButton { /* PrivateSend Buttons - General Attributes */
-border:0px solid #ffffff;
-}
-
-QWidget .QFrame#framePrivateSend QPushButton:focus {
-border:none;
-outline:none;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend { /* Start PrivateSend Mixing */
-min-height: 40px;
-font-size:10pt;
-font-weight:normal;
-color:#ffffff;
-padding-left:10px;
-padding-right:10px;
-padding-top:5px;
-padding-bottom:6px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#togglePrivateSend:hover {
-
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendAuto { /* Try Mix Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-min-height:25px;
-font-size:6pt;
-padding:0px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendAuto:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendAuto:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset { /* Reset Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-min-height:25px;
-font-size:6pt;
-padding:0px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo { /* Info Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-min-height:25px;
-font-size:6pt;
-padding:0px;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed {
-border:1px solid #9e9e9e;
-}
-
-/* RECENT TRANSACTIONS */
-
-QWidget .QFrame#frame_2 { /* Transactions Widget */
-min-width:410px;
-margin-right:20px;
-margin-left:0;
-margin-top:15px;
-background-image: url(':/images/light/RussellCoin2_logo_horizontal');
-background-repeat:none;
-}
-
-QWidget .QFrame#frame_2 .QLabel#label_4 { /* Recent Transactions Label */
-min-width:180px;
-color:#999;
-margin-left:67px;
-margin-top:83px;
-margin-right:5px;
-padding-right:5px;
-font-weight:normal;
-font-size:10pt;
-min-height:24px;
-}
-
-QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus { /* Recent Transactions Sync Status */
-qproperty-alignment: 'AlignBottom | AlignRight';
-min-width:93px;
-margin-top:83px;
-margin-left:16px;
-margin-right:5px;
-min-height:16px;
-}
-
-QWidget .QFrame#frame_2 QListView { /* Transaction List */
-font-weight:normal;
-font-size:9pt;
-margin-top:12px;
-margin-left:0px; /* CSS Voodoo - set to -66px to hide default transaction icons */
-}
-
-/* MODAL OVERLAY */
-
-QWidget#bgWidget { /* The 'frame' overlaying the overview-page */
- background:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
- color:#616161;
- padding-left:10px;
- padding-right:10px;
-}
-
-QWidget#bgWidget .QPushButton#warningIcon {
-width:64px;
-height:64px;
-padding:5px;
-background-color:transparent;
-}
-
-QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
-border-image: url(':/images/light/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
-border-top:0px solid #000;
-margin:0;
-padding-top:20px;
-padding-bottom: 20px;
-}
-
-QWidget#bgWidget .QPushButton#closeButton {
-
-}
-
-/* SEND DIALOG */
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl { /* Coin Control Section */
-
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl > .QLabel { /* Default Font Color and Size */
-font-weight:normal;
-color: #999;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QPushButton#pushButtonCoinControl { /* Coin Control Inputs Button */
-padding-left:10px;
-padding-right:10px;
-min-height:25px;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures { /* Coin Control Header */
-color:#999;
-font-weight:normal;
-font-size:10pt;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl { /* Coin Control Inputs */
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QWidget#widgetCoinControl > .QLabel { /* Coin Control Inputs Labels */
-padding:2px;
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QCheckBox#checkBoxCoinControlChange { /* Custom Change Label */
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QValidatedLineEdit#lineEditCoinControlChange { /* Custom Change Address */
-}
-
-QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel { /* Custom Change Address Validation Label */
-font-weight:normal;
-qproperty-margin:-6;
-margin-right:112px;
-}
-
-QDialog#SendCoinsDialog .QScrollArea#scrollArea .QWidget#scrollAreaWidgetContents { /* Send To Widget */
-background:transparent;
-}
-
-QDialog#SendCoinsDialog .QPushButton#sendButton { /* Send Button */
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SendCoinsDialog .QPushButton#clearButton { /* Clear Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SendCoinsDialog .QPushButton#clearButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QDialog#SendCoinsDialog .QPushButton#clearButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QDialog#SendCoinsDialog .QPushButton#addButton { /* Add Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QDialog#SendCoinsDialog .QPushButton#addButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QDialog#SendCoinsDialog .QPushButton#addButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QDialog#SendCoinsDialog .QCheckBox#checkUsePrivateSend { /* PrivateSend Checkbox */
-color:#616161;
-font-weight:bold;
-background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5, fx:0.5, fy:0.5, stop:0 rgba(248, 246, 246, 128), stop: 1 rgba(0, 0, 0, 0));
-border-radius:5px;
-padding-top:20px;
-padding-bottom:18px;
-}
-
-QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend { /* InstantSend Checkbox */
-color:#616161;
-font-weight:bold;
-background: qradialgradient(cx:0.5, cy:0.5, radius: 0.5, fx:0.5, fy:0.5, stop:0 rgba(248, 246, 246, 128), stop: 1 rgba(0, 0, 0, 0));
-border-radius:5px;
-padding-top:20px;
-padding-bottom:18px;
-margin-left:10px;
-margin-right:20px;
-}
-
-/* This QLabel uses name = "label" which conflicts with Address Book -> New Address */
-/* To maximize backwards compatibility this formatting has been removed */
-
-QDialog#SendCoinsDialog QLabel#label {
-/*margin-left:20px;
-margin-right:-2px;
-padding-right:-2px;
-color:#616161;
-font-size:10pt;
-font-weight:bold;
-border-radius:5px;
-padding-top:20px;
-padding-bottom:20px;*/
-min-height:27px;
-}
-
-QDialog#SendCoinsDialog QLabel#labelBalance {
-margin-left:0px;
-padding-left:0px;
-color:#333333;
-/* font-weight:bold;
-border-radius:5px;
-padding-top:20px;
-padding-bottom:20px; */
-min-height:27px;
-}
-
-#checkboxSubtractFeeFromAmount {
-padding-left:10px;
-}
-
-
-/* SEND COINS ENTRY */
-
-QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel { /* Send Coin Entry Labels */
-background-color:#F8F6F6;
-min-width:102px;
-font-weight:normal;
-/*font-size:8pt;*/
-color:#333;
-min-height:25px;
-margin-right:5px;
-padding-right:5px;
-}
-
-QStackedWidget#SendCoinsEntry .QFrame#SendCoins .QLabel#amountLabel {
-color: #fff;
-background-color:#999;
-}
-
-QStackedWidget#SendCoinsEntry .QValidatedLineEdit#payTo { /* Pay To Input Field */
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton { /* General Settings for Pay To Icons */
-background-color:transparent;
-padding-left:5px;
-padding-right:5px;
-border: 0;
-outline: 0;
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton { /* Address Book Button */
-padding-left:10px;
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#addressBookButton {
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#pasteButton {
-}
-
-QStackedWidget#SendCoinsEntry .QToolButton#deleteButton {
-}
-
-QStackedWidget#SendCoinsEntry .QLineEdit#addAsLabel { /* Pay To Input Field */
-}
-
-/* COIN CONTROL POPUP */
-
-QDialog#CoinControlDialog { /* Coin Control Dialog Window */
-background-color:#F8F6F6;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText { /* Coin Control Quantity Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity { /* Coin Control Quantity */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText { /* Coin Control Bytes Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlBytes { /* Coin Control Bytes */
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText { /* Coin Control Amount Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAmount { /* Coin Control Amount */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText { /* Coin Control Priority Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlPriority { /* Coin Control Priority */
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText { /* Coin Control Fee Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlFee { /* Coin Control Fee */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText { /* Coin Control Low Output Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutput { /* Coin Control Low Output */
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText { /* Coin Control After Fee Label */
-min-height:30px;
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee { /* Coin Control After Fee */
-min-height:30px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText { /* Coin Control Change Label */
-padding-left:15px;
-}
-
-QDialog#CoinControlDialog .QLabel#labelCoinControlChange { /* Coin Control Change */
-
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonSelectAll { /* (un)select all button */
-padding-left:10px;
-padding-right:10px;
-min-height:25px;
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QPushButton#pushButtonToggleLock { /* Toggle lock state button */
-padding-left:10px;
-padding-right:10px;
-min-height:25px;
-}
-
-QDialog#CoinControlDialog .QDialogButtonBox#buttonBox QPushButton { /* Coin Control 'OK' button */
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QRadioButton#radioTreeMode { /* Coin Control Tree Mode Selector */
-color:#818181;
-background-color:transparent;
-}
-
-QDialog#CoinControlDialog .QFrame#frame .QRadioButton#radioListMode { /* Coin Control List Mode Selector */
-color:#818181;
-background-color:transparent;
-}
-
-QDialog#CoinControlDialog QHeaderView::section:first { /* Bug Fix: the number "1" displays in this table for some reason... */
-color:transparent;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget { /* Coin Control Widget Container */
-outline:0;
-background-color:#ffffff;
-border:0px solid #818181;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected { /* Coin Control Item (selected) */
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked { /* Coin Control Item (checked) */
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:selected { /* Coin Control Branch Icon */
-background-image: url(':/images/light/drkblue_qtreeview_selected');
-background-repeat:no-repeat;
-background-position:center;
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::branch:checked { /* Coin Control Branch Icon */
-background-image: url(':/images/light/drkblue_qtreeview_selected');
-background-repeat:no-repeat;
-background-position:center;
-background-color:#f7f7f7;
-color:#333;
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::seperator {
-
-}
-
-QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::indicator { /* Coin Control Widget Checkbox */
-
-}
-
-/* RECEIVE COINS */
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_2 { /* Label Label */
-background-color:#F8F6F6;
-border: 1px solid #fff;
-min-width:102px;
-color:#333;
-/*font-weight:bold;
-font-size:8pt;*/
-padding-right:5px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label { /* Amount Label */
-background-color:#999;
-border: 1px solid #fff;
-min-width:102px;
-color:#ffffff;
-/*font-weight:bold;
-font-size:8pt;*/
-padding-right:5px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel#label_3 { /* Message Label */
-background-color:#F8F6F6;
-border: 1px solid #fff;
-min-width:102px;
-color:#333;
-/*font-weight:bold;
-font-size:8pt;*/
-padding-right:5px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton { /* Clear Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton { /* Show Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#showRequestButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton { /* Remove Button */
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb);
-border:1px solid #d2d2d2;
-color:#616161;
-padding-left:10px;
-padding-right:10px;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover {
-background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb);
-color:#333;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed {
-border:1px solid #9e9e9e;
-}
-
-QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 { /* Requested Payments History Label */
-color:#999;
-font-weight:normal;
-font-size:10pt;
-}
-
-/* RECEIVE COINS DIALOG */
-
-QDialog#ReceiveRequestDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#ReceiveRequestDialog QTextEdit { /* Contents of Receive Coin Dialog */
-border:1px solid #d7d7d7;
-}
-
-/* TRANSACTIONS PAGE */
-
-TransactionView QLineEdit { /* Filters */
-margin-bottom:2px;
-margin-right:1px;
-min-width:111px;
-text-align:center;
-}
-
-TransactionView QLineEdit#addressWidget { /* Address Filter */
-margin-bottom:2px;
-margin-right:1px;
-min-width:405px;
-text-align:center;
-}
-
-TransactionView QLineEdit#amountWidget { /* Amount Filter */
-margin-bottom:2px;
-margin-right:1px;
-max-width:100px;
-text-align:center;
-}
-
-TransactionView QComboBox {
-margin-bottom:1px;
-margin-right:1px;
-}
-
-QLabel#transactionSumLabel { /* Example of setObjectName for widgets without name */
-color:#333333;
-font-weight:bold;
-}
-
-QLabel#transactionSum { /* Example of setObjectName for widgets without name */
-color:#333333;
-}
-
-/* TRANSACTION DETAIL DIALOG */
-
-QDialog#TransactionDescDialog {
-background-color:#F8F6F6;
-}
-
-QDialog#TransactionDescDialog QTextEdit { /* Contents of Receive Coin Dialog */
-border:1px solid #d7d7d7;
-}
diff --git a/src/qt/res/css/light.css b/src/qt/res/css/light.css
index 4be2a88a..6cd8e501 100644
--- a/src/qt/res/css/light.css
+++ b/src/qt/res/css/light.css
@@ -1,97 +1,141 @@
-
-/* reset all */
+/* Global Styles */
* {
- color: #d3d3e0;
- font-size:12px;
+ color: #FFFFFF; /* Set default text color to white */
+ font-size: 13px;
font-family: Arial, Helvetica, sans-serif;
- outline:none;
+ outline: none;
+}
+
+/* Background image (for widget) */
+WalletFrame {
+ border-image: url(':/images/light/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+}
+
+/* The first layer: Dialogs and Widgets */
+QDialog {
+ background-color: #2e0042;
+ color: #ffffff;
+}
+QWidget {
background-color: transparent;
- transition: border .2s linear,color .2s linear,width .2s linear,background-color .2s linear;
- /* margin: 0px;
- padding: 0px; */
+ color: #ffffff;
}
-*:focus{
- font-size: 12px;
+/* The second layer: Labels and Buttons */
+QLabel {
+ color: #FFFFFF;
+}
+QPushButton {
+ color: #FFFFFF;
}
-WalletFrame, QMainWindow, QDialog, QProgressBar:horizontal {
- background-color: #16161f;
+/* The thrid layer: Input fields */
+QLineEdit, QTextEdit, QPlainTextEdit {
+ background-color: #3f005b;
+ color: #FFFFFF;
}
-.QFrame {
- background-color:transparent;
- border:0px solid #16161f;
+/* Restore alternating row styles */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #FFFFFF;
}
+QTableView::item {
+ background-color: #2e0042;
+ color: #FFFFFF;
+}
+QTableView::item:alternate {
+ background-color: #3f005b;
+}
+
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #FFFFFF;
+}
+
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
+}
+
+.QFrame {
+ background-color: rgba(75, 0, 110, 0.5); /* 50% transparent*/
+ border:0px solid #2e0042;
+ color: #ffffff; /* white text */
+ padding: 5px;
+ border-radius: 4px;
+}
+
+/* Pop up help(tip)*/
QToolTip{
- color: #856404;
+ /*color: #856404;*/
+ color: #000;
background-color: #fff3cd;
border:1px solid #ffeeba;
border-radius: 5px;
}
-
+/*Html hyperLink color*/
a, QDialog a, *::Link{
color: #11c26d
}
/* Toolbar */
-
QToolBar, QStatusBar {
- background-color:#16161f;
-
+ background-color:#2e0042;
padding:0;
margin:0;
border:0px;
}
+/*The second menu*/
QToolBar > QToolButton {
min-height:2.5em;
min-width: 8em;
padding: 5px 8px;
border:0px;
- margin: 0px;
+ margin: 0px;
+ background-color: #2e0042;
+ color: #ffffff;
}
QToolBar > QToolButton:hover{
- background-color: #2a2a3d
+ background-color: #660099;
}
QToolBar > QToolButton:checked {
- background-color:#20202E;
+ background-color:#660099;
font-weight:bold;
}
- /* -------------------Right Menu--------------------- */
-QMenuBar{background-color:#16161F;}
+ /* -------------------Main Menu--------------------- */
+QMenuBar {
+ background-color:#2e0042;
+}
QMenuBar::item {
/*padding: 5px;*/
- background-color:#16161F;
+ background-color:#2e0042;
color:#ffffff;
}
-QMenu{
- background-color:#16161F;
+QMenu {
+ background-color:#2e0042;
color:#ffffff;
border: 1px solid #3f3f5b;
padding: 0;
margin: 0;
}
-QMenuBar::item {
- /*padding: 5px;*/
-}
QMenu::item:hover {
- background-color:#16161f;
+ background-color:#4b006e;
+ color: #ffffff
}
QMenu::item:selected {
- background-color:#16161f;
- color: #3e8ef7
+ background-color:#4b006e;
+ color: #ffffff
}
- /* -------------------Checkbox--------------------- */
-
-
+ /* -------------------Checkbox--------------------- Not working*/
QCheckBox {
- spacing: 5px;
+ padding: 5px;
}
QCheckBox::indicator {
width: 16px;
@@ -123,7 +167,6 @@ QCheckBox::indicator:indeterminate:pressed {
}
/* -------------------Button--------------------- */
-
QPushButton {
display: inline-block;
text-align: center;
@@ -131,42 +174,42 @@ QPushButton {
vertical-align: middle;
padding: 8px 14px;
border-radius: 4px;
- color: #3e8ef7;
- background-color: transparent;
- border: 1px solid #3e8ef7;
+ color: #fff;
+ background-color: #2e0042;
+ border: 1px solid #ffffff;
}
QPushButton:hover {
color: #fff;
- background-color: #3e8ef7;
- border-color: #3e8ef7;
+ background-color: #660099;
+ border-color: #ffffff;
}
QPushButton:focus {
- border-color: #247cf0;
-
+ border-color: #660099;
}
QPushButton:pressed {
- border-color: #247cf0
+ color: #fff;
+ background-color: #330066;
+ border-color: #fff
}
QPushButton:disabled {
- color: #3f3f5b;
- background-color: transparent;
- border-color: #20202E;
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
}
/* -------------------Textbox--------------------- */
-
-
.QValidatedLineEdit, .QLineEdit, .QTextEdit, QMessageBox, QPlainTextEdit {
min-height:24px;
padding:3px;
- background-color:#20202E;
- border: 1px solid #3f3f5b;
+ background-color:#2e0042;
+ border: 1px solid #3f3f5b;
+ color: #ffffff;
}
.QValidatedLineEdit:disabled, .QLineEdit:disabled {
/* background-color:#f2f2f2; */
- background-color: #16161f;
+ background-color: #2e0042;
opacity: 0.7;
color: #3f3f5b;
}
@@ -175,13 +218,13 @@ QPushButton {
}
/* -------------------Dropdown, Spinbox--------------------- */
-
QAbstractSpinBox, QSpinBox, QComboBox {
/* Dropdown Menus */
padding: 3px 5px;
min-height:24px;
- background-color:#20202E;
+ background-color:#2e0042;
border: 1px solid #3f3f5b;
+ color: #ffffff; /* White text */
}
/*
@@ -197,8 +240,9 @@ QComboBox::down-arrow {
border-image: url(':/images/light/drkblue_downArrow') 0 0 0 0 stretch stretch;
}
QComboBox QListView {
- background-color:#20202E;
- border:1px solid #3f3f5b;
+ background-color:#2e0042;
+ border:1px solid #3f3f5b;
+ color: #ffffff; /* White text */
padding-right:1px;
padding-left:1px;
@@ -206,14 +250,16 @@ QComboBox QListView {
QComboBox>QListView::item {
padding: 5px;
+ color: #0e056ebd;
}
QComboBox::item:alternate {
- background:#16161f;
+ background:#680f8ebb;
}
QComboBox::item:selected {
border:0px solid transparent;
- background:#16161f;
+ background:#08675abb;
+ /* color: #ffffff; White text */
}
QComboBox::indicator {
background-color:transparent;
@@ -225,11 +271,11 @@ QComboBox::indicator {
QAbstractSpinBox::down-button, QAbstractSpinBox::up-button{
width:20px;
height: 15px;
- background:#20202E;
+ background:#2e0042;
border: 0;
}
QAbstractSpinBox::up-button:pressed, QAbstractSpinBox::down-button:pressed{
- background:#16161f;
+ background:#2e0042;
}
QAbstractSpinBox::up-button {
@@ -263,7 +309,8 @@ QAbstractSpinBox::down-arrow {
QHeaderView::section {
/* Table Header Sections */
qproperty-alignment:center;
- background: #20202E;
+ background: #2e0042;
+ color: #ffffff; /* White font*/
min-height:25px;
font-weight:bold;
border-top:1px solid #3f3f5b;
@@ -272,7 +319,7 @@ QHeaderView::section {
padding: 3px 5px;
}
QHeaderView::section:hover{
- background: #16161f;
+ background: #4b006e;
}
QHeaderView::down-arrow, QHeaderView::up-arrow{
@@ -288,35 +335,63 @@ QHeaderView::section {
image:url(':/images/light/drkblue_upArrow_small');
}
+/* define QTableView alternating */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
+}
-.QTableView, QTableWidget {
- /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */
- border:0px;
- border-collapse: collapse;
- gridline-color: #3f3f5b;
- font-size:12px;
-
- }
- QTableView::item {
- /* Table Item */
- background: #2a2a3d;
- border:0px;
- margin: 0;
- font-size:12px;
- }
- QTableView::item:selected {
- /* Table Item Selected */
- background: #20202e;
- color: #3e8ef7
- }
-
- /* -------------------Scrollbar--------------------- */
+QTableView::item {
+ background-color: #2e0042;
+ color: #ffffff;
+}
+QTableView::item:alternate {
+ background-color: #3f005b;
+}
+
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+/* define QTreeView alternating */
+QTreeView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
+}
+
+QTreeView::item {
+ background-color: #2e0042;
+ color: #ffffff;
+}
+
+QTreeView::item:alternate {
+ background-color: #3f005b;
+}
+
+QTreeView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+QTreeView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+ /* -------------------Scrollbar--------------------- */
QScrollBar {
/* Scroll Bar */
border:0;
- background: #16161f;
+ background: #2e0042;
}
QScrollBar:vertical {
/* Vertical Scroll Bar Attributes */
@@ -332,27 +407,27 @@ QScrollBar {
}
QScrollBar::handle:vertical {
/* Scroll Bar Slider - vertical */
- background: #3e8ef7;
+ background: #2e0042;
min-height:6px;
}
QScrollBar::handle:horizontal {
/* Scroll Bar Slider - horizontal */
- background: #3e8ef7;
+ background: #2e0042;
min-width:6px;
}
QScrollBar::add-page, QScrollBar::sub-page {
/* Scroll Bar Background */
- background:#000000;
+ background:#2e0042;
}
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
/* Define Arrow Button Dimensions */
- background-color:#3e8ef7;
- /* border: 1px solid #3e8ef7; */
+ background-color:#2e0042;
+ /* border: 1px solid #2e0042; */
width:6px;
height:6px;
}
QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed {
- background-color:#247cf0;
+ background-color:#2e0042;
}
QScrollBar::sub-line:vertical {
/* Vertical - top button position */
@@ -397,13 +472,11 @@ QScrollBar {
/* -------------------Tab--------------------- */
-
-
.QTabWidget::pane {
border: 1px solid #3f3f5b;
}
.QTabWidget QTabBar::tab {
- background-color:#20202E;
+ background-color:#2e0042;
padding: 8px 10px;
border-top: 1px solid #3f3f5b;
}
@@ -414,35 +487,35 @@ QScrollBar {
border-right: 1px solid #3f3f5b;
}
.QTabWidget QTabBar::tab:selected, .QTabWidget QTabBar::tab:hover {
- background-color:#16161f;
- color:#3e8ef7;
+ background-color:#4b006e;
+ color: #fff;;
}
/* -------------------MODAL OVERLAY--------------------- */
-
-/* */
QWidget#bgWidget {
/* The 'frame' overlaying the overview-page */
-
- background: rgba(9, 9, 9, 0.6);
+ /*background: rgba(9, 9, 9, 0.6);*/
+ background:#2e0042;
}
QWidget#bgWidget .QPushButton#warningIcon {
width:64px;
height:64px;
padding:5px;
margin-right: 20px;
- background-color:transparent;
- }
- QWidget#contentWidget {
- background: #16161f;
- margin:0;
- padding-top:20px;
- padding-bottom: 20px;
+ /*background-color:transparent;*/
+ /*background:#2e0042;*/
+ background:rgba(75, 0, 110, 0.5); /* 50%*/
+ color: #ffffff;
}
+ QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
+border-image: url(':/images/light/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+border-top:0px solid #000;
+margin:0;
+padding-top:20px;
+padding-bottom: 20px;
+}
/* -------------------OVERVIEW SCREEN--------------------- */
-
-
QWidget .QFrame#frameWallet {
/* Wallet Balance */
max-width: 451px;
@@ -453,12 +526,11 @@ QWidget .QFrame#frameWallet {
font-weight:normal;
min-height:30px;
}
-
-
+
QWidget .QFrame#frameWallet .QLabel#labelWallet {
/* Wallet Label */
qproperty-alignment: 'AlignVCenter | AlignCenter';
- background-color:#20202E;
+ background-color:#2e0042;
margin-right:5px;
padding-right:5px;
font-size: 14px;
@@ -471,8 +543,7 @@ QWidget .QFrame#frameWallet {
/* qproperty-alignment: 'AlignVCenter | AlignRight';
margin-right:3px; */
qproperty-alignment: 'AlignVCenter | AlignRight';
- margin-right:5px;
-
+ margin-right:5px;
}
QWidget .QFrame#frameWallet .QLabel#labelSpendable {
/* Spendable Header */
@@ -492,15 +563,13 @@ QWidget .QFrame#frameWallet {
qproperty-alignment: 'AlignVCenter | AlignRight';
min-width:160px;
margin-right:5px;
- padding-right:5px;
-
+ padding-right:5px;
}
QWidget .QFrame#frameWallet .QLabel#labelBalance {
/* Available Balance */
qproperty-alignment: 'AlignVCenter | AlignLeft';
color:#11c26d;
- margin-left:0px;
-
+ margin-left:0px;
}
QWidget .QFrame#frameWallet .QLabel#labelWatchAvailable {
/* Watch-only Balance */
@@ -511,15 +580,13 @@ QWidget .QFrame#frameWallet {
QWidget .QFrame#frameWallet .QLabel#labelPendingText {
/* Pending Balance Label */
qproperty-alignment: 'AlignVCenter | AlignRight';
- min-width:160px;
-
+ min-width:160px;
margin-right:5px;
padding-right:5px;
}
QWidget .QFrame#frameWallet .QLabel#labelUnconfirmed {
/* Pending Balance */
- qproperty-alignment: 'AlignVCenter | AlignLeft';
-
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
margin-left:0px;
}
QWidget .QFrame#frameWallet .QLabel#labelWatchPending {
@@ -559,7 +626,7 @@ QWidget .QFrame#frameWallet {
qproperty-alignment: 'AlignVCenter | AlignLeft';
font-size:14px;
margin-left:0px;
- color: #3e8ef7
+ color: #2e0042
}
QWidget .QFrame#frameWallet .QLabel#labelWatchTotal {
/* Watch-only Total Balance */
@@ -577,7 +644,9 @@ QWidget .QFrame#frameWallet {
/* -------------------PRIVATESEND WIDGET--------------------- */
QWidget .QFrame#framePrivateSend {
/* PrivateSend Widget */
- background-color:transparent;
+ /* background-color:transparent;*/
+ color: #fff;
+ /*background-color: #660099 ;*/
max-width: 451px;
min-width: 451px;
max-height: 350px;
@@ -588,7 +657,7 @@ QWidget .QFrame#framePrivateSend {
qproperty-alignment: 'AlignVCenter | AlignCenter';
max-width: 421px;
min-width: 421px;
- background-color:#20202E;
+ background-color:transparent;
margin-right: 5px;
padding-right: 5px;
font-weight:normal;
@@ -616,7 +685,7 @@ QWidget .QFrame#framePrivateSend {
/* PrivateSend Enabled Status Label */
qproperty-alignment: 'AlignVCenter | AlignRight';
min-width:160px;
- background-color:#16161f;
+ background-color:#2e0042;
margin-right:5px;
padding-right:5px;
}
@@ -625,13 +694,12 @@ QWidget .QFrame#framePrivateSend {
/* PrivateSend Completion Label */
qproperty-alignment: 'AlignVCenter | AlignRight';
min-width:160px;
- background-color:#16161f;
+ background-color:#2e0042;
margin-right:5px;
padding-right:5px;
}
QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress {
- /* PrivateSend Completion */
-
+ /* PrivateSend Completion */
margin-right:43px;
text-align: right;
}
@@ -651,7 +719,7 @@ QWidget .QFrame#framePrivateSend {
/* PrivateSend Amount and Rounds Label */
qproperty-alignment: 'AlignVCenter | AlignRight';
min-width:160px;
- background-color:#16161f;
+ background-color:#2e0042;
margin-right:5px;
padding-right:5px;
}
@@ -674,19 +742,18 @@ QWidget .QFrame#framePrivateSend {
min-height: 43px;
}
- /* PRIVATESEND BUTTONS */
-
+ /* PRIVATESEND BUTTONS */
QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo {
/* Info Button */
- color: #0bb2d4;
- background-color: transparent;
- border-color: #0bb2d4;
+ color: #fff;
+ background-color: #2e0042;
+ border-color: #2e0042;
}
QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover {
color: #fff;
- background-color: #0bb2d4;
- border-color: #0bb2d4;
+ background-color: #4b006e;
+ border-color: #2e0042;
}
QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed {
@@ -694,7 +761,6 @@ QWidget .QFrame#framePrivateSend {
}
/* RECENT TRANSACTIONS */
-
QWidget .QFrame#frame_2 {
/* Transactions Widget */
min-width:410px;
@@ -727,21 +793,17 @@ QWidget .QFrame#frame_2 QListView {
font-size:12px;
max-width:369px;
margin-top:12px;
- margin-left:0px;
-
+ margin-left:0px;
/* CSS Voodoo - set to -66px to hide default transaction icons */
}
/* -------------------SEND DIALOG--------------------- */
-
-
QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures {
/* Coin Control Header */
font-weight:normal;
font-size:14px;
}
-
QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel {
/* Custom Change Address Validation Label */
font-weight:normal;
@@ -751,7 +813,8 @@ QWidget .QFrame#frame_2 QListView {
QDialog#SendCoinsDialog .QPushButton#clearButton {
color: #eb6709;
- background-color: transparent;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
border-color: #eb6709;
}
QDialog#SendCoinsDialog .QPushButton#clearButton:hover {
@@ -764,10 +827,10 @@ QWidget .QFrame#frame_2 QListView {
border-color: #de4e00;
}
QDialog#SendCoinsDialog .QPushButton#addButton {
- /* Add Button */
-
+ /* Add Button */
color: #11c26d;
- background-color: transparent;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
border-color: #11c26d;
padding-left:10px;
padding-right:10px;
@@ -775,12 +838,12 @@ QWidget .QFrame#frame_2 QListView {
QDialog#SendCoinsDialog .QPushButton#addButton:hover {
background-color: #11c26d;
border-color: #11c26d;
- color: #ffffff
+ color: #ffffff;
}
QDialog#SendCoinsDialog .QPushButton#addButton:pressed {
background-color: #11c26d;
border-color: #11c26d;
- color: #ffffff
+ color: #ffffff;
}
QDialog#SendCoinsDialog .QCheckBox#checkUsePrivateSend, QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend {
/* PrivateSend Checkbox */
@@ -794,12 +857,13 @@ QWidget .QFrame#frame_2 QListView {
/* To maximize backwards compatibility this formatting has been removed */
QDialog#SendCoinsDialog QLabel#label {
font-size:14px;
+ color: #ffffff;
}
QDialog#SendCoinsDialog QLabel#labelBalance {
- color:#11c26d;
+ /*color:#11c26d;*/
+ color:#ffffff;
font-size:14px;
}
-
/* -------------------SEND COINS ENTRY--------------------- */
QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel {
@@ -812,7 +876,6 @@ QWidget .QFrame#frame_2 QListView {
}
/* -------------------COIN CONTROL POPUP--------------------- */
-
QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText {
/* Coin Control Quantity Label */
min-height:30px;
@@ -842,7 +905,6 @@ QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText {
/* Coin Control Priority Label */
padding-left:15px;
}
-
QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText {
/* Coin Control Fee Label */
min-height:30px;
@@ -856,7 +918,6 @@ QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText {
/* Coin Control Low Output Label */
padding-left:15px;
}
-
QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText {
/* Coin Control After Fee Label */
min-height:30px;
@@ -870,32 +931,27 @@ QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText {
/* Coin Control Change Label */
padding-left:15px;
}
-
-
- QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
-
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
padding:3px 5px;
- background: #2a2a3d;
+ background: #2e0042;
border-right: 1px solid #3f3f5b;
border-bottom: 1px solid #3f3f5b;
}
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:hover {
+ background: #660099;
+}
QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected {
/* Coin Control Item (selected) */
- background: #20202e;
- color: #3e8ef7
+ background: #2e0042;
+ color: #fff;
}
QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked {
- /* Coin Control Item (checked) */
-
- background: #20202e;
- color: #3e8ef7
+ /* Coin Control Item (checked) */
+ background: #2e0042;
+ color: #fff
}
-
-
/* -------------------RECEIVE COINS--------------------- */
-
-
QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
/* Label Label */
min-width:102px;
@@ -905,7 +961,8 @@ QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton {
/* Clear Button */
color: #eb6709;
- background-color: transparent;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
border-color: #eb6709;
}
QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover {
@@ -920,7 +977,8 @@ QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton {
/* Remove Button */
color: #ff4c52;
- background-color: transparent;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
border-color: #ff4c52;
}
QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover {
@@ -938,7 +996,6 @@ QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
}
/* -------------------TRANSACTIONS PAGE--------------------- */
-
TransactionView QLineEdit {
/* Filters */
margin-bottom:2px;
@@ -970,60 +1027,51 @@ QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
}
/* -------------------Dialog: Open URI--------------------- */
-
QDialog#OpenURIDialog QLabel#label {
/* URI Label */
font-weight:bold;
}
/* -------------------Dialog: Sign / Verify Message--------------------- */
-
QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM,
QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM,
QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM,
QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM {
border-color: #3f3f5b;
margin-left: 8px;
+ color: #ffffff;
}
-
QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM {
- /* Clear Button */
-
+ /* Clear Button */
color: #eb6709;
background-color: transparent;
border-color: #eb6709;
}
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover {
-
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover {
color: #fff;
background-color: #eb6709;
border-color: #eb6709;
}
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed {
-
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed {
border-color: #de4e00;
}
QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM {
- /* Verify Message - Clear Button */
-
+ /* Verify Message - Clear Button */
color: #eb6709;
background-color: transparent;
border-color: #eb6709;
}
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover {
-
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover {
color: #fff;
background-color: #eb6709;
border-color: #eb6709;
}
-QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed {
-
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed {
border-color: #de4e00;
}
-/* Dialog: Send and Receive */
-
+/* Dialog: Send and Receive */
QWidget#AddressBookPage QPushButton#deleteAddress {
/* Delete Address Button */
color: #ff4c52;
@@ -1047,17 +1095,16 @@ QWidget#AddressBookPage QHeaderView::section {
/* Min width for Windows fix */
min-width:260px;
}
-/* SETTINGS MENU */
-/* Encrypt Wallet and Change Passphrase Dialog */
+/*------Encrypt Wallet and Change Passphrase Dialog (in SETTINGS MENU)---------*/
QDialog#AskPassphraseDialog QLabel#passLabel1, QDialog#AskPassphraseDialog QLabel#passLabel2, QDialog#AskPassphraseDialog QLabel#passLabel3 {
qproperty-alignment: 'AlignVCenter | AlignRight';
min-width:170px;
min-height:33px;
/* base width of 25px for QLineEdit, plus padding and border */
}
-/* Options Dialog */
+/*------------Options Dialog--------------- */
QDialog#OptionsDialog QValueComboBox,
QDialog#OptionsDialog QSpinBox,
QDialog#OptionsDialog .QLineEdit,
@@ -1079,88 +1126,81 @@ QDialog#OptionsDialog > QLabel {
QDialog#OptionsDialog QLabel#label_3 {
/* Translations Missing? Label */
- qproperty-alignment: 'AlignVCenter | AlignCenter';
-
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
padding-bottom:8px;
}
QDialog#OptionsDialog QCheckBox {
/* min-height:20px; */
margin-bottom: 4px;
}
-
QDialog#OptionsDialog QGroupBox::title {
padding: 5px 3px;
font-weight: bold;
}
-
/* -------------------Toolbox--------------------- */
QDialog#RPCConsole QWidget#tab_info QLabel#label_11, QDialog#RPCConsole QWidget#tab_info QLabel#label_10 {
- /* Margin between Network and Block Chain headers */
- qproperty-alignment: 'AlignBottom';
- min-height:25px;
- min-width:180px;
-}
-QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading {
- /* Peers Info Header */
- color:#1c75bc;
-}
-QDialog#RPCConsole QPushButton#openDebugLogfileButton {
- max-width:60px;
-}
-QDialog#RPCConsole QTextEdit#messagesWidget {
- /* Console Messages Window */
- border:0;
-}
-QDialog#RPCConsole QLineEdit#lineEdit {
- /* Console Input */
- margin-right:5px;
-}
-QDialog#RPCConsole QPushButton#clearButton {
- /* Console Clear Button */
- background-color:transparent;
- padding-left:10px;
- padding-right:10px;
-}
-QDialog#RPCConsole .QGroupBox #line {
- /* Network In Line */
- background-color:#00ff00;
-}
-QDialog#RPCConsole .QGroupBox #line_2 {
- /* Network Out Line */
- background:#ff3300;
-}
-
-#RPCConsole #fontSmallerButton, #RPCConsole #fontBiggerButton,#RPCConsole #clearButton{
- border-color: #3f3f5b;
- padding: 3px;
-}
-#RPCConsole #promptIcon{
- border: 0;
-}
-
-/* HELP MENU */
-
-
-/* About GeekCash Dialog */
-
-QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 {
- /* About GeekCash Contents */
- margin-left:10px;
-}
-QDialog#AboutDialog QLabel#label_2 {
- /* Margin for About GeekCash text */
- margin-right:10px;
-}
-/* Edit Address Dialog */
-
-QDialog#EditAddressDialog QLabel {
- qproperty-alignment: 'AlignVCenter | AlignRight';
- min-height:27px;
- font-weight:normal;
- padding-right:5px;
-}
-
-
-
+ /* Margin between Network and Block Chain headers */
+ qproperty-alignment: 'AlignBottom';
+ min-height:25px;
+ min-width:180px;
+ }
+ QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading {
+ /* Peers Info Header */
+ color:#2e0042;
+ }
+ QDialog#RPCConsole QPushButton#openDebugLogfileButton {
+ max-width:60px;
+ }
+ QDialog#RPCConsole QTextEdit#messagesWidget {
+ /* Console Messages Window */
+ border:0;
+ }
+ QDialog#RPCConsole QLineEdit#lineEdit {
+ /* Console Input */
+ margin-right:5px;
+ }
+ QDialog#RPCConsole QPushButton#clearButton {
+ /* Console Clear Button */
+ background-color:transparent;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#RPCConsole .QGroupBox #line {
+ /* Network In Line */
+ background-color:#00ff00;
+ }
+ QDialog#RPCConsole .QGroupBox #line_2 {
+ /* Network Out Line */
+ background:#ff3300;
+ }
+
+ #RPCConsole #fontSmallerButton, #RPCConsole #fontBiggerButton,#RPCConsole #clearButton{
+ border-color: #3f3f5b;
+ padding: 3px;
+ }
+ #RPCConsole #promptIcon{
+ border: 0;
+ }
+
+ /* HELP MENU */
+
+ /* About GeekCash Dialog */
+
+ QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 {
+ /* About GeekCash Contents */
+ margin-left:10px;
+ }
+ QDialog#AboutDialog QLabel#label_2 {
+ /* Margin for About GeekCash text */
+ margin-right:10px;
+ }
+ /* Edit Address Dialog */
+
+ QDialog#EditAddressDialog QLabel {
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-height:27px;
+ font-weight:normal;
+ padding-right:5px;
+ }
diff --git a/src/qt/res/css/mosaicco.css b/src/qt/res/css/mosaicco.css
new file mode 100644
index 00000000..bbd54c98
--- /dev/null
+++ b/src/qt/res/css/mosaicco.css
@@ -0,0 +1,1207 @@
+/* Global Styles */
+* {
+ color: #FFFFFF; /* Set default text color to white */
+ font-size: 13px;
+ font-family: Arial, Helvetica, sans-serif;
+ outline: none;
+}
+
+/* Background image (for widget) */
+WalletFrame {
+ border-image: url(':/images/mosaicco/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+}
+
+/* The first layer: Dialogs and Widgets */
+QDialog {
+ background-color: #2e0042;
+ color: #ffffff;
+}
+QWidget {
+ background-color: transparent;
+ color: #ffffff;
+}
+
+/* The second layer: Labels and Buttons */
+QLabel {
+ color: #FFFFFF;
+}
+QPushButton {
+ color: #FFFFFF;
+}
+
+/* The thrid layer: Input fields */
+QLineEdit, QTextEdit, QPlainTextEdit {
+ background-color: #3f005b;
+ color: #FFFFFF;
+}
+
+/* Restore alternating row styles */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #FFFFFF;
+}
+
+QTableView::item {
+ background-color: #2e0042;
+ color: #FFFFFF;
+}
+
+QTableView::item:alternate {
+ background-color: #3f005b;
+}
+
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #FFFFFF;
+}
+
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
+}
+
+.QFrame {
+ background-color: rgba(75, 0, 110, 0.5); /* 50% transparent*/
+ border:0px solid #2e0042;
+ color: #ffffff; /* white text */
+ padding: 5px;
+ border-radius: 4px;
+}
+
+/* Pop up help(tip)*/
+QToolTip{
+ /*color: #856404;*/
+ color: #000;
+ background-color: #fff3cd;
+ border:1px solid #ffeeba;
+ border-radius: 5px;
+}
+/*Html hyperLink color*/
+a, QDialog a, *::Link{
+ color: #11c26d
+}
+
+/* Toolbar */
+QToolBar, QStatusBar {
+ background-color:#2e0042;
+ padding:0;
+ margin:0;
+ border:0px;
+}
+
+/*The second menu*/
+QToolBar > QToolButton {
+ min-height:2.5em;
+ min-width: 8em;
+ padding: 5px 8px;
+ border:0px;
+ margin: 0px;
+ background-color: #2e0042;
+ color: #ffffff;
+
+ }
+ QToolBar > QToolButton:hover{
+ background-color: #660099;
+ }
+ QToolBar > QToolButton:checked {
+ background-color:#660099;
+ font-weight:bold;
+ }
+
+ /* -------------------Main Menu--------------------- */
+QMenuBar {
+ background-color:#2e0042;
+}
+QMenuBar::item {
+ /*padding: 5px;*/
+ background-color:#2e0042;
+ color:#ffffff;
+}
+QMenu {
+ background-color:#2e0042;
+ color:#ffffff;
+ border: 1px solid #3f3f5b;
+ padding: 0;
+ margin: 0;
+}
+QMenu::item:hover {
+ background-color:#4b006e;
+ color: #ffffff
+}
+QMenu::item:selected {
+ background-color:#4b006e;
+ color: #ffffff
+}
+
+ /* -------------------Checkbox--------------------- Not working*/
+QCheckBox {
+ padding: 5px;
+}
+QCheckBox::indicator {
+ width: 16px;
+ height: 16px;
+}
+QCheckBox::indicator:unchecked {
+ image:url(':/images/light/unchecked');
+}
+QCheckBox::indicator:unchecked:hover {
+ image:url(':/images/light/unchecked');
+}
+QCheckBox::indicator:unchecked:pressed {
+ image:url(':/images/light/checked');
+}
+QCheckBox::indicator:checked {
+ image:url(':/images/light/checked');
+}
+QCheckBox::indicator:checked:hover {
+ image:url(':/images/light/checked');
+}
+QCheckBox::indicator:checked:pressed {
+ image:url(':/images/light/unchecked');
+}
+QCheckBox::indicator:indeterminate:hover {
+ image:url(':/images/light/unchecked');
+}
+QCheckBox::indicator:indeterminate:pressed {
+ image:url(':/images/light/checked');
+}
+
+/* -------------------Button--------------------- */
+QPushButton {
+ display: inline-block;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ padding: 8px 14px;
+ border-radius: 4px;
+ color: #fff;
+ background-color: #2e0042;
+ border: 1px solid #ffffff;
+ }
+ QPushButton:hover {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+ QPushButton:focus {
+ border-color: #660099;
+ }
+ QPushButton:pressed {
+ color: #fff;
+ background-color: #330066;
+ border-color: #fff
+ }
+ QPushButton:disabled {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+
+ /* -------------------Textbox--------------------- */
+.QValidatedLineEdit, .QLineEdit, .QTextEdit, QMessageBox, QPlainTextEdit {
+
+ min-height:24px;
+ padding:3px;
+ background-color:#2e0042;
+ border: 1px solid #3f3f5b;
+ color: #ffffff;
+ }
+
+ .QValidatedLineEdit:disabled, .QLineEdit:disabled {
+ /* background-color:#f2f2f2; */
+ background-color: #2e0042;
+ opacity: 0.7;
+ color: #3f3f5b;
+ }
+ .QValidatedLineEdit:focus, .QLineEdit:focus{
+ border-color: #555576;
+ }
+
+ /* -------------------Dropdown, Spinbox--------------------- */
+ QAbstractSpinBox, QSpinBox, QComboBox {
+ /* Dropdown Menus */
+ padding: 3px 5px;
+ min-height:24px;
+ background-color:#2e0042;
+ border: 1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ }
+
+/*
+QComboBox:checked {
+ background:#111111;
+} */
+
+QComboBox::drop-down {
+ width:24px;
+ border:0px;
+}
+QComboBox::down-arrow {
+ border-image: url(':/images/light/drkblue_downArrow') 0 0 0 0 stretch stretch;
+}
+QComboBox QListView {
+ background-color:#2e0042;
+ border:1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ padding-right:1px;
+ padding-left:1px;
+
+}
+
+QComboBox>QListView::item {
+ padding: 5px;
+ color: #0e056ebd;
+}
+
+QComboBox::item:alternate {
+ background:#680f8ebb;
+}
+QComboBox::item:selected {
+ border:0px solid transparent;
+ background:#08675abb;
+ /* color: #ffffff; White text */
+}
+QComboBox::indicator {
+ background-color:transparent;
+ selection-background-color:transparent;
+ color:transparent;
+ selection-color:transparent;
+}
+
+QAbstractSpinBox::down-button, QAbstractSpinBox::up-button{
+ width:20px;
+ height: 15px;
+ background:#2e0042;
+ border: 0;
+}
+QAbstractSpinBox::up-button:pressed, QAbstractSpinBox::down-button:pressed{
+ background:#2e0042;
+}
+
+QAbstractSpinBox::up-button {
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ border-right:1px solid #3f3f5b;
+ border-top:1px solid #3f3f5b;
+}
+
+QAbstractSpinBox::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
+}
+
+QAbstractSpinBox::down-arrow, QAbstractSpinBox::up-arrow{
+ width:12px;
+ height:12px;
+}
+
+QAbstractSpinBox::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
+}
+QAbstractSpinBox::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+}
+
+ /* -------------------Table--------------------- */
+
+QHeaderView::section {
+ /* Table Header Sections */
+ qproperty-alignment:center;
+ background: #2e0042;
+ color: #ffffff; /* White font*/
+ min-height:25px;
+ font-weight:bold;
+ border-top:1px solid #3f3f5b;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
+ padding: 3px 5px;
+ }
+ QHeaderView::section:hover{
+ background: #4b006e;
+ }
+
+ QHeaderView::down-arrow, QHeaderView::up-arrow{
+ width: 14px;
+ height: 14px;
+ margin-right: 3px;
+ }
+ QHeaderView::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+ }
+
+ QHeaderView::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
+ }
+
+/* define QTableView alternating */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
+}
+
+QTableView::item {
+ background-color: #2e0042;
+ color: #ffffff;
+}
+
+QTableView::item:alternate {
+ background-color: #3f005b;
+}
+
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+/* define QTreeView alternating */
+QTreeView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
+}
+
+QTreeView::item {
+ background-color: #2e0042;
+ color: #ffffff;
+}
+
+QTreeView::item:alternate {
+ background-color: #3f005b;
+}
+
+QTreeView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+QTreeView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+ /* -------------------Scrollbar--------------------- */
+QScrollBar {
+ /* Scroll Bar */
+ border:0;
+ background: #2e0042;
+ }
+ QScrollBar:vertical {
+ /* Vertical Scroll Bar Attributes */
+
+ width:6px;
+ margin: 6px 0px 6px 0px;
+ }
+ QScrollBar:horizontal {
+ /* Horizontal Scroll Bar Attributes */
+
+ height:6px;
+ margin: 0px 6px 0px 6px;
+ }
+ QScrollBar::handle:vertical {
+ /* Scroll Bar Slider - vertical */
+ background: #2e0042;
+ min-height:6px;
+ }
+ QScrollBar::handle:horizontal {
+ /* Scroll Bar Slider - horizontal */
+ background: #2e0042;
+ min-width:6px;
+ }
+ QScrollBar::add-page, QScrollBar::sub-page {
+ /* Scroll Bar Background */
+ background:#2e0042;
+ }
+ QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
+ /* Define Arrow Button Dimensions */
+ background-color:#2e0042;
+ /* border: 1px solid #2e0042; */
+ width:6px;
+ height:6px;
+ }
+ QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed {
+ background-color:#2e0042;
+ }
+ QScrollBar::sub-line:vertical {
+ /* Vertical - top button position */
+ subcontrol-position:top;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:vertical {
+ /* Vertical - bottom button position */
+ subcontrol-position:bottom;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::sub-line:horizontal {
+ /* Vertical - left button position */
+ subcontrol-position:left;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:horizontal {
+ /* Vertical - right button position */
+ subcontrol-position:right;
+ subcontrol-origin: margin;
+ }
+ QScrollBar:up-arrow, QScrollBar:down-arrow, QScrollBar:left-arrow, QScrollBar:right-arrow {
+ /* Arrows Icon */
+ width:6px;
+ height:6px;
+ }
+
+/*
+ QScrollBar:up-arrow {
+ image: url(':/images/light/drkblue_upArrow_small');
+ }
+ QScrollBar:down-arrow {
+ image: url(':/images/light/drkblue_downArrow_small');
+ }
+ QScrollBar:left-arrow {
+ image: url(':/images/light/drkblue_leftArrow_small');
+ }
+ QScrollBar:right-arrow {
+ image: url(':/images/light/drkblue_rightArrow_small');
+ } */
+
+
+
+ /* -------------------Tab--------------------- */
+.QTabWidget::pane {
+ border: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab {
+ background-color:#2e0042;
+ padding: 8px 10px;
+ border-top: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:first {
+ border-left: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:last {
+ border-right: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:selected, .QTabWidget QTabBar::tab:hover {
+ background-color:#4b006e;
+ color: #fff;;
+}
+
+/* -------------------MODAL OVERLAY--------------------- */
+QWidget#bgWidget {
+ /* The 'frame' overlaying the overview-page */
+ /*background: rgba(9, 9, 9, 0.6);*/
+ background:#2e0042;
+ }
+ QWidget#bgWidget .QPushButton#warningIcon {
+ width:64px;
+ height:64px;
+ padding:5px;
+ margin-right: 20px;
+ /*background-color:transparent;*/
+ /*background:#2e0042;*/
+ background:rgba(75, 0, 110, 0.5); /* 50%*/
+ color: #ffffff;
+ }
+ QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
+border-image: url(':/images/mosaicco/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+border-top:0px solid #000;
+margin:0;
+padding-top:20px;
+padding-bottom: 20px;
+}
+
+ /* -------------------OVERVIEW SCREEN--------------------- */
+QWidget .QFrame#frameWallet {
+ /* Wallet Balance */
+ max-width: 451px;
+ min-width: 451px;
+ }
+ QWidget .QFrame#frameWallet > .QLabel {
+ min-width:190px;
+ font-weight:normal;
+ min-height:30px;
+ }
+
+ QWidget .QFrame#frameWallet .QLabel#labelWallet {
+ /* Wallet Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ font-size: 14px;
+ height: 35px;
+ max-width: 421px;
+ min-width: 421px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWalletStatus {
+ /* Wallet Sync Status */
+ /* qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:3px; */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelSpendable {
+ /* Spendable Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:12px;
+ margin-left:18px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchonly {
+ /* Watch-only Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalanceText {
+ /* Available Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalance {
+ /* Available Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color:#11c26d;
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchAvailable {
+ /* Watch-only Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelPendingText {
+ /* Pending Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelUnconfirmed {
+ /* Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchPending {
+ /* Watch-only Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmatureText {
+ /* Immature Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmature {
+ /* Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchImmature {
+ /* Watch-only Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ color: #555576
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotalText {
+ /* Total Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ font-size:14px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotal {
+ /* Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:0px;
+ color: #2e0042
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchTotal {
+ /* Watch-only Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:16px;
+ color: #555576
+ }
+
+ QWidget .QFrame#frameWallet #lineSpendableBalance, QWidget .QFrame#frameWallet #lineWatchBalance {
+ border-bottom: 1px dashed #3f3f5b;
+}
+
+
+/* -------------------PRIVATESEND WIDGET--------------------- */
+QWidget .QFrame#framePrivateSend {
+ /* PrivateSend Widget */
+ /* background-color:transparent;*/
+ color: #fff;
+ /*background-color: #660099 ;*/
+ max-width: 451px;
+ min-width: 451px;
+ max-height: 350px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader {
+ /* PrivateSend Header */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ max-width: 421px;
+ min-width: 421px;
+ background-color:transparent;
+ margin-right: 5px;
+ padding-right: 5px;
+ font-weight:normal;
+ font-size:14px;
+ min-height:35px;
+ max-height:35px;
+ }
+ /******************************************************************/
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus {
+ /* PrivateSend Sync Status */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:2px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget {
+ max-width: 451px;
+ max-height: 175px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel {
+ min-width:175px;
+ font-weight:normal;
+ min-height:25px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText {
+ /* PrivateSend Enabled Status Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText {
+ /* PrivateSend Completion Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress {
+ /* PrivateSend Completion */
+ margin-right:43px;
+ text-align: right;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk {
+ background-color: #28a745;
+ width:1px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText {
+ /* PrivateSend Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText {
+ /* PrivateSend Amount and Rounds Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText {
+ /* PrivateSend Submitted Denom Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons {
+ max-width: 451px;
+ }
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage {
+ /* PrivateSend Status Notifications */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ min-width: 288px;
+ min-height: 43px;
+
+ }
+ /* PRIVATESEND BUTTONS */
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo {
+ /* Info Button */
+ color: #fff;
+ background-color: #2e0042;
+ border-color: #2e0042;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover {
+
+ color: #fff;
+ background-color: #4b006e;
+ border-color: #2e0042;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed {
+
+ border-color: #0099b8;
+ }
+
+/* RECENT TRANSACTIONS */
+QWidget .QFrame#frame_2 {
+ /* Transactions Widget */
+ min-width:410px;
+ margin-right:20px;
+ margin-left:0;
+ margin-top:0px;
+
+}
+QWidget .QFrame#frame_2 .QLabel#label_4 {
+ /* Recent Transactions Label */
+ min-width:180px;
+ margin-left:20px;
+ margin-right:5px;
+ padding-right:5px;
+ font-weight:normal;
+ font-size:14px;
+ /* min-height:24px; */
+}
+QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus {
+ /* Recent Transactions Sync Status */
+ qproperty-alignment: 'AlignBottom | AlignRight';
+ min-width:93px;
+ margin-left:16px;
+ margin-right:5px;
+ min-height:16px;
+}
+QWidget .QFrame#frame_2 QListView {
+ /* Transaction List */
+ font-weight:normal;
+ font-size:12px;
+ max-width:369px;
+ margin-top:12px;
+ margin-left:0px;
+ /* CSS Voodoo - set to -66px to hide default transaction icons */
+}
+
+ /* -------------------SEND DIALOG--------------------- */
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures {
+ /* Coin Control Header */
+ font-weight:normal;
+ font-size:14px;
+ }
+
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel {
+ /* Custom Change Address Validation Label */
+ font-weight:normal;
+ qproperty-margin:-6;
+ margin-right:112px;
+ }
+
+ QDialog#SendCoinsDialog .QPushButton#clearButton {
+ color: #eb6709;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:hover {
+
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:pressed {
+ border-color: #de4e00;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton {
+ /* Add Button */
+ color: #11c26d;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #11c26d;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:hover {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:pressed {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog .QCheckBox#checkUsePrivateSend, QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend {
+ /* PrivateSend Checkbox */
+ margin-right: 15px;
+ }
+
+ QDialog#SendCoinsDialog #checkboxSubtractFeeFromAmount{
+ margin-left: 8px;
+ }
+ /* This QLabel uses name = "label" which conflicts with Address Book -> New Address */
+ /* To maximize backwards compatibility this formatting has been removed */
+ QDialog#SendCoinsDialog QLabel#label {
+ font-size:14px;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog QLabel#labelBalance {
+ /*color:#11c26d;*/
+ color:#ffffff;
+ font-size:14px;
+ }
+
+ /* -------------------SEND COINS ENTRY--------------------- */
+ QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel {
+ /* Send Coin Entry Labels */
+ min-width:102px;
+ font-weight:normal;
+ min-height:25px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+/* -------------------COIN CONTROL POPUP--------------------- */
+QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText {
+ /* Coin Control Quantity Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity {
+ /* Coin Control Quantity */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText {
+ /* Coin Control Bytes Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytes {
+ /* Coin Control Bytes */
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText {
+ /* Coin Control Amount Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmount {
+ /* Coin Control Amount */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText {
+ /* Coin Control Priority Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText {
+ /* Coin Control Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFee {
+ /* Coin Control Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText {
+ /* Coin Control Low Output Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText {
+ /* Coin Control After Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee {
+ /* Coin Control After Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText {
+ /* Coin Control Change Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
+ padding:3px 5px;
+ background: #2e0042;
+ border-right: 1px solid #3f3f5b;
+ border-bottom: 1px solid #3f3f5b;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:hover {
+ background: #660099;
+}
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected {
+ /* Coin Control Item (selected) */
+ background: #2e0042;
+ color: #fff;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked {
+ /* Coin Control Item (checked) */
+ background: #2e0042;
+ color: #fff
+ }
+
+/* -------------------RECEIVE COINS--------------------- */
+QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
+ /* Label Label */
+ min-width:102px;
+ padding-right:5px;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton {
+ /* Clear Button */
+ color: #eb6709;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed {
+ border-color: #f2353c;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton {
+ /* Remove Button */
+ color: #ff4c52;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover {
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed {
+ border-color: #f2353c;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 {
+ /* Requested Payments History Label */
+ font-weight:normal;
+ font-size:14px;
+ }
+
+ /* -------------------TRANSACTIONS PAGE--------------------- */
+ TransactionView QLineEdit {
+ /* Filters */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:111px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#addressWidget {
+ /* Address Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:405px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#amountWidget {
+ /* Amount Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ max-width:100px;
+ text-align:center;
+ }
+ TransactionView QComboBox {
+ margin-bottom:1px;
+ margin-right:1px;
+ }
+ QLabel#transactionSumLabel {
+ /* Example of setObjectName for widgets without name */
+ font-weight:bold;
+ }
+
+/* -------------------Dialog: Open URI--------------------- */
+QDialog#OpenURIDialog QLabel#label {
+ /* URI Label */
+ font-weight:bold;
+}
+
+/* -------------------Dialog: Sign / Verify Message--------------------- */
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM {
+ border-color: #3f3f5b;
+ margin-left: 8px;
+ color: #ffffff;
+}
+
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM {
+ /* Clear Button */
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed {
+ border-color: #de4e00;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM {
+ /* Verify Message - Clear Button */
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed {
+ border-color: #de4e00;
+}
+
+/* Dialog: Send and Receive */
+QWidget#AddressBookPage QPushButton#deleteAddress {
+ /* Delete Address Button */
+ color: #ff4c52;
+ background-color: transparent;
+ border-color: #ff4c52;
+}
+QWidget#AddressBookPage QPushButton#deleteAddress:hover {
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
+}
+QWidget#AddressBookPage QPushButton#deleteAddress:pressed {
+ border-color: #f2353c;
+}
+
+QWidget#AddressBookPage #tableView{
+ font-size: 13px;
+}
+
+QWidget#AddressBookPage QHeaderView::section {
+ /* Min width for Windows fix */
+ min-width:260px;
+}
+
+/*------Encrypt Wallet and Change Passphrase Dialog (in SETTINGS MENU)---------*/
+QDialog#AskPassphraseDialog QLabel#passLabel1, QDialog#AskPassphraseDialog QLabel#passLabel2, QDialog#AskPassphraseDialog QLabel#passLabel3 {
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:170px;
+ min-height:33px;
+ /* base width of 25px for QLineEdit, plus padding and border */
+}
+
+/*------------Options Dialog--------------- */
+QDialog#OptionsDialog QValueComboBox,
+QDialog#OptionsDialog QSpinBox,
+QDialog#OptionsDialog .QLineEdit,
+QDialog#OptionsDialog .QValidatedLineEdit {
+ min-height: 24px;
+}
+QDialog#OptionsDialog QValidatedLineEdit, QDialog#OptionsDialog QValidatedLineEdit:disabled, QDialog#OptionsDialog QLineEdit, QDialog#OptionsDialog QLineEdit:disabled {
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ min-height:20px;
+ margin-top:0px;
+ margin-bottom:0px;
+ padding-top:1px;
+ padding-bottom:1px;
+}
+QDialog#OptionsDialog > QLabel {
+ qproperty-alignment: 'AlignVCenter';
+ min-height:20px;
+}
+
+QDialog#OptionsDialog QLabel#label_3 {
+ /* Translations Missing? Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ padding-bottom:8px;
+}
+QDialog#OptionsDialog QCheckBox {
+ /* min-height:20px; */
+ margin-bottom: 4px;
+}
+QDialog#OptionsDialog QGroupBox::title {
+ padding: 5px 3px;
+ font-weight: bold;
+}
+
+/* -------------------Toolbox--------------------- */
+
+QDialog#RPCConsole QWidget#tab_info QLabel#label_11, QDialog#RPCConsole QWidget#tab_info QLabel#label_10 {
+ /* Margin between Network and Block Chain headers */
+ qproperty-alignment: 'AlignBottom';
+ min-height:25px;
+ min-width:180px;
+ }
+ QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading {
+ /* Peers Info Header */
+ color:#2e0042;
+ }
+ QDialog#RPCConsole QPushButton#openDebugLogfileButton {
+ max-width:60px;
+ }
+ QDialog#RPCConsole QTextEdit#messagesWidget {
+ /* Console Messages Window */
+ border:0;
+ }
+ QDialog#RPCConsole QLineEdit#lineEdit {
+ /* Console Input */
+ margin-right:5px;
+ }
+ QDialog#RPCConsole QPushButton#clearButton {
+ /* Console Clear Button */
+ background-color:transparent;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#RPCConsole .QGroupBox #line {
+ /* Network In Line */
+ background-color:#00ff00;
+ }
+ QDialog#RPCConsole .QGroupBox #line_2 {
+ /* Network Out Line */
+ background:#ff3300;
+ }
+
+ #RPCConsole #fontSmallerButton, #RPCConsole #fontBiggerButton,#RPCConsole #clearButton{
+ border-color: #3f3f5b;
+ padding: 3px;
+ }
+ #RPCConsole #promptIcon{
+ border: 0;
+ }
+
+ /* HELP MENU */
+
+
+ /* About GeekCash Dialog */
+
+ QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 {
+ /* About GeekCash Contents */
+ margin-left:10px;
+ }
+ QDialog#AboutDialog QLabel#label_2 {
+ /* Margin for About GeekCash text */
+ margin-right:10px;
+ }
+ /* Edit Address Dialog */
+
+ QDialog#EditAddressDialog QLabel {
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-height:27px;
+ font-weight:normal;
+ padding-right:5px;
+ }
diff --git a/src/qt/res/css/trad.css b/src/qt/res/css/trad.css
index 0937a3f0..1a142503 100644
--- a/src/qt/res/css/trad.css
+++ b/src/qt/res/css/trad.css
@@ -1,22 +1,1208 @@
-/* MODAL OVERLAY */
+/* Global Styles */
+* {
+ color: #FFFFFF; /* Set default text color to white */
+ font-size: 13px;
+ font-family: Arial, Helvetica, sans-serif;
+ outline: none;
+}
+
+/* Background image (for widget) */
+WalletFrame {
+ border-image: url(':/images/trad/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+}
+
+/* The first layer: Dialogs and Widgets */
+QDialog {
+ background-color: #2e0042;
+ color: #ffffff;
+}
+QWidget {
+ background-color: transparent;
+ color: #ffffff;
+}
+
+/* The second layer: Labels and Buttons */
+QLabel {
+ color: #FFFFFF;
+}
+QPushButton {
+ color: #FFFFFF;
+}
+
+/* The thrid layer: Input fields */
+QLineEdit, QTextEdit, QPlainTextEdit {
+ background-color: #3f005b;
+ color: #FFFFFF;
+}
+
+/* Restore alternating row styles */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #FFFFFF;
+}
+
+QTableView::item {
+ background-color: #2e0042;
+ color: #FFFFFF;
+}
+
+QTableView::item:alternate {
+ background-color: #3f005b;
+}
+
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #FFFFFF;
+}
+
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
+}
+
+.QFrame {
+ background-color: rgba(75, 0, 110, 0.5); /* 50% transparent*/
+ border:0px solid #2e0042;
+ color: #ffffff; /* white text */
+ padding: 5px;
+ border-radius: 4px;
+}
+
+/* Pop up help(tip)*/
+QToolTip{
+ /*color: #856404;*/
+ color: #000;
+ background-color: #fff3cd;
+ border:1px solid #ffeeba;
+ border-radius: 5px;
+}
+/*Html hyperLink color*/
+a, QDialog a, *::Link{
+ color: #11c26d
+}
+
+/* Toolbar */
+QToolBar, QStatusBar {
+ background-color:#2e0042;
+ padding:0;
+ margin:0;
+ border:0px;
+}
+
+/*The second menu*/
+QToolBar > QToolButton {
+ min-height:2.5em;
+ min-width: 8em;
+ padding: 5px 8px;
+ border:0px;
+ margin: 0px;
+ background-color: #2e0042;
+ color: #ffffff;
+
+ }
+ QToolBar > QToolButton:hover{
+ background-color: #660099;
+ }
+ QToolBar > QToolButton:checked {
+ background-color:#660099;
+ font-weight:bold;
+ }
+
+ /* -------------------Main Menu--------------------- */
+QMenuBar {
+ background-color:#2e0042;
+}
+QMenuBar::item {
+ /*padding: 5px;*/
+ background-color:#2e0042;
+ color:#ffffff;
+}
+QMenu {
+ background-color:#2e0042;
+ color:#ffffff;
+ border: 1px solid #3f3f5b;
+ padding: 0;
+ margin: 0;
+}
+QMenu::item:hover {
+ background-color:#4b006e;
+ color: #ffffff
+}
+QMenu::item:selected {
+ background-color:#4b006e;
+ color: #ffffff
+}
+
+ /* -------------------Checkbox--------------------- Not working*/
+QCheckBox {
+ padding: 5px;
+}
+QCheckBox::indicator {
+ width: 16px;
+ height: 16px;
+}
+QCheckBox::indicator:unchecked {
+ image:url(':/images/light/unchecked');
+}
+QCheckBox::indicator:unchecked:hover {
+ image:url(':/images/light/unchecked');
+}
+QCheckBox::indicator:unchecked:pressed {
+ image:url(':/images/light/checked');
+}
+QCheckBox::indicator:checked {
+ image:url(':/images/light/checked');
+}
+QCheckBox::indicator:checked:hover {
+ image:url(':/images/light/checked');
+}
+QCheckBox::indicator:checked:pressed {
+ image:url(':/images/light/unchecked');
+}
+QCheckBox::indicator:indeterminate:hover {
+ image:url(':/images/light/unchecked');
+}
+QCheckBox::indicator:indeterminate:pressed {
+ image:url(':/images/light/checked');
+}
+
+/* -------------------Button--------------------- */
+QPushButton {
+ display: inline-block;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ padding: 8px 14px;
+ border-radius: 4px;
+ color: #fff;
+ background-color: #2e0042;
+ border: 1px solid #ffffff;
+ }
+ QPushButton:hover {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+ QPushButton:focus {
+ border-color: #660099;
+ }
+ QPushButton:pressed {
+ color: #fff;
+ background-color: #330066;
+ border-color: #fff
+ }
+ QPushButton:disabled {
+ color: #fff;
+ background-color: #660099;
+ border-color: #ffffff;
+ }
+
+ /* -------------------Textbox--------------------- */
+.QValidatedLineEdit, .QLineEdit, .QTextEdit, QMessageBox, QPlainTextEdit {
+
+ min-height:24px;
+ padding:3px;
+ background-color:#2e0042;
+ border: 1px solid #3f3f5b;
+ color: #ffffff;
+ }
+
+ .QValidatedLineEdit:disabled, .QLineEdit:disabled {
+ /* background-color:#f2f2f2; */
+ background-color: #2e0042;
+ opacity: 0.7;
+ color: #3f3f5b;
+ }
+ .QValidatedLineEdit:focus, .QLineEdit:focus{
+ border-color: #555576;
+ }
+
+ /* -------------------Dropdown, Spinbox--------------------- */
+ QAbstractSpinBox, QSpinBox, QComboBox {
+ /* Dropdown Menus */
+ padding: 3px 5px;
+ min-height:24px;
+ background-color:#2e0042;
+ border: 1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ }
+
+/*
+QComboBox:checked {
+ background:#111111;
+} */
+
+QComboBox::drop-down {
+ width:24px;
+ border:0px;
+}
+QComboBox::down-arrow {
+ border-image: url(':/images/light/drkblue_downArrow') 0 0 0 0 stretch stretch;
+}
+QComboBox QListView {
+ background-color:#2e0042;
+ border:1px solid #3f3f5b;
+ color: #ffffff; /* White text */
+ padding-right:1px;
+ padding-left:1px;
+
+}
+
+QComboBox>QListView::item {
+ padding: 5px;
+ color: #0e056ebd;
+}
+
+QComboBox::item:alternate {
+ background:#680f8ebb;
+}
+QComboBox::item:selected {
+ border:0px solid transparent;
+ background:#08675abb;
+ /* color: #ffffff; White text */
+}
+QComboBox::indicator {
+ background-color:transparent;
+ selection-background-color:transparent;
+ color:transparent;
+ selection-color:transparent;
+}
+
+QAbstractSpinBox::down-button, QAbstractSpinBox::up-button{
+ width:20px;
+ height: 15px;
+ background:#2e0042;
+ border: 0;
+}
+QAbstractSpinBox::up-button:pressed, QAbstractSpinBox::down-button:pressed{
+ background:#2e0042;
+}
+
+QAbstractSpinBox::up-button {
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ border-right:1px solid #3f3f5b;
+ border-top:1px solid #3f3f5b;
+}
+
+QAbstractSpinBox::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
+}
+
+QAbstractSpinBox::down-arrow, QAbstractSpinBox::up-arrow{
+ width:12px;
+ height:12px;
+}
+
+QAbstractSpinBox::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
+}
+QAbstractSpinBox::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+}
+
+ /* -------------------Table--------------------- */
-QWidget#bgWidget { /* The 'frame' overlaying the overview-page */
- background: rgba(0,0,0,220);
+QHeaderView::section {
+ /* Table Header Sections */
+ qproperty-alignment:center;
+ background: #2e0042;
+ color: #ffffff; /* White font*/
+ min-height:25px;
+ font-weight:bold;
+ border-top:1px solid #3f3f5b;
+ border-right:1px solid #3f3f5b;
+ border-bottom:1px solid #3f3f5b;
+ padding: 3px 5px;
+ }
+ QHeaderView::section:hover{
+ background: #4b006e;
+ }
+
+ QHeaderView::down-arrow, QHeaderView::up-arrow{
+ width: 14px;
+ height: 14px;
+ margin-right: 3px;
+ }
+ QHeaderView::down-arrow {
+ image:url(':/images/light/drkblue_downArrow_small');
+ }
+
+ QHeaderView::up-arrow {
+ image:url(':/images/light/drkblue_upArrow_small');
+ }
+
+/* define QTableView alternating */
+QTableView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
+}
+
+QTableView::item {
+ background-color: #2e0042;
+ color: #ffffff;
+}
+
+QTableView::item:alternate {
+ background-color: #3f005b;
+}
+
+QTableView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+QTableView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+/* define QTreeView alternating */
+QTreeView {
+ background-color: #2e0042;
+ alternate-background-color: #3f005b;
+ color: #ffffff;
+}
+
+QTreeView::item {
+ background-color: #2e0042;
+ color: #ffffff;
+}
+
+QTreeView::item:alternate {
+ background-color: #3f005b;
+}
+
+QTreeView::item:selected {
+ background-color: #0e1073;
+ color: #ffffff;
+}
+
+QTreeView::item:alternate:selected {
+ background-color: #0e1073;
+ color: #ffffff;
}
+
+ /* -------------------Scrollbar--------------------- */
+QScrollBar {
+ /* Scroll Bar */
+ border:0;
+ background: #2e0042;
+ }
+ QScrollBar:vertical {
+ /* Vertical Scroll Bar Attributes */
+
+ width:6px;
+ margin: 6px 0px 6px 0px;
+ }
+ QScrollBar:horizontal {
+ /* Horizontal Scroll Bar Attributes */
+
+ height:6px;
+ margin: 0px 6px 0px 6px;
+ }
+ QScrollBar::handle:vertical {
+ /* Scroll Bar Slider - vertical */
+ background: #2e0042;
+ min-height:6px;
+ }
+ QScrollBar::handle:horizontal {
+ /* Scroll Bar Slider - horizontal */
+ background: #2e0042;
+ min-width:6px;
+ }
+ QScrollBar::add-page, QScrollBar::sub-page {
+ /* Scroll Bar Background */
+ background:#2e0042;
+ }
+ QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical, QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal {
+ /* Define Arrow Button Dimensions */
+ background-color:#2e0042;
+ /* border: 1px solid #2e0042; */
+ width:6px;
+ height:6px;
+ }
+ QScrollBar::add-line:vertical:pressed, QScrollBar::sub-line:vertical:pressed, QScrollBar::add-line:horizontal:pressed, QScrollBar::sub-line:horizontal:pressed {
+ background-color:#2e0042;
+ }
+ QScrollBar::sub-line:vertical {
+ /* Vertical - top button position */
+ subcontrol-position:top;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:vertical {
+ /* Vertical - bottom button position */
+ subcontrol-position:bottom;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::sub-line:horizontal {
+ /* Vertical - left button position */
+ subcontrol-position:left;
+ subcontrol-origin: margin;
+ }
+ QScrollBar::add-line:horizontal {
+ /* Vertical - right button position */
+ subcontrol-position:right;
+ subcontrol-origin: margin;
+ }
+ QScrollBar:up-arrow, QScrollBar:down-arrow, QScrollBar:left-arrow, QScrollBar:right-arrow {
+ /* Arrows Icon */
+ width:6px;
+ height:6px;
+ }
+
+/*
+ QScrollBar:up-arrow {
+ image: url(':/images/light/drkblue_upArrow_small');
+ }
+ QScrollBar:down-arrow {
+ image: url(':/images/light/drkblue_downArrow_small');
+ }
+ QScrollBar:left-arrow {
+ image: url(':/images/light/drkblue_leftArrow_small');
+ }
+ QScrollBar:right-arrow {
+ image: url(':/images/light/drkblue_rightArrow_small');
+ } */
+
-QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
- background: rgba(255,255,255,240);
- border-radius: 6px;
+
+ /* -------------------Tab--------------------- */
+.QTabWidget::pane {
+ border: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab {
+ background-color:#2e0042;
+ padding: 8px 10px;
+ border-top: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:first {
+ border-left: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:last {
+ border-right: 1px solid #3f3f5b;
+}
+.QTabWidget QTabBar::tab:selected, .QTabWidget QTabBar::tab:hover {
+ background-color:#4b006e;
+ color: #fff;;
}
-/* SEND DIALOG */
+/* -------------------MODAL OVERLAY--------------------- */
+QWidget#bgWidget {
+ /* The 'frame' overlaying the overview-page */
+ /*background: rgba(9, 9, 9, 0.6);*/
+ background:#2e0042;
+ }
+ QWidget#bgWidget .QPushButton#warningIcon {
+ width:64px;
+ height:64px;
+ padding:5px;
+ margin-right: 20px;
+ /*background-color:transparent;*/
+ /*background:#2e0042;*/
+ background:rgba(75, 0, 110, 0.5); /* 50%*/
+ color: #ffffff;
+ }
+ QWidget#contentWidget { /* The actual content with the text/buttons/etc... */
+border-image: url(':/images/trad/drkblue_walletFrame_bg') 0 0 0 0 stretch stretch;
+border-top:0px solid #000;
+margin:0;
+padding-top:20px;
+padding-bottom: 20px;
+}
-QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend { /* InstantSend Checkbox */
-margin-left:10px;
-margin-right:20px;
+ /* -------------------OVERVIEW SCREEN--------------------- */
+QWidget .QFrame#frameWallet {
+ /* Wallet Balance */
+ max-width: 451px;
+ min-width: 451px;
+ }
+ QWidget .QFrame#frameWallet > .QLabel {
+ min-width:190px;
+ font-weight:normal;
+ min-height:30px;
+ }
+
+ QWidget .QFrame#frameWallet .QLabel#labelWallet {
+ /* Wallet Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ font-size: 14px;
+ height: 35px;
+ max-width: 421px;
+ min-width: 421px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWalletStatus {
+ /* Wallet Sync Status */
+ /* qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:3px; */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ margin-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelSpendable {
+ /* Spendable Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:12px;
+ margin-left:18px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchonly {
+ /* Watch-only Header */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ font-weight: bold;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalanceText {
+ /* Available Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelBalance {
+ /* Available Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color:#11c26d;
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchAvailable {
+ /* Watch-only Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelPendingText {
+ /* Pending Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelUnconfirmed {
+ /* Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchPending {
+ /* Watch-only Pending Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ color: #555576;
+ margin-left:16px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmatureText {
+ /* Immature Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelImmature {
+ /* Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:0px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchImmature {
+ /* Watch-only Immature Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:16px;
+ color: #555576
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotalText {
+ /* Total Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ font-size:14px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelTotal {
+ /* Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:0px;
+ color: #2e0042
+ }
+ QWidget .QFrame#frameWallet .QLabel#labelWatchTotal {
+ /* Watch-only Total Balance */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ font-size:14px;
+ margin-left:16px;
+ color: #555576
+ }
+
+ QWidget .QFrame#frameWallet #lineSpendableBalance, QWidget .QFrame#frameWallet #lineWatchBalance {
+ border-bottom: 1px dashed #3f3f5b;
}
-QDialog#SendCoinsDialog QLabel#labelBalance {
-margin-left:0px;
-padding-left:0px;
+
+/* -------------------PRIVATESEND WIDGET--------------------- */
+QWidget .QFrame#framePrivateSend {
+ /* PrivateSend Widget */
+ /* background-color:transparent;*/
+ color: #fff;
+ /*background-color: #660099 ;*/
+ max-width: 451px;
+ min-width: 451px;
+ max-height: 350px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendHeader {
+ /* PrivateSend Header */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ max-width: 421px;
+ min-width: 421px;
+ background-color:transparent;
+ margin-right: 5px;
+ padding-right: 5px;
+ font-weight:normal;
+ font-size:14px;
+ min-height:35px;
+ max-height:35px;
+ }
+ /******************************************************************/
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendSyncStatus {
+ /* PrivateSend Sync Status */
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ margin-left:2px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget {
+ max-width: 451px;
+ max-height: 175px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget > .QLabel {
+ min-width:175px;
+ font-weight:normal;
+ min-height:25px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelPrivateSendEnabledText {
+ /* PrivateSend Enabled Status Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelCompletitionText {
+ /* PrivateSend Completion Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress {
+ /* PrivateSend Completion */
+ margin-right:43px;
+ text-align: right;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QProgressBar#privateSendProgress::chunk {
+ background-color: #28a745;
+ width:1px;
+ }
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAnonymizedText {
+ /* PrivateSend Balance Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelAmountAndRoundsText {
+ /* PrivateSend Amount and Rounds Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ background-color:#2e0042;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend #privateSendFormLayoutWidget .QLabel#labelSubmittedDenomText {
+ /* PrivateSend Submitted Denom Label */
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:160px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+ QWidget .QFrame#framePrivateSend .QWidget#layoutWidgetLastMessageAndButtons {
+ max-width: 451px;
+ }
+ QWidget .QFrame#framePrivateSend .QLabel#labelPrivateSendLastMessage {
+ /* PrivateSend Status Notifications */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ min-width: 288px;
+ min-height: 43px;
+
+ }
+ /* PRIVATESEND BUTTONS */
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo {
+ /* Info Button */
+ color: #fff;
+ background-color: #2e0042;
+ border-color: #2e0042;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover {
+
+ color: #fff;
+ background-color: #4b006e;
+ border-color: #2e0042;
+ }
+ QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed {
+
+ border-color: #0099b8;
+ }
+
+/* RECENT TRANSACTIONS */
+QWidget .QFrame#frame_2 {
+ /* Transactions Widget */
+ min-width:410px;
+ margin-right:20px;
+ margin-left:0;
+ margin-top:0px;
+
+}
+QWidget .QFrame#frame_2 .QLabel#label_4 {
+ /* Recent Transactions Label */
+ min-width:180px;
+ margin-left:20px;
+ margin-right:5px;
+ padding-right:5px;
+ font-weight:normal;
+ font-size:14px;
+ /* min-height:24px; */
+}
+QWidget .QFrame#frame_2 .QLabel#labelTransactionsStatus {
+ /* Recent Transactions Sync Status */
+ qproperty-alignment: 'AlignBottom | AlignRight';
+ min-width:93px;
+ margin-left:16px;
+ margin-right:5px;
+ min-height:16px;
+}
+QWidget .QFrame#frame_2 QListView {
+ /* Transaction List */
+ font-weight:normal;
+ font-size:12px;
+ max-width:369px;
+ margin-top:12px;
+ margin-left:0px;
+ /* CSS Voodoo - set to -66px to hide default transaction icons */
}
+
+ /* -------------------SEND DIALOG--------------------- */
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlFeatures {
+ /* Coin Control Header */
+ font-weight:normal;
+ font-size:14px;
+ }
+
+ QDialog#SendCoinsDialog .QFrame#frameCoinControl .QLabel#labelCoinControlChangeLabel {
+ /* Custom Change Address Validation Label */
+ font-weight:normal;
+ qproperty-margin:-6;
+ margin-right:112px;
+ }
+
+ QDialog#SendCoinsDialog .QPushButton#clearButton {
+ color: #eb6709;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:hover {
+
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QDialog#SendCoinsDialog .QPushButton#clearButton:pressed {
+ border-color: #de4e00;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton {
+ /* Add Button */
+ color: #11c26d;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #11c26d;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:hover {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog .QPushButton#addButton:pressed {
+ background-color: #11c26d;
+ border-color: #11c26d;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog .QCheckBox#checkUsePrivateSend, QDialog#SendCoinsDialog .QCheckBox#checkUseInstantSend {
+ /* PrivateSend Checkbox */
+ margin-right: 15px;
+ }
+
+ QDialog#SendCoinsDialog #checkboxSubtractFeeFromAmount{
+ margin-left: 8px;
+ }
+ /* This QLabel uses name = "label" which conflicts with Address Book -> New Address */
+ /* To maximize backwards compatibility this formatting has been removed */
+ QDialog#SendCoinsDialog QLabel#label {
+ font-size:14px;
+ color: #ffffff;
+ }
+ QDialog#SendCoinsDialog QLabel#labelBalance {
+ /*color:#11c26d;*/
+ color:#ffffff;
+ font-size:14px;
+ }
+
+ /* -------------------SEND COINS ENTRY--------------------- */
+ QStackedWidget#SendCoinsEntry .QFrame#SendCoins > .QLabel {
+ /* Send Coin Entry Labels */
+ min-width:102px;
+ font-weight:normal;
+ min-height:25px;
+ margin-right:5px;
+ padding-right:5px;
+ }
+
+/* -------------------COIN CONTROL POPUP--------------------- */
+QDialog#CoinControlDialog .QLabel#labelCoinControlQuantityText {
+ /* Coin Control Quantity Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlQuantity {
+ /* Coin Control Quantity */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytesText {
+ /* Coin Control Bytes Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlBytes {
+ /* Coin Control Bytes */
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmountText {
+ /* Coin Control Amount Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAmount {
+ /* Coin Control Amount */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlPriorityText {
+ /* Coin Control Priority Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFeeText {
+ /* Coin Control Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlFee {
+ /* Coin Control Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlLowOutputText {
+ /* Coin Control Low Output Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFeeText {
+ /* Coin Control After Fee Label */
+ min-height:30px;
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlAfterFee {
+ /* Coin Control After Fee */
+ min-height:30px;
+ }
+ QDialog#CoinControlDialog .QLabel#labelCoinControlChangeText {
+ /* Coin Control Change Label */
+ padding-left:15px;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item {
+ padding:3px 5px;
+ background: #2e0042;
+ border-right: 1px solid #3f3f5b;
+ border-bottom: 1px solid #3f3f5b;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:hover {
+ background: #660099;
+}
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:selected {
+ /* Coin Control Item (selected) */
+ background: #2e0042;
+ color: #fff;
+ }
+ QDialog#CoinControlDialog .CoinControlTreeWidget#treeWidget::item:checked {
+ /* Coin Control Item (checked) */
+ background: #2e0042;
+ color: #fff
+ }
+
+/* -------------------RECEIVE COINS--------------------- */
+QWidget#ReceiveCoinsDialog .QFrame#frame2 .QLabel {
+ /* Label Label */
+ min-width:102px;
+ padding-right:5px;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton {
+ /* Clear Button */
+ color: #eb6709;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame2 QPushButton#clearButton:pressed {
+ border-color: #f2353c;
+ }
+
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton {
+ /* Remove Button */
+ color: #ff4c52;
+ /*background-color: transparent;*/
+ background-color:rgba(75, 0, 110, 0.5); /* 50%*/
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:hover {
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame QPushButton#removeRequestButton:pressed {
+ border-color: #f2353c;
+ }
+ QWidget#ReceiveCoinsDialog .QFrame#frame .QLabel#label_6 {
+ /* Requested Payments History Label */
+ font-weight:normal;
+ font-size:14px;
+ }
+
+ /* -------------------TRANSACTIONS PAGE--------------------- */
+ TransactionView QLineEdit {
+ /* Filters */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:111px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#addressWidget {
+ /* Address Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ min-width:405px;
+ text-align:center;
+ }
+ TransactionView QLineEdit#amountWidget {
+ /* Amount Filter */
+ margin-bottom:2px;
+ margin-right:1px;
+ max-width:100px;
+ text-align:center;
+ }
+ TransactionView QComboBox {
+ margin-bottom:1px;
+ margin-right:1px;
+ }
+ QLabel#transactionSumLabel {
+ /* Example of setObjectName for widgets without name */
+ font-weight:bold;
+ }
+
+/* -------------------Dialog: Open URI--------------------- */
+QDialog#OpenURIDialog QLabel#label {
+ /* URI Label */
+ font-weight:bold;
+}
+
+/* -------------------Dialog: Sign / Verify Message--------------------- */
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#pasteButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#copySignatureButton_SM,
+QDialog#SignVerifyMessageDialog QPushButton#addressBookButton_VM {
+ border-color: #3f3f5b;
+ margin-left: 8px;
+ color: #ffffff;
+}
+
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM {
+ /* Clear Button */
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_SM:pressed {
+ border-color: #de4e00;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM {
+ /* Verify Message - Clear Button */
+ color: #eb6709;
+ background-color: transparent;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:hover {
+ color: #fff;
+ background-color: #eb6709;
+ border-color: #eb6709;
+}
+QDialog#SignVerifyMessageDialog QPushButton#clearButton_VM:pressed {
+ border-color: #de4e00;
+}
+
+/* Dialog: Send and Receive */
+QWidget#AddressBookPage QPushButton#deleteAddress {
+ /* Delete Address Button */
+ color: #ff4c52;
+ background-color: transparent;
+ border-color: #ff4c52;
+}
+QWidget#AddressBookPage QPushButton#deleteAddress:hover {
+ color: #fff;
+ background-color: #ff4c52;
+ border-color: #ff4c52;
+}
+QWidget#AddressBookPage QPushButton#deleteAddress:pressed {
+ border-color: #f2353c;
+}
+
+QWidget#AddressBookPage #tableView{
+ font-size: 13px;
+}
+
+QWidget#AddressBookPage QHeaderView::section {
+ /* Min width for Windows fix */
+ min-width:260px;
+}
+
+/*------Encrypt Wallet and Change Passphrase Dialog (in SETTINGS MENU)---------*/
+QDialog#AskPassphraseDialog QLabel#passLabel1, QDialog#AskPassphraseDialog QLabel#passLabel2, QDialog#AskPassphraseDialog QLabel#passLabel3 {
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-width:170px;
+ min-height:33px;
+ /* base width of 25px for QLineEdit, plus padding and border */
+}
+
+/*------------Options Dialog--------------- */
+QDialog#OptionsDialog QValueComboBox,
+QDialog#OptionsDialog QSpinBox,
+QDialog#OptionsDialog .QLineEdit,
+QDialog#OptionsDialog .QValidatedLineEdit {
+ min-height: 24px;
+}
+QDialog#OptionsDialog QValidatedLineEdit, QDialog#OptionsDialog QValidatedLineEdit:disabled, QDialog#OptionsDialog QLineEdit, QDialog#OptionsDialog QLineEdit:disabled {
+ qproperty-alignment: 'AlignVCenter | AlignLeft';
+ min-height:20px;
+ margin-top:0px;
+ margin-bottom:0px;
+ padding-top:1px;
+ padding-bottom:1px;
+}
+QDialog#OptionsDialog > QLabel {
+ qproperty-alignment: 'AlignVCenter';
+ min-height:20px;
+}
+
+QDialog#OptionsDialog QLabel#label_3 {
+ /* Translations Missing? Label */
+ qproperty-alignment: 'AlignVCenter | AlignCenter';
+ padding-bottom:8px;
+}
+QDialog#OptionsDialog QCheckBox {
+ /* min-height:20px; */
+ margin-bottom: 4px;
+}
+QDialog#OptionsDialog QGroupBox::title {
+ padding: 5px 3px;
+ font-weight: bold;
+}
+
+/* -------------------Toolbox--------------------- */
+
+QDialog#RPCConsole QWidget#tab_info QLabel#label_11, QDialog#RPCConsole QWidget#tab_info QLabel#label_10 {
+ /* Margin between Network and Block Chain headers */
+ qproperty-alignment: 'AlignBottom';
+ min-height:25px;
+ min-width:180px;
+ }
+ QDialog#RPCConsole QWidget#tab_peers QLabel#peerHeading {
+ /* Peers Info Header */
+ color:#2e0042;
+ }
+ QDialog#RPCConsole QPushButton#openDebugLogfileButton {
+ max-width:60px;
+ }
+ QDialog#RPCConsole QTextEdit#messagesWidget {
+ /* Console Messages Window */
+ border:0;
+ }
+ QDialog#RPCConsole QLineEdit#lineEdit {
+ /* Console Input */
+ margin-right:5px;
+ }
+ QDialog#RPCConsole QPushButton#clearButton {
+ /* Console Clear Button */
+ background-color:transparent;
+ padding-left:10px;
+ padding-right:10px;
+ }
+ QDialog#RPCConsole .QGroupBox #line {
+ /* Network In Line */
+ background-color:#00ff00;
+ }
+ QDialog#RPCConsole .QGroupBox #line_2 {
+ /* Network Out Line */
+ background:#ff3300;
+ }
+
+ #RPCConsole #fontSmallerButton, #RPCConsole #fontBiggerButton,#RPCConsole #clearButton{
+ border-color: #3f3f5b;
+ padding: 3px;
+ }
+ #RPCConsole #promptIcon{
+ border: 0;
+ }
+
+ /* HELP MENU */
+
+
+ /* About GeekCash Dialog */
+
+ QDialog#AboutDialog QLabel#label, QDialog#AboutDialog QLabel#copyrightLabel, QDialog#AboutDialog QLabel#label_2 {
+ /* About GeekCash Contents */
+ margin-left:10px;
+ }
+ QDialog#AboutDialog QLabel#label_2 {
+ /* Margin for About GeekCash text */
+ margin-right:10px;
+ }
+ /* Edit Address Dialog */
+
+ QDialog#EditAddressDialog QLabel {
+ qproperty-alignment: 'AlignVCenter | AlignRight';
+ min-height:27px;
+ font-weight:normal;
+ padding-right:5px;
+ }
+
\ No newline at end of file
diff --git a/src/qt/res/icons/bitcoin.ico b/src/qt/res/icons/bitcoin.ico
index e0618a38..811006f0 100644
Binary files a/src/qt/res/icons/bitcoin.ico and b/src/qt/res/icons/bitcoin.ico differ
diff --git a/src/qt/res/icons/bitcoin.png b/src/qt/res/icons/bitcoin.png
index 40eb55cd..540d1313 100644
Binary files a/src/qt/res/icons/bitcoin.png and b/src/qt/res/icons/bitcoin.png differ
diff --git a/src/qt/res/icons/bitcoin_testnet.ico b/src/qt/res/icons/bitcoin_testnet.ico
index e0618a38..e6b64590 100644
Binary files a/src/qt/res/icons/bitcoin_testnet.ico and b/src/qt/res/icons/bitcoin_testnet.ico differ
diff --git a/src/qt/res/icons/bitcoin_testnet.png b/src/qt/res/icons/bitcoin_testnet.png
index 40eb55cd..d58169db 100644
Binary files a/src/qt/res/icons/bitcoin_testnet.png and b/src/qt/res/icons/bitcoin_testnet.png differ
diff --git a/src/qt/res/icons/chevron.png b/src/qt/res/icons/chevron.png
index 6460ace6..7ae0a975 100644
Binary files a/src/qt/res/icons/chevron.png and b/src/qt/res/icons/chevron.png differ
diff --git a/src/qt/res/icons/crownium/about.png b/src/qt/res/icons/crownium/about.png
index 8dba8dd8..f939d87d 100644
Binary files a/src/qt/res/icons/crownium/about.png and b/src/qt/res/icons/crownium/about.png differ
diff --git a/src/qt/res/icons/crownium/add.png b/src/qt/res/icons/crownium/add.png
index 9a037152..61391a4e 100644
Binary files a/src/qt/res/icons/crownium/add.png and b/src/qt/res/icons/crownium/add.png differ
diff --git "a/src/qt/res/icons/crownium/address-book - \345\211\257\346\234\254.png" "b/src/qt/res/icons/crownium/address-book - \345\211\257\346\234\254.png"
new file mode 100644
index 00000000..3581220d
Binary files /dev/null and "b/src/qt/res/icons/crownium/address-book - \345\211\257\346\234\254.png" differ
diff --git a/src/qt/res/icons/crownium/address-book.png b/src/qt/res/icons/crownium/address-book.png
index 0569b077..35ad12db 100644
Binary files a/src/qt/res/icons/crownium/address-book.png and b/src/qt/res/icons/crownium/address-book.png differ
diff --git a/src/qt/res/icons/crownium/bitcoin.ico b/src/qt/res/icons/crownium/bitcoin.ico
index e0618a38..811006f0 100644
Binary files a/src/qt/res/icons/crownium/bitcoin.ico and b/src/qt/res/icons/crownium/bitcoin.ico differ
diff --git a/src/qt/res/icons/crownium/bitcoin.png b/src/qt/res/icons/crownium/bitcoin.png
index 40eb55cd..540d1313 100644
Binary files a/src/qt/res/icons/crownium/bitcoin.png and b/src/qt/res/icons/crownium/bitcoin.png differ
diff --git a/src/qt/res/icons/crownium/bitcoin_testnet.ico b/src/qt/res/icons/crownium/bitcoin_testnet.ico
index e0618a38..e6b64590 100644
Binary files a/src/qt/res/icons/crownium/bitcoin_testnet.ico and b/src/qt/res/icons/crownium/bitcoin_testnet.ico differ
diff --git a/src/qt/res/icons/crownium/bitcoin_testnet.png b/src/qt/res/icons/crownium/bitcoin_testnet.png
index 40eb55cd..d58169db 100644
Binary files a/src/qt/res/icons/crownium/bitcoin_testnet.png and b/src/qt/res/icons/crownium/bitcoin_testnet.png differ
diff --git a/src/qt/res/icons/crownium/browse.png b/src/qt/res/icons/crownium/browse.png
index 0032637f..952384d4 100644
Binary files a/src/qt/res/icons/crownium/browse.png and b/src/qt/res/icons/crownium/browse.png differ
diff --git a/src/qt/res/icons/crownium/chevron.png b/src/qt/res/icons/crownium/chevron.png
new file mode 100644
index 00000000..33598692
Binary files /dev/null and b/src/qt/res/icons/crownium/chevron.png differ
diff --git a/src/qt/res/icons/crownium/clock1.png b/src/qt/res/icons/crownium/clock1.png
index 214ac9b9..fa612ea0 100644
Binary files a/src/qt/res/icons/crownium/clock1.png and b/src/qt/res/icons/crownium/clock1.png differ
diff --git a/src/qt/res/icons/crownium/clock2.png b/src/qt/res/icons/crownium/clock2.png
index 5b0dd7af..d059a85e 100644
Binary files a/src/qt/res/icons/crownium/clock2.png and b/src/qt/res/icons/crownium/clock2.png differ
diff --git a/src/qt/res/icons/crownium/clock3.png b/src/qt/res/icons/crownium/clock3.png
index 523139f8..fb9215b6 100644
Binary files a/src/qt/res/icons/crownium/clock3.png and b/src/qt/res/icons/crownium/clock3.png differ
diff --git a/src/qt/res/icons/crownium/clock4.png b/src/qt/res/icons/crownium/clock4.png
index c007f501..cbf38ac9 100644
Binary files a/src/qt/res/icons/crownium/clock4.png and b/src/qt/res/icons/crownium/clock4.png differ
diff --git a/src/qt/res/icons/crownium/clock5.png b/src/qt/res/icons/crownium/clock5.png
index 2d40197a..a7fb13b7 100644
Binary files a/src/qt/res/icons/crownium/clock5.png and b/src/qt/res/icons/crownium/clock5.png differ
diff --git a/src/qt/res/icons/crownium/configure.png b/src/qt/res/icons/crownium/configure.png
index abbbbc27..0db953bc 100644
Binary files a/src/qt/res/icons/crownium/configure.png and b/src/qt/res/icons/crownium/configure.png differ
diff --git a/src/qt/res/icons/crownium/connect0_16.png b/src/qt/res/icons/crownium/connect0_16.png
index c18e0f40..b332eb89 100644
Binary files a/src/qt/res/icons/crownium/connect0_16.png and b/src/qt/res/icons/crownium/connect0_16.png differ
diff --git a/src/qt/res/icons/crownium/connect1_16.png b/src/qt/res/icons/crownium/connect1_16.png
index daeedd51..9d5df154 100644
Binary files a/src/qt/res/icons/crownium/connect1_16.png and b/src/qt/res/icons/crownium/connect1_16.png differ
diff --git a/src/qt/res/icons/crownium/connect2_16.png b/src/qt/res/icons/crownium/connect2_16.png
index bd24b1c3..bbd3c049 100644
Binary files a/src/qt/res/icons/crownium/connect2_16.png and b/src/qt/res/icons/crownium/connect2_16.png differ
diff --git a/src/qt/res/icons/crownium/connect3_16.png b/src/qt/res/icons/crownium/connect3_16.png
index 1c15e12f..2c20384f 100644
Binary files a/src/qt/res/icons/crownium/connect3_16.png and b/src/qt/res/icons/crownium/connect3_16.png differ
diff --git a/src/qt/res/icons/crownium/connect4_16.png b/src/qt/res/icons/crownium/connect4_16.png
index 0eb2b848..7ff31989 100644
Binary files a/src/qt/res/icons/crownium/connect4_16.png and b/src/qt/res/icons/crownium/connect4_16.png differ
diff --git a/src/qt/res/icons/crownium/debugwindow.png b/src/qt/res/icons/crownium/debugwindow.png
index 0a59796f..52a567fb 100644
Binary files a/src/qt/res/icons/crownium/debugwindow.png and b/src/qt/res/icons/crownium/debugwindow.png differ
diff --git a/src/qt/res/icons/crownium/drkblue_address-book.png b/src/qt/res/icons/crownium/drkblue_address-book.png
index 98c273e6..ddd05248 100644
Binary files a/src/qt/res/icons/crownium/drkblue_address-book.png and b/src/qt/res/icons/crownium/drkblue_address-book.png differ
diff --git a/src/qt/res/icons/crownium/drkblue_editcopy.png b/src/qt/res/icons/crownium/drkblue_editcopy.png
index d2201f85..4fc01212 100644
Binary files a/src/qt/res/icons/crownium/drkblue_editcopy.png and b/src/qt/res/icons/crownium/drkblue_editcopy.png differ
diff --git a/src/qt/res/icons/crownium/drkblue_editpaste.png b/src/qt/res/icons/crownium/drkblue_editpaste.png
index 5729b7fb..ec1ac2b9 100644
Binary files a/src/qt/res/icons/crownium/drkblue_editpaste.png and b/src/qt/res/icons/crownium/drkblue_editpaste.png differ
diff --git a/src/qt/res/icons/crownium/drkblue_remove.png b/src/qt/res/icons/crownium/drkblue_remove.png
index be818ef3..c04dc86f 100644
Binary files a/src/qt/res/icons/crownium/drkblue_remove.png and b/src/qt/res/icons/crownium/drkblue_remove.png differ
diff --git a/src/qt/res/icons/crownium/edit.png b/src/qt/res/icons/crownium/edit.png
index 26f424eb..6ed714d9 100644
Binary files a/src/qt/res/icons/crownium/edit.png and b/src/qt/res/icons/crownium/edit.png differ
diff --git a/src/qt/res/icons/crownium/editcopy.png b/src/qt/res/icons/crownium/editcopy.png
index 1dd4bf8f..780fd809 100644
Binary files a/src/qt/res/icons/crownium/editcopy.png and b/src/qt/res/icons/crownium/editcopy.png differ
diff --git a/src/qt/res/icons/crownium/editpaste.png b/src/qt/res/icons/crownium/editpaste.png
index 5ca24e3c..676475b3 100644
Binary files a/src/qt/res/icons/crownium/editpaste.png and b/src/qt/res/icons/crownium/editpaste.png differ
diff --git a/src/qt/res/icons/crownium/export.png b/src/qt/res/icons/crownium/export.png
index a350e288..cf84d3e5 100644
Binary files a/src/qt/res/icons/crownium/export.png and b/src/qt/res/icons/crownium/export.png differ
diff --git a/src/qt/res/icons/crownium/eye.png b/src/qt/res/icons/crownium/eye.png
index 28d8f8a8..44cb7eed 100644
Binary files a/src/qt/res/icons/crownium/eye.png and b/src/qt/res/icons/crownium/eye.png differ
diff --git a/src/qt/res/icons/crownium/eye_minus.png b/src/qt/res/icons/crownium/eye_minus.png
index 1b9555dc..920c710d 100644
Binary files a/src/qt/res/icons/crownium/eye_minus.png and b/src/qt/res/icons/crownium/eye_minus.png differ
diff --git a/src/qt/res/icons/crownium/eye_plus.png b/src/qt/res/icons/crownium/eye_plus.png
index f3d862ea..295266bb 100644
Binary files a/src/qt/res/icons/crownium/eye_plus.png and b/src/qt/res/icons/crownium/eye_plus.png differ
diff --git a/src/qt/res/icons/crownium/filesave.png b/src/qt/res/icons/crownium/filesave.png
index 0032637f..cc0156ff 100644
Binary files a/src/qt/res/icons/crownium/filesave.png and b/src/qt/res/icons/crownium/filesave.png differ
diff --git a/src/qt/res/icons/crownium/fontbigger.png b/src/qt/res/icons/crownium/fontbigger.png
index 64293826..69c73a35 100644
Binary files a/src/qt/res/icons/crownium/fontbigger.png and b/src/qt/res/icons/crownium/fontbigger.png differ
diff --git a/src/qt/res/icons/crownium/fontsmaller.png b/src/qt/res/icons/crownium/fontsmaller.png
index 0f74b7f0..d0abd565 100644
Binary files a/src/qt/res/icons/crownium/fontsmaller.png and b/src/qt/res/icons/crownium/fontsmaller.png differ
diff --git a/src/qt/res/icons/crownium/hd_disabled.png b/src/qt/res/icons/crownium/hd_disabled.png
index b6fce2ea..14c5b6f0 100644
Binary files a/src/qt/res/icons/crownium/hd_disabled.png and b/src/qt/res/icons/crownium/hd_disabled.png differ
diff --git a/src/qt/res/icons/crownium/hd_enabled.png b/src/qt/res/icons/crownium/hd_enabled.png
index c65c8ddc..ae1d4526 100644
Binary files a/src/qt/res/icons/crownium/hd_enabled.png and b/src/qt/res/icons/crownium/hd_enabled.png differ
diff --git a/src/qt/res/icons/crownium/history.png b/src/qt/res/icons/crownium/history.png
index f7f11e71..a059c423 100644
Binary files a/src/qt/res/icons/crownium/history.png and b/src/qt/res/icons/crownium/history.png differ
diff --git a/src/qt/res/icons/crownium/info.png b/src/qt/res/icons/crownium/info.png
new file mode 100644
index 00000000..a23a1e17
Binary files /dev/null and b/src/qt/res/icons/crownium/info.png differ
diff --git a/src/qt/res/icons/crownium/key.png b/src/qt/res/icons/crownium/key.png
index 734f5e43..82ff1c70 100644
Binary files a/src/qt/res/icons/crownium/key.png and b/src/qt/res/icons/crownium/key.png differ
diff --git a/src/qt/res/icons/crownium/lock_closed.png b/src/qt/res/icons/crownium/lock_closed.png
index 0677384a..71d98a97 100644
Binary files a/src/qt/res/icons/crownium/lock_closed.png and b/src/qt/res/icons/crownium/lock_closed.png differ
diff --git a/src/qt/res/icons/crownium/lock_open.png b/src/qt/res/icons/crownium/lock_open.png
index 6711c205..10a5b5df 100644
Binary files a/src/qt/res/icons/crownium/lock_open.png and b/src/qt/res/icons/crownium/lock_open.png differ
diff --git a/src/qt/res/icons/crownium/masternodes-1.png b/src/qt/res/icons/crownium/masternodes-1.png
new file mode 100644
index 00000000..bd236c9a
Binary files /dev/null and b/src/qt/res/icons/crownium/masternodes-1.png differ
diff --git a/src/qt/res/icons/crownium/masternodes-2.png b/src/qt/res/icons/crownium/masternodes-2.png
new file mode 100644
index 00000000..9ecc3980
Binary files /dev/null and b/src/qt/res/icons/crownium/masternodes-2.png differ
diff --git a/src/qt/res/icons/crownium/masternodes.png b/src/qt/res/icons/crownium/masternodes.png
index 206e214a..dab1a3eb 100644
Binary files a/src/qt/res/icons/crownium/masternodes.png and b/src/qt/res/icons/crownium/masternodes.png differ
diff --git a/src/qt/res/icons/crownium/network_disabled.png b/src/qt/res/icons/crownium/network_disabled.png
index 05217e5a..248c9c0e 100644
Binary files a/src/qt/res/icons/crownium/network_disabled.png and b/src/qt/res/icons/crownium/network_disabled.png differ
diff --git a/src/qt/res/icons/crownium/notsynced.png b/src/qt/res/icons/crownium/notsynced.png
index e3326cfe..7302f1ad 100644
Binary files a/src/qt/res/icons/crownium/notsynced.png and b/src/qt/res/icons/crownium/notsynced.png differ
diff --git a/src/qt/res/icons/crownium/open.png b/src/qt/res/icons/crownium/open.png
new file mode 100644
index 00000000..ebf3adf4
Binary files /dev/null and b/src/qt/res/icons/crownium/open.png differ
diff --git a/src/qt/res/icons/crownium/overview.png b/src/qt/res/icons/crownium/overview.png
index 08092a47..3c11d1c7 100644
Binary files a/src/qt/res/icons/crownium/overview.png and b/src/qt/res/icons/crownium/overview.png differ
diff --git a/src/qt/res/icons/crownium/quit.png b/src/qt/res/icons/crownium/quit.png
index 55cb44bb..939685a1 100644
Binary files a/src/qt/res/icons/crownium/quit.png and b/src/qt/res/icons/crownium/quit.png differ
diff --git a/src/qt/res/icons/crownium/receive.png b/src/qt/res/icons/crownium/receive.png
index 157bdf66..adf780f7 100644
Binary files a/src/qt/res/icons/crownium/receive.png and b/src/qt/res/icons/crownium/receive.png differ
diff --git a/src/qt/res/icons/crownium/remove.png b/src/qt/res/icons/crownium/remove.png
index be818ef3..53135a02 100644
Binary files a/src/qt/res/icons/crownium/remove.png and b/src/qt/res/icons/crownium/remove.png differ
diff --git a/src/qt/res/icons/crownium/send.png b/src/qt/res/icons/crownium/send.png
index 70d9dac8..c752689b 100644
Binary files a/src/qt/res/icons/crownium/send.png and b/src/qt/res/icons/crownium/send.png differ
diff --git a/src/qt/res/icons/crownium/server.png b/src/qt/res/icons/crownium/server.png
new file mode 100644
index 00000000..d4fe49ed
Binary files /dev/null and b/src/qt/res/icons/crownium/server.png differ
diff --git a/src/qt/res/icons/crownium/sitemap.png b/src/qt/res/icons/crownium/sitemap.png
new file mode 100644
index 00000000..e0f07d7d
Binary files /dev/null and b/src/qt/res/icons/crownium/sitemap.png differ
diff --git a/src/qt/res/icons/crownium/synced.png b/src/qt/res/icons/crownium/synced.png
index 46f29c3c..1a224f61 100644
Binary files a/src/qt/res/icons/crownium/synced.png and b/src/qt/res/icons/crownium/synced.png differ
diff --git a/src/qt/res/icons/crownium/toolbar.png b/src/qt/res/icons/crownium/toolbar.png
new file mode 100644
index 00000000..78eec6ce
Binary files /dev/null and b/src/qt/res/icons/crownium/toolbar.png differ
diff --git a/src/qt/res/icons/crownium/toolbar_testnet.png b/src/qt/res/icons/crownium/toolbar_testnet.png
new file mode 100644
index 00000000..2905d4e1
Binary files /dev/null and b/src/qt/res/icons/crownium/toolbar_testnet.png differ
diff --git a/src/qt/res/icons/crownium/toolbox.png b/src/qt/res/icons/crownium/toolbox.png
new file mode 100644
index 00000000..12bec870
Binary files /dev/null and b/src/qt/res/icons/crownium/toolbox.png differ
diff --git a/src/qt/res/icons/crownium/transaction0.png b/src/qt/res/icons/crownium/transaction0.png
index 5be287ea..9fffa2be 100644
Binary files a/src/qt/res/icons/crownium/transaction0.png and b/src/qt/res/icons/crownium/transaction0.png differ
diff --git a/src/qt/res/icons/crownium/transaction2.png b/src/qt/res/icons/crownium/transaction2.png
index 5e8e40d7..eb0256c5 100644
Binary files a/src/qt/res/icons/crownium/transaction2.png and b/src/qt/res/icons/crownium/transaction2.png differ
diff --git a/src/qt/res/icons/crownium/transaction_abandoned.png b/src/qt/res/icons/crownium/transaction_abandoned.png
index 0a44de47..bdfe4dad 100644
Binary files a/src/qt/res/icons/crownium/transaction_abandoned.png and b/src/qt/res/icons/crownium/transaction_abandoned.png differ
diff --git a/src/qt/res/icons/crownium/transaction_conflicted.png b/src/qt/res/icons/crownium/transaction_conflicted.png
index 2de05df3..4177791a 100644
Binary files a/src/qt/res/icons/crownium/transaction_conflicted.png and b/src/qt/res/icons/crownium/transaction_conflicted.png differ
diff --git a/src/qt/res/icons/crownium/tx_inout.png b/src/qt/res/icons/crownium/tx_inout.png
index 18acc37d..7c3a6b02 100644
Binary files a/src/qt/res/icons/crownium/tx_inout.png and b/src/qt/res/icons/crownium/tx_inout.png differ
diff --git a/src/qt/res/icons/crownium/tx_input.png b/src/qt/res/icons/crownium/tx_input.png
index 5fbbe18e..770dc860 100644
Binary files a/src/qt/res/icons/crownium/tx_input.png and b/src/qt/res/icons/crownium/tx_input.png differ
diff --git a/src/qt/res/icons/crownium/tx_mined.png b/src/qt/res/icons/crownium/tx_mined.png
index 51fab33c..aa38a6ad 100644
Binary files a/src/qt/res/icons/crownium/tx_mined.png and b/src/qt/res/icons/crownium/tx_mined.png differ
diff --git a/src/qt/res/icons/crownium/tx_output.png b/src/qt/res/icons/crownium/tx_output.png
index 358b5d4a..c10d31c5 100644
Binary files a/src/qt/res/icons/crownium/tx_output.png and b/src/qt/res/icons/crownium/tx_output.png differ
diff --git a/src/qt/res/icons/crownium/verify.png b/src/qt/res/icons/crownium/verify.png
index 0ce42039..692cc317 100644
Binary files a/src/qt/res/icons/crownium/verify.png and b/src/qt/res/icons/crownium/verify.png differ
diff --git a/src/qt/res/icons/crownium/warning.png b/src/qt/res/icons/crownium/warning.png
new file mode 100644
index 00000000..e92fda0d
Binary files /dev/null and b/src/qt/res/icons/crownium/warning.png differ
diff --git a/src/qt/res/icons/drkblue/about.png b/src/qt/res/icons/drkblue/about.png
index 8dba8dd8..f939d87d 100644
Binary files a/src/qt/res/icons/drkblue/about.png and b/src/qt/res/icons/drkblue/about.png differ
diff --git a/src/qt/res/icons/drkblue/add.png b/src/qt/res/icons/drkblue/add.png
index 746f5806..61391a4e 100644
Binary files a/src/qt/res/icons/drkblue/add.png and b/src/qt/res/icons/drkblue/add.png differ
diff --git "a/src/qt/res/icons/drkblue/address-book - \345\211\257\346\234\254.png" "b/src/qt/res/icons/drkblue/address-book - \345\211\257\346\234\254.png"
new file mode 100644
index 00000000..3581220d
Binary files /dev/null and "b/src/qt/res/icons/drkblue/address-book - \345\211\257\346\234\254.png" differ
diff --git a/src/qt/res/icons/drkblue/address-book.png b/src/qt/res/icons/drkblue/address-book.png
index 05bcabde..35ad12db 100644
Binary files a/src/qt/res/icons/drkblue/address-book.png and b/src/qt/res/icons/drkblue/address-book.png differ
diff --git a/src/qt/res/icons/drkblue/bitcoin.ico b/src/qt/res/icons/drkblue/bitcoin.ico
index e0618a38..811006f0 100644
Binary files a/src/qt/res/icons/drkblue/bitcoin.ico and b/src/qt/res/icons/drkblue/bitcoin.ico differ
diff --git a/src/qt/res/icons/drkblue/bitcoin.png b/src/qt/res/icons/drkblue/bitcoin.png
index 40eb55cd..540d1313 100644
Binary files a/src/qt/res/icons/drkblue/bitcoin.png and b/src/qt/res/icons/drkblue/bitcoin.png differ
diff --git a/src/qt/res/icons/drkblue/bitcoin.xcf b/src/qt/res/icons/drkblue/bitcoin.xcf
new file mode 100644
index 00000000..df3a1fa7
Binary files /dev/null and b/src/qt/res/icons/drkblue/bitcoin.xcf differ
diff --git a/src/qt/res/icons/drkblue/bitcoin_testnet.ico b/src/qt/res/icons/drkblue/bitcoin_testnet.ico
index e0618a38..e6b64590 100644
Binary files a/src/qt/res/icons/drkblue/bitcoin_testnet.ico and b/src/qt/res/icons/drkblue/bitcoin_testnet.ico differ
diff --git a/src/qt/res/icons/drkblue/bitcoin_testnet.png b/src/qt/res/icons/drkblue/bitcoin_testnet.png
index 40eb55cd..d58169db 100644
Binary files a/src/qt/res/icons/drkblue/bitcoin_testnet.png and b/src/qt/res/icons/drkblue/bitcoin_testnet.png differ
diff --git a/src/qt/res/icons/drkblue/browse.png b/src/qt/res/icons/drkblue/browse.png
index 0032637f..952384d4 100644
Binary files a/src/qt/res/icons/drkblue/browse.png and b/src/qt/res/icons/drkblue/browse.png differ
diff --git a/src/qt/res/icons/drkblue/chevron.png b/src/qt/res/icons/drkblue/chevron.png
new file mode 100644
index 00000000..33598692
Binary files /dev/null and b/src/qt/res/icons/drkblue/chevron.png differ
diff --git a/src/qt/res/icons/drkblue/clock1.png b/src/qt/res/icons/drkblue/clock1.png
index 214ac9b9..fa612ea0 100644
Binary files a/src/qt/res/icons/drkblue/clock1.png and b/src/qt/res/icons/drkblue/clock1.png differ
diff --git a/src/qt/res/icons/drkblue/clock2.png b/src/qt/res/icons/drkblue/clock2.png
index 5b0dd7af..d059a85e 100644
Binary files a/src/qt/res/icons/drkblue/clock2.png and b/src/qt/res/icons/drkblue/clock2.png differ
diff --git a/src/qt/res/icons/drkblue/clock3.png b/src/qt/res/icons/drkblue/clock3.png
index 523139f8..fb9215b6 100644
Binary files a/src/qt/res/icons/drkblue/clock3.png and b/src/qt/res/icons/drkblue/clock3.png differ
diff --git a/src/qt/res/icons/drkblue/clock4.png b/src/qt/res/icons/drkblue/clock4.png
index c007f501..cbf38ac9 100644
Binary files a/src/qt/res/icons/drkblue/clock4.png and b/src/qt/res/icons/drkblue/clock4.png differ
diff --git a/src/qt/res/icons/drkblue/clock5.png b/src/qt/res/icons/drkblue/clock5.png
index 2d40197a..a7fb13b7 100644
Binary files a/src/qt/res/icons/drkblue/clock5.png and b/src/qt/res/icons/drkblue/clock5.png differ
diff --git a/src/qt/res/icons/drkblue/configure.png b/src/qt/res/icons/drkblue/configure.png
index abbbbc27..0db953bc 100644
Binary files a/src/qt/res/icons/drkblue/configure.png and b/src/qt/res/icons/drkblue/configure.png differ
diff --git a/src/qt/res/icons/drkblue/connect0_16.png b/src/qt/res/icons/drkblue/connect0_16.png
index c18e0f40..b332eb89 100644
Binary files a/src/qt/res/icons/drkblue/connect0_16.png and b/src/qt/res/icons/drkblue/connect0_16.png differ
diff --git a/src/qt/res/icons/drkblue/connect1_16.png b/src/qt/res/icons/drkblue/connect1_16.png
index daeedd51..9d5df154 100644
Binary files a/src/qt/res/icons/drkblue/connect1_16.png and b/src/qt/res/icons/drkblue/connect1_16.png differ
diff --git a/src/qt/res/icons/drkblue/connect2_16.png b/src/qt/res/icons/drkblue/connect2_16.png
index bd24b1c3..bbd3c049 100644
Binary files a/src/qt/res/icons/drkblue/connect2_16.png and b/src/qt/res/icons/drkblue/connect2_16.png differ
diff --git a/src/qt/res/icons/drkblue/connect3_16.png b/src/qt/res/icons/drkblue/connect3_16.png
index 1c15e12f..2c20384f 100644
Binary files a/src/qt/res/icons/drkblue/connect3_16.png and b/src/qt/res/icons/drkblue/connect3_16.png differ
diff --git a/src/qt/res/icons/drkblue/connect4_16.png b/src/qt/res/icons/drkblue/connect4_16.png
index 0eb2b848..7ff31989 100644
Binary files a/src/qt/res/icons/drkblue/connect4_16.png and b/src/qt/res/icons/drkblue/connect4_16.png differ
diff --git a/src/qt/res/icons/drkblue/debugwindow.png b/src/qt/res/icons/drkblue/debugwindow.png
index 0a59796f..52a567fb 100644
Binary files a/src/qt/res/icons/drkblue/debugwindow.png and b/src/qt/res/icons/drkblue/debugwindow.png differ
diff --git a/src/qt/res/icons/drkblue/drkblue_address-book.png b/src/qt/res/icons/drkblue/drkblue_address-book.png
index 1af1f60f..ddd05248 100644
Binary files a/src/qt/res/icons/drkblue/drkblue_address-book.png and b/src/qt/res/icons/drkblue/drkblue_address-book.png differ
diff --git a/src/qt/res/icons/drkblue/drkblue_editcopy.png b/src/qt/res/icons/drkblue/drkblue_editcopy.png
index d2201f85..4fc01212 100644
Binary files a/src/qt/res/icons/drkblue/drkblue_editcopy.png and b/src/qt/res/icons/drkblue/drkblue_editcopy.png differ
diff --git a/src/qt/res/icons/drkblue/drkblue_editpaste.png b/src/qt/res/icons/drkblue/drkblue_editpaste.png
index 317c2ed8..ec1ac2b9 100644
Binary files a/src/qt/res/icons/drkblue/drkblue_editpaste.png and b/src/qt/res/icons/drkblue/drkblue_editpaste.png differ
diff --git a/src/qt/res/icons/drkblue/drkblue_remove.png b/src/qt/res/icons/drkblue/drkblue_remove.png
index 99fd9660..c04dc86f 100644
Binary files a/src/qt/res/icons/drkblue/drkblue_remove.png and b/src/qt/res/icons/drkblue/drkblue_remove.png differ
diff --git a/src/qt/res/icons/drkblue/edit.png b/src/qt/res/icons/drkblue/edit.png
index 3be65327..6ed714d9 100644
Binary files a/src/qt/res/icons/drkblue/edit.png and b/src/qt/res/icons/drkblue/edit.png differ
diff --git a/src/qt/res/icons/light/about.png b/src/qt/res/icons/light/about.png
index 8dba8dd8..f939d87d 100644
Binary files a/src/qt/res/icons/light/about.png and b/src/qt/res/icons/light/about.png differ
diff --git a/src/qt/res/icons/light/add.png b/src/qt/res/icons/light/add.png
index 9a1d3484..61391a4e 100644
Binary files a/src/qt/res/icons/light/add.png and b/src/qt/res/icons/light/add.png differ
diff --git "a/src/qt/res/icons/light/address-book - \345\211\257\346\234\254.png" "b/src/qt/res/icons/light/address-book - \345\211\257\346\234\254.png"
index 235b612f..3581220d 100644
Binary files "a/src/qt/res/icons/light/address-book - \345\211\257\346\234\254.png" and "b/src/qt/res/icons/light/address-book - \345\211\257\346\234\254.png" differ
diff --git a/src/qt/res/icons/light/address-book.png b/src/qt/res/icons/light/address-book.png
index 235b612f..35ad12db 100644
Binary files a/src/qt/res/icons/light/address-book.png and b/src/qt/res/icons/light/address-book.png differ
diff --git a/src/qt/res/icons/light/bitcoin.ico b/src/qt/res/icons/light/bitcoin.ico
index e0618a38..811006f0 100644
Binary files a/src/qt/res/icons/light/bitcoin.ico and b/src/qt/res/icons/light/bitcoin.ico differ
diff --git a/src/qt/res/icons/light/bitcoin.png b/src/qt/res/icons/light/bitcoin.png
index 40eb55cd..540d1313 100644
Binary files a/src/qt/res/icons/light/bitcoin.png and b/src/qt/res/icons/light/bitcoin.png differ
diff --git a/src/qt/res/icons/light/bitcoin_testnet.ico b/src/qt/res/icons/light/bitcoin_testnet.ico
index e0618a38..e6b64590 100644
Binary files a/src/qt/res/icons/light/bitcoin_testnet.ico and b/src/qt/res/icons/light/bitcoin_testnet.ico differ
diff --git a/src/qt/res/icons/light/bitcoin_testnet.png b/src/qt/res/icons/light/bitcoin_testnet.png
index 40eb55cd..d58169db 100644
Binary files a/src/qt/res/icons/light/bitcoin_testnet.png and b/src/qt/res/icons/light/bitcoin_testnet.png differ
diff --git a/src/qt/res/icons/light/browse.png b/src/qt/res/icons/light/browse.png
index 0032637f..952384d4 100644
Binary files a/src/qt/res/icons/light/browse.png and b/src/qt/res/icons/light/browse.png differ
diff --git a/src/qt/res/icons/light/chevron.png b/src/qt/res/icons/light/chevron.png
index 2309fb38..33598692 100644
Binary files a/src/qt/res/icons/light/chevron.png and b/src/qt/res/icons/light/chevron.png differ
diff --git a/src/qt/res/icons/light/clock1.png b/src/qt/res/icons/light/clock1.png
index 51f313d3..fa612ea0 100644
Binary files a/src/qt/res/icons/light/clock1.png and b/src/qt/res/icons/light/clock1.png differ
diff --git a/src/qt/res/icons/light/clock2.png b/src/qt/res/icons/light/clock2.png
index 51f313d3..d059a85e 100644
Binary files a/src/qt/res/icons/light/clock2.png and b/src/qt/res/icons/light/clock2.png differ
diff --git a/src/qt/res/icons/light/clock3.png b/src/qt/res/icons/light/clock3.png
index 5897c9df..fb9215b6 100644
Binary files a/src/qt/res/icons/light/clock3.png and b/src/qt/res/icons/light/clock3.png differ
diff --git a/src/qt/res/icons/light/clock4.png b/src/qt/res/icons/light/clock4.png
index a5bc81d8..cbf38ac9 100644
Binary files a/src/qt/res/icons/light/clock4.png and b/src/qt/res/icons/light/clock4.png differ
diff --git a/src/qt/res/icons/light/clock5.png b/src/qt/res/icons/light/clock5.png
index c6333890..a7fb13b7 100644
Binary files a/src/qt/res/icons/light/clock5.png and b/src/qt/res/icons/light/clock5.png differ
diff --git a/src/qt/res/icons/light/configure.png b/src/qt/res/icons/light/configure.png
index 0cdd63d1..0db953bc 100644
Binary files a/src/qt/res/icons/light/configure.png and b/src/qt/res/icons/light/configure.png differ
diff --git a/src/qt/res/icons/light/connect0_16.png b/src/qt/res/icons/light/connect0_16.png
index 22b972cd..b332eb89 100644
Binary files a/src/qt/res/icons/light/connect0_16.png and b/src/qt/res/icons/light/connect0_16.png differ
diff --git a/src/qt/res/icons/light/connect1_16.png b/src/qt/res/icons/light/connect1_16.png
index 08b440ce..9d5df154 100644
Binary files a/src/qt/res/icons/light/connect1_16.png and b/src/qt/res/icons/light/connect1_16.png differ
diff --git a/src/qt/res/icons/light/connect2_16.png b/src/qt/res/icons/light/connect2_16.png
index d2aac884..bbd3c049 100644
Binary files a/src/qt/res/icons/light/connect2_16.png and b/src/qt/res/icons/light/connect2_16.png differ
diff --git a/src/qt/res/icons/light/connect3_16.png b/src/qt/res/icons/light/connect3_16.png
index a2ffbdb3..2c20384f 100644
Binary files a/src/qt/res/icons/light/connect3_16.png and b/src/qt/res/icons/light/connect3_16.png differ
diff --git a/src/qt/res/icons/light/connect4_16.png b/src/qt/res/icons/light/connect4_16.png
index b1d208ae..7ff31989 100644
Binary files a/src/qt/res/icons/light/connect4_16.png and b/src/qt/res/icons/light/connect4_16.png differ
diff --git a/src/qt/res/icons/light/debugwindow.png b/src/qt/res/icons/light/debugwindow.png
index 023ee86a..52a567fb 100644
Binary files a/src/qt/res/icons/light/debugwindow.png and b/src/qt/res/icons/light/debugwindow.png differ
diff --git a/src/qt/res/icons/light/drkblue_address-book.png b/src/qt/res/icons/light/drkblue_address-book.png
index 235b612f..ddd05248 100644
Binary files a/src/qt/res/icons/light/drkblue_address-book.png and b/src/qt/res/icons/light/drkblue_address-book.png differ
diff --git a/src/qt/res/icons/light/drkblue_editcopy.png b/src/qt/res/icons/light/drkblue_editcopy.png
index 82ab1625..4fc01212 100644
Binary files a/src/qt/res/icons/light/drkblue_editcopy.png and b/src/qt/res/icons/light/drkblue_editcopy.png differ
diff --git a/src/qt/res/icons/light/drkblue_editpaste.png b/src/qt/res/icons/light/drkblue_editpaste.png
index 82ab1625..ec1ac2b9 100644
Binary files a/src/qt/res/icons/light/drkblue_editpaste.png and b/src/qt/res/icons/light/drkblue_editpaste.png differ
diff --git a/src/qt/res/icons/light/drkblue_remove.png b/src/qt/res/icons/light/drkblue_remove.png
index 858ecb39..c04dc86f 100644
Binary files a/src/qt/res/icons/light/drkblue_remove.png and b/src/qt/res/icons/light/drkblue_remove.png differ
diff --git a/src/qt/res/icons/light/edit.png b/src/qt/res/icons/light/edit.png
index 82ab1625..6ed714d9 100644
Binary files a/src/qt/res/icons/light/edit.png and b/src/qt/res/icons/light/edit.png differ
diff --git a/src/qt/res/icons/light/editcopy.png b/src/qt/res/icons/light/editcopy.png
index 82ab1625..780fd809 100644
Binary files a/src/qt/res/icons/light/editcopy.png and b/src/qt/res/icons/light/editcopy.png differ
diff --git a/src/qt/res/icons/light/editpaste.png b/src/qt/res/icons/light/editpaste.png
index 82ab1625..676475b3 100644
Binary files a/src/qt/res/icons/light/editpaste.png and b/src/qt/res/icons/light/editpaste.png differ
diff --git a/src/qt/res/icons/light/export.png b/src/qt/res/icons/light/export.png
index 6346da2c..cf84d3e5 100644
Binary files a/src/qt/res/icons/light/export.png and b/src/qt/res/icons/light/export.png differ
diff --git a/src/qt/res/icons/light/eye.png b/src/qt/res/icons/light/eye.png
index 1b194008..44cb7eed 100644
Binary files a/src/qt/res/icons/light/eye.png and b/src/qt/res/icons/light/eye.png differ
diff --git a/src/qt/res/icons/light/eye_minus.png b/src/qt/res/icons/light/eye_minus.png
index 77790551..920c710d 100644
Binary files a/src/qt/res/icons/light/eye_minus.png and b/src/qt/res/icons/light/eye_minus.png differ
diff --git a/src/qt/res/icons/light/eye_plus.png b/src/qt/res/icons/light/eye_plus.png
index 2eed2d53..295266bb 100644
Binary files a/src/qt/res/icons/light/eye_plus.png and b/src/qt/res/icons/light/eye_plus.png differ
diff --git a/src/qt/res/icons/light/filesave.png b/src/qt/res/icons/light/filesave.png
index 0032637f..cc0156ff 100644
Binary files a/src/qt/res/icons/light/filesave.png and b/src/qt/res/icons/light/filesave.png differ
diff --git a/src/qt/res/icons/light/fontbigger.png b/src/qt/res/icons/light/fontbigger.png
index 03c746de..69c73a35 100644
Binary files a/src/qt/res/icons/light/fontbigger.png and b/src/qt/res/icons/light/fontbigger.png differ
diff --git a/src/qt/res/icons/light/fontsmaller.png b/src/qt/res/icons/light/fontsmaller.png
index efea398f..d0abd565 100644
Binary files a/src/qt/res/icons/light/fontsmaller.png and b/src/qt/res/icons/light/fontsmaller.png differ
diff --git a/src/qt/res/icons/light/hd_disabled.png b/src/qt/res/icons/light/hd_disabled.png
index 15cee6d4..14c5b6f0 100644
Binary files a/src/qt/res/icons/light/hd_disabled.png and b/src/qt/res/icons/light/hd_disabled.png differ
diff --git a/src/qt/res/icons/light/hd_enabled.png b/src/qt/res/icons/light/hd_enabled.png
index ef9cb609..ae1d4526 100644
Binary files a/src/qt/res/icons/light/hd_enabled.png and b/src/qt/res/icons/light/hd_enabled.png differ
diff --git a/src/qt/res/icons/light/history.png b/src/qt/res/icons/light/history.png
index 8516a90a..a059c423 100644
Binary files a/src/qt/res/icons/light/history.png and b/src/qt/res/icons/light/history.png differ
diff --git a/src/qt/res/icons/light/info.png b/src/qt/res/icons/light/info.png
index 692b50c2..a23a1e17 100644
Binary files a/src/qt/res/icons/light/info.png and b/src/qt/res/icons/light/info.png differ
diff --git a/src/qt/res/icons/light/key.png b/src/qt/res/icons/light/key.png
index 26654e39..82ff1c70 100644
Binary files a/src/qt/res/icons/light/key.png and b/src/qt/res/icons/light/key.png differ
diff --git a/src/qt/res/icons/light/lock_closed.png b/src/qt/res/icons/light/lock_closed.png
index 4faa5445..71d98a97 100644
Binary files a/src/qt/res/icons/light/lock_closed.png and b/src/qt/res/icons/light/lock_closed.png differ
diff --git a/src/qt/res/icons/light/lock_open.png b/src/qt/res/icons/light/lock_open.png
index cf9816c2..10a5b5df 100644
Binary files a/src/qt/res/icons/light/lock_open.png and b/src/qt/res/icons/light/lock_open.png differ
diff --git a/src/qt/res/icons/light/masternodes-1.png b/src/qt/res/icons/light/masternodes-1.png
index f67c8061..bd236c9a 100644
Binary files a/src/qt/res/icons/light/masternodes-1.png and b/src/qt/res/icons/light/masternodes-1.png differ
diff --git a/src/qt/res/icons/light/masternodes-2.png b/src/qt/res/icons/light/masternodes-2.png
index b5ad147f..9ecc3980 100644
Binary files a/src/qt/res/icons/light/masternodes-2.png and b/src/qt/res/icons/light/masternodes-2.png differ
diff --git a/src/qt/res/icons/light/masternodes.png b/src/qt/res/icons/light/masternodes.png
index cf2569fc..dab1a3eb 100644
Binary files a/src/qt/res/icons/light/masternodes.png and b/src/qt/res/icons/light/masternodes.png differ
diff --git a/src/qt/res/icons/light/network_disabled.png b/src/qt/res/icons/light/network_disabled.png
index 3e6651f7..248c9c0e 100644
Binary files a/src/qt/res/icons/light/network_disabled.png and b/src/qt/res/icons/light/network_disabled.png differ
diff --git a/src/qt/res/icons/light/notsynced.png b/src/qt/res/icons/light/notsynced.png
index e3326cfe..7302f1ad 100644
Binary files a/src/qt/res/icons/light/notsynced.png and b/src/qt/res/icons/light/notsynced.png differ
diff --git a/src/qt/res/icons/light/open.png b/src/qt/res/icons/light/open.png
index 4d958f0e..ebf3adf4 100644
Binary files a/src/qt/res/icons/light/open.png and b/src/qt/res/icons/light/open.png differ
diff --git a/src/qt/res/icons/light/overview.png b/src/qt/res/icons/light/overview.png
index 5265bd0e..3c11d1c7 100644
Binary files a/src/qt/res/icons/light/overview.png and b/src/qt/res/icons/light/overview.png differ
diff --git a/src/qt/res/icons/light/receive.png b/src/qt/res/icons/light/receive.png
index f6dcc477..adf780f7 100644
Binary files a/src/qt/res/icons/light/receive.png and b/src/qt/res/icons/light/receive.png differ
diff --git a/src/qt/res/icons/light/remove.png b/src/qt/res/icons/light/remove.png
index 858ecb39..53135a02 100644
Binary files a/src/qt/res/icons/light/remove.png and b/src/qt/res/icons/light/remove.png differ
diff --git a/src/qt/res/icons/light/send.png b/src/qt/res/icons/light/send.png
index f741c7c2..c752689b 100644
Binary files a/src/qt/res/icons/light/send.png and b/src/qt/res/icons/light/send.png differ
diff --git a/src/qt/res/icons/light/server.png b/src/qt/res/icons/light/server.png
index 023ee86a..d4fe49ed 100644
Binary files a/src/qt/res/icons/light/server.png and b/src/qt/res/icons/light/server.png differ
diff --git a/src/qt/res/icons/light/sitemap.png b/src/qt/res/icons/light/sitemap.png
index bc3fe7b8..e0f07d7d 100644
Binary files a/src/qt/res/icons/light/sitemap.png and b/src/qt/res/icons/light/sitemap.png differ
diff --git a/src/qt/res/icons/light/synced.png b/src/qt/res/icons/light/synced.png
index b7910508..1a224f61 100644
Binary files a/src/qt/res/icons/light/synced.png and b/src/qt/res/icons/light/synced.png differ
diff --git a/src/qt/res/icons/light/toolbar.png b/src/qt/res/icons/light/toolbar.png
index 556eeb48..78eec6ce 100644
Binary files a/src/qt/res/icons/light/toolbar.png and b/src/qt/res/icons/light/toolbar.png differ
diff --git a/src/qt/res/icons/light/toolbar_testnet.png b/src/qt/res/icons/light/toolbar_testnet.png
index 6809da71..2905d4e1 100644
Binary files a/src/qt/res/icons/light/toolbar_testnet.png and b/src/qt/res/icons/light/toolbar_testnet.png differ
diff --git a/src/qt/res/icons/light/toolbox.png b/src/qt/res/icons/light/toolbox.png
index f37c49a0..12bec870 100644
Binary files a/src/qt/res/icons/light/toolbox.png and b/src/qt/res/icons/light/toolbox.png differ
diff --git a/src/qt/res/icons/light/transaction0.png b/src/qt/res/icons/light/transaction0.png
index 30f0400a..9fffa2be 100644
Binary files a/src/qt/res/icons/light/transaction0.png and b/src/qt/res/icons/light/transaction0.png differ
diff --git a/src/qt/res/icons/light/transaction2.png b/src/qt/res/icons/light/transaction2.png
index b7910508..eb0256c5 100644
Binary files a/src/qt/res/icons/light/transaction2.png and b/src/qt/res/icons/light/transaction2.png differ
diff --git a/src/qt/res/icons/light/tx_inout.png b/src/qt/res/icons/light/tx_inout.png
index d9304298..7c3a6b02 100644
Binary files a/src/qt/res/icons/light/tx_inout.png and b/src/qt/res/icons/light/tx_inout.png differ
diff --git a/src/qt/res/icons/light/tx_input.png b/src/qt/res/icons/light/tx_input.png
index cb6cb1b8..770dc860 100644
Binary files a/src/qt/res/icons/light/tx_input.png and b/src/qt/res/icons/light/tx_input.png differ
diff --git a/src/qt/res/icons/light/tx_mined.png b/src/qt/res/icons/light/tx_mined.png
index b2ceca27..aa38a6ad 100644
Binary files a/src/qt/res/icons/light/tx_mined.png and b/src/qt/res/icons/light/tx_mined.png differ
diff --git a/src/qt/res/icons/light/tx_output.png b/src/qt/res/icons/light/tx_output.png
index 00a3a25c..c10d31c5 100644
Binary files a/src/qt/res/icons/light/tx_output.png and b/src/qt/res/icons/light/tx_output.png differ
diff --git a/src/qt/res/icons/light/verify.png b/src/qt/res/icons/light/verify.png
index a4ab9815..692cc317 100644
Binary files a/src/qt/res/icons/light/verify.png and b/src/qt/res/icons/light/verify.png differ
diff --git a/src/qt/res/icons/light/warning.png b/src/qt/res/icons/light/warning.png
index 6bc5ac78..e92fda0d 100644
Binary files a/src/qt/res/icons/light/warning.png and b/src/qt/res/icons/light/warning.png differ
diff --git a/src/qt/res/icons/mosaicco/about.png b/src/qt/res/icons/mosaicco/about.png
new file mode 100644
index 00000000..f939d87d
Binary files /dev/null and b/src/qt/res/icons/mosaicco/about.png differ
diff --git a/src/qt/res/icons/mosaicco/about_qt.png b/src/qt/res/icons/mosaicco/about_qt.png
new file mode 100644
index 00000000..c95be013
Binary files /dev/null and b/src/qt/res/icons/mosaicco/about_qt.png differ
diff --git a/src/qt/res/icons/mosaicco/add.png b/src/qt/res/icons/mosaicco/add.png
new file mode 100644
index 00000000..61391a4e
Binary files /dev/null and b/src/qt/res/icons/mosaicco/add.png differ
diff --git "a/src/qt/res/icons/mosaicco/address-book - \345\211\257\346\234\254.png" "b/src/qt/res/icons/mosaicco/address-book - \345\211\257\346\234\254.png"
new file mode 100644
index 00000000..3581220d
Binary files /dev/null and "b/src/qt/res/icons/mosaicco/address-book - \345\211\257\346\234\254.png" differ
diff --git a/src/qt/res/icons/mosaicco/address-book.png b/src/qt/res/icons/mosaicco/address-book.png
new file mode 100644
index 00000000..35ad12db
Binary files /dev/null and b/src/qt/res/icons/mosaicco/address-book.png differ
diff --git a/src/qt/res/icons/mosaicco/bitcoin.ico b/src/qt/res/icons/mosaicco/bitcoin.ico
new file mode 100644
index 00000000..811006f0
Binary files /dev/null and b/src/qt/res/icons/mosaicco/bitcoin.ico differ
diff --git a/src/qt/res/icons/mosaicco/bitcoin.png b/src/qt/res/icons/mosaicco/bitcoin.png
new file mode 100644
index 00000000..540d1313
Binary files /dev/null and b/src/qt/res/icons/mosaicco/bitcoin.png differ
diff --git a/src/qt/res/icons/mosaicco/bitcoin.xcf b/src/qt/res/icons/mosaicco/bitcoin.xcf
new file mode 100644
index 00000000..df3a1fa7
Binary files /dev/null and b/src/qt/res/icons/mosaicco/bitcoin.xcf differ
diff --git a/src/qt/res/icons/mosaicco/bitcoin_testnet.ico b/src/qt/res/icons/mosaicco/bitcoin_testnet.ico
new file mode 100644
index 00000000..e6b64590
Binary files /dev/null and b/src/qt/res/icons/mosaicco/bitcoin_testnet.ico differ
diff --git a/src/qt/res/icons/mosaicco/bitcoin_testnet.png b/src/qt/res/icons/mosaicco/bitcoin_testnet.png
new file mode 100644
index 00000000..d58169db
Binary files /dev/null and b/src/qt/res/icons/mosaicco/bitcoin_testnet.png differ
diff --git a/src/qt/res/icons/mosaicco/browse.png b/src/qt/res/icons/mosaicco/browse.png
new file mode 100644
index 00000000..952384d4
Binary files /dev/null and b/src/qt/res/icons/mosaicco/browse.png differ
diff --git a/src/qt/res/icons/mosaicco/chevron.png b/src/qt/res/icons/mosaicco/chevron.png
new file mode 100644
index 00000000..33598692
Binary files /dev/null and b/src/qt/res/icons/mosaicco/chevron.png differ
diff --git a/src/qt/res/icons/mosaicco/clock1.png b/src/qt/res/icons/mosaicco/clock1.png
new file mode 100644
index 00000000..fa612ea0
Binary files /dev/null and b/src/qt/res/icons/mosaicco/clock1.png differ
diff --git a/src/qt/res/icons/mosaicco/clock2.png b/src/qt/res/icons/mosaicco/clock2.png
new file mode 100644
index 00000000..d059a85e
Binary files /dev/null and b/src/qt/res/icons/mosaicco/clock2.png differ
diff --git a/src/qt/res/icons/mosaicco/clock3.png b/src/qt/res/icons/mosaicco/clock3.png
new file mode 100644
index 00000000..fb9215b6
Binary files /dev/null and b/src/qt/res/icons/mosaicco/clock3.png differ
diff --git a/src/qt/res/icons/mosaicco/clock4.png b/src/qt/res/icons/mosaicco/clock4.png
new file mode 100644
index 00000000..cbf38ac9
Binary files /dev/null and b/src/qt/res/icons/mosaicco/clock4.png differ
diff --git a/src/qt/res/icons/mosaicco/clock5.png b/src/qt/res/icons/mosaicco/clock5.png
new file mode 100644
index 00000000..a7fb13b7
Binary files /dev/null and b/src/qt/res/icons/mosaicco/clock5.png differ
diff --git a/src/qt/res/icons/mosaicco/configure.png b/src/qt/res/icons/mosaicco/configure.png
new file mode 100644
index 00000000..0db953bc
Binary files /dev/null and b/src/qt/res/icons/mosaicco/configure.png differ
diff --git a/src/qt/res/icons/mosaicco/connect0_16.png b/src/qt/res/icons/mosaicco/connect0_16.png
new file mode 100644
index 00000000..b332eb89
Binary files /dev/null and b/src/qt/res/icons/mosaicco/connect0_16.png differ
diff --git a/src/qt/res/icons/mosaicco/connect1_16.png b/src/qt/res/icons/mosaicco/connect1_16.png
new file mode 100644
index 00000000..9d5df154
Binary files /dev/null and b/src/qt/res/icons/mosaicco/connect1_16.png differ
diff --git a/src/qt/res/icons/mosaicco/connect2_16.png b/src/qt/res/icons/mosaicco/connect2_16.png
new file mode 100644
index 00000000..bbd3c049
Binary files /dev/null and b/src/qt/res/icons/mosaicco/connect2_16.png differ
diff --git a/src/qt/res/icons/mosaicco/connect3_16.png b/src/qt/res/icons/mosaicco/connect3_16.png
new file mode 100644
index 00000000..2c20384f
Binary files /dev/null and b/src/qt/res/icons/mosaicco/connect3_16.png differ
diff --git a/src/qt/res/icons/mosaicco/connect4_16.png b/src/qt/res/icons/mosaicco/connect4_16.png
new file mode 100644
index 00000000..7ff31989
Binary files /dev/null and b/src/qt/res/icons/mosaicco/connect4_16.png differ
diff --git a/src/qt/res/icons/mosaicco/debugwindow.png b/src/qt/res/icons/mosaicco/debugwindow.png
new file mode 100644
index 00000000..52a567fb
Binary files /dev/null and b/src/qt/res/icons/mosaicco/debugwindow.png differ
diff --git a/src/qt/res/icons/mosaicco/drkblue_address-book.png b/src/qt/res/icons/mosaicco/drkblue_address-book.png
new file mode 100644
index 00000000..ddd05248
Binary files /dev/null and b/src/qt/res/icons/mosaicco/drkblue_address-book.png differ
diff --git a/src/qt/res/icons/mosaicco/drkblue_editcopy.png b/src/qt/res/icons/mosaicco/drkblue_editcopy.png
new file mode 100644
index 00000000..4fc01212
Binary files /dev/null and b/src/qt/res/icons/mosaicco/drkblue_editcopy.png differ
diff --git a/src/qt/res/icons/mosaicco/drkblue_editpaste.png b/src/qt/res/icons/mosaicco/drkblue_editpaste.png
new file mode 100644
index 00000000..ec1ac2b9
Binary files /dev/null and b/src/qt/res/icons/mosaicco/drkblue_editpaste.png differ
diff --git a/src/qt/res/icons/mosaicco/drkblue_remove.png b/src/qt/res/icons/mosaicco/drkblue_remove.png
new file mode 100644
index 00000000..c04dc86f
Binary files /dev/null and b/src/qt/res/icons/mosaicco/drkblue_remove.png differ
diff --git a/src/qt/res/icons/mosaicco/edit.png b/src/qt/res/icons/mosaicco/edit.png
new file mode 100644
index 00000000..6ed714d9
Binary files /dev/null and b/src/qt/res/icons/mosaicco/edit.png differ
diff --git a/src/qt/res/icons/mosaicco/editcopy.png b/src/qt/res/icons/mosaicco/editcopy.png
new file mode 100644
index 00000000..1dd4bf8f
Binary files /dev/null and b/src/qt/res/icons/mosaicco/editcopy.png differ
diff --git a/src/qt/res/icons/mosaicco/editpaste.png b/src/qt/res/icons/mosaicco/editpaste.png
new file mode 100644
index 00000000..55aa8583
Binary files /dev/null and b/src/qt/res/icons/mosaicco/editpaste.png differ
diff --git a/src/qt/res/icons/mosaicco/export.png b/src/qt/res/icons/mosaicco/export.png
new file mode 100644
index 00000000..6346da2c
Binary files /dev/null and b/src/qt/res/icons/mosaicco/export.png differ
diff --git a/src/qt/res/icons/mosaicco/eye.png b/src/qt/res/icons/mosaicco/eye.png
new file mode 100644
index 00000000..28d8f8a8
Binary files /dev/null and b/src/qt/res/icons/mosaicco/eye.png differ
diff --git a/src/qt/res/icons/mosaicco/eye_minus.png b/src/qt/res/icons/mosaicco/eye_minus.png
new file mode 100644
index 00000000..1b9555dc
Binary files /dev/null and b/src/qt/res/icons/mosaicco/eye_minus.png differ
diff --git a/src/qt/res/icons/mosaicco/eye_plus.png b/src/qt/res/icons/mosaicco/eye_plus.png
new file mode 100644
index 00000000..f3d862ea
Binary files /dev/null and b/src/qt/res/icons/mosaicco/eye_plus.png differ
diff --git a/src/qt/res/icons/mosaicco/filesave.png b/src/qt/res/icons/mosaicco/filesave.png
new file mode 100644
index 00000000..0032637f
Binary files /dev/null and b/src/qt/res/icons/mosaicco/filesave.png differ
diff --git a/src/qt/res/icons/mosaicco/fontbigger.png b/src/qt/res/icons/mosaicco/fontbigger.png
new file mode 100644
index 00000000..64293826
Binary files /dev/null and b/src/qt/res/icons/mosaicco/fontbigger.png differ
diff --git a/src/qt/res/icons/mosaicco/fontsmaller.png b/src/qt/res/icons/mosaicco/fontsmaller.png
new file mode 100644
index 00000000..0f74b7f0
Binary files /dev/null and b/src/qt/res/icons/mosaicco/fontsmaller.png differ
diff --git a/src/qt/res/icons/mosaicco/hd_disabled.png b/src/qt/res/icons/mosaicco/hd_disabled.png
new file mode 100644
index 00000000..b6fce2ea
Binary files /dev/null and b/src/qt/res/icons/mosaicco/hd_disabled.png differ
diff --git a/src/qt/res/icons/mosaicco/hd_enabled.png b/src/qt/res/icons/mosaicco/hd_enabled.png
new file mode 100644
index 00000000..c65c8ddc
Binary files /dev/null and b/src/qt/res/icons/mosaicco/hd_enabled.png differ
diff --git a/src/qt/res/icons/mosaicco/history.png b/src/qt/res/icons/mosaicco/history.png
new file mode 100644
index 00000000..a43d9521
Binary files /dev/null and b/src/qt/res/icons/mosaicco/history.png differ
diff --git a/src/qt/res/icons/mosaicco/key.png b/src/qt/res/icons/mosaicco/key.png
new file mode 100644
index 00000000..734f5e43
Binary files /dev/null and b/src/qt/res/icons/mosaicco/key.png differ
diff --git a/src/qt/res/icons/mosaicco/lock_closed.png b/src/qt/res/icons/mosaicco/lock_closed.png
new file mode 100644
index 00000000..0677384a
Binary files /dev/null and b/src/qt/res/icons/mosaicco/lock_closed.png differ
diff --git a/src/qt/res/icons/mosaicco/lock_open.png b/src/qt/res/icons/mosaicco/lock_open.png
new file mode 100644
index 00000000..6711c205
Binary files /dev/null and b/src/qt/res/icons/mosaicco/lock_open.png differ
diff --git a/src/qt/res/icons/mosaicco/masternodes.png b/src/qt/res/icons/mosaicco/masternodes.png
new file mode 100644
index 00000000..b0047b45
Binary files /dev/null and b/src/qt/res/icons/mosaicco/masternodes.png differ
diff --git a/src/qt/res/icons/mosaicco/network_disabled.png b/src/qt/res/icons/mosaicco/network_disabled.png
new file mode 100644
index 00000000..05217e5a
Binary files /dev/null and b/src/qt/res/icons/mosaicco/network_disabled.png differ
diff --git a/src/qt/res/icons/mosaicco/notsynced.png b/src/qt/res/icons/mosaicco/notsynced.png
new file mode 100644
index 00000000..e3326cfe
Binary files /dev/null and b/src/qt/res/icons/mosaicco/notsynced.png differ
diff --git a/src/qt/res/icons/mosaicco/overview.png b/src/qt/res/icons/mosaicco/overview.png
new file mode 100644
index 00000000..724a0104
Binary files /dev/null and b/src/qt/res/icons/mosaicco/overview.png differ
diff --git a/src/qt/res/icons/mosaicco/quit.png b/src/qt/res/icons/mosaicco/quit.png
new file mode 100644
index 00000000..55cb44bb
Binary files /dev/null and b/src/qt/res/icons/mosaicco/quit.png differ
diff --git a/src/qt/res/icons/mosaicco/receive.png b/src/qt/res/icons/mosaicco/receive.png
new file mode 100644
index 00000000..969ffc56
Binary files /dev/null and b/src/qt/res/icons/mosaicco/receive.png differ
diff --git a/src/qt/res/icons/mosaicco/remove.png b/src/qt/res/icons/mosaicco/remove.png
new file mode 100644
index 00000000..99fd9660
Binary files /dev/null and b/src/qt/res/icons/mosaicco/remove.png differ
diff --git a/src/qt/res/icons/mosaicco/send.png b/src/qt/res/icons/mosaicco/send.png
new file mode 100644
index 00000000..b7bd4e19
Binary files /dev/null and b/src/qt/res/icons/mosaicco/send.png differ
diff --git a/src/qt/res/icons/mosaicco/synced.png b/src/qt/res/icons/mosaicco/synced.png
new file mode 100644
index 00000000..6a64c373
Binary files /dev/null and b/src/qt/res/icons/mosaicco/synced.png differ
diff --git a/src/qt/res/icons/mosaicco/transaction0.png b/src/qt/res/icons/mosaicco/transaction0.png
new file mode 100644
index 00000000..4c7a02df
Binary files /dev/null and b/src/qt/res/icons/mosaicco/transaction0.png differ
diff --git a/src/qt/res/icons/mosaicco/transaction2.png b/src/qt/res/icons/mosaicco/transaction2.png
new file mode 100644
index 00000000..c95cd828
Binary files /dev/null and b/src/qt/res/icons/mosaicco/transaction2.png differ
diff --git a/src/qt/res/icons/mosaicco/transaction_abandoned.png b/src/qt/res/icons/mosaicco/transaction_abandoned.png
new file mode 100644
index 00000000..0a44de47
Binary files /dev/null and b/src/qt/res/icons/mosaicco/transaction_abandoned.png differ
diff --git a/src/qt/res/icons/mosaicco/transaction_conflicted.png b/src/qt/res/icons/mosaicco/transaction_conflicted.png
new file mode 100644
index 00000000..ef620eeb
Binary files /dev/null and b/src/qt/res/icons/mosaicco/transaction_conflicted.png differ
diff --git a/src/qt/res/icons/mosaicco/tx_inout.png b/src/qt/res/icons/mosaicco/tx_inout.png
new file mode 100644
index 00000000..913bd5ab
Binary files /dev/null and b/src/qt/res/icons/mosaicco/tx_inout.png differ
diff --git a/src/qt/res/icons/mosaicco/tx_input.png b/src/qt/res/icons/mosaicco/tx_input.png
new file mode 100644
index 00000000..6cb4dafa
Binary files /dev/null and b/src/qt/res/icons/mosaicco/tx_input.png differ
diff --git a/src/qt/res/icons/mosaicco/tx_mined.png b/src/qt/res/icons/mosaicco/tx_mined.png
new file mode 100644
index 00000000..6ff28cf6
Binary files /dev/null and b/src/qt/res/icons/mosaicco/tx_mined.png differ
diff --git a/src/qt/res/icons/mosaicco/tx_output.png b/src/qt/res/icons/mosaicco/tx_output.png
new file mode 100644
index 00000000..cd45472b
Binary files /dev/null and b/src/qt/res/icons/mosaicco/tx_output.png differ
diff --git a/src/qt/res/icons/mosaicco/verify.png b/src/qt/res/icons/mosaicco/verify.png
new file mode 100644
index 00000000..0ce42039
Binary files /dev/null and b/src/qt/res/icons/mosaicco/verify.png differ
diff --git a/src/qt/res/icons/trad/about.png b/src/qt/res/icons/trad/about.png
index 8dba8dd8..f939d87d 100644
Binary files a/src/qt/res/icons/trad/about.png and b/src/qt/res/icons/trad/about.png differ
diff --git a/src/qt/res/icons/trad/add.png b/src/qt/res/icons/trad/add.png
index 746f5806..61391a4e 100644
Binary files a/src/qt/res/icons/trad/add.png and b/src/qt/res/icons/trad/add.png differ
diff --git "a/src/qt/res/icons/trad/address-book - \345\211\257\346\234\254.png" "b/src/qt/res/icons/trad/address-book - \345\211\257\346\234\254.png"
new file mode 100644
index 00000000..3581220d
Binary files /dev/null and "b/src/qt/res/icons/trad/address-book - \345\211\257\346\234\254.png" differ
diff --git a/src/qt/res/icons/trad/address-book.png b/src/qt/res/icons/trad/address-book.png
index 05bcabde..35ad12db 100644
Binary files a/src/qt/res/icons/trad/address-book.png and b/src/qt/res/icons/trad/address-book.png differ
diff --git a/src/qt/res/icons/trad/bitcoin.ico b/src/qt/res/icons/trad/bitcoin.ico
index e0618a38..811006f0 100644
Binary files a/src/qt/res/icons/trad/bitcoin.ico and b/src/qt/res/icons/trad/bitcoin.ico differ
diff --git a/src/qt/res/icons/trad/bitcoin.png b/src/qt/res/icons/trad/bitcoin.png
index 40eb55cd..540d1313 100644
Binary files a/src/qt/res/icons/trad/bitcoin.png and b/src/qt/res/icons/trad/bitcoin.png differ
diff --git a/src/qt/res/icons/trad/bitcoin_testnet.ico b/src/qt/res/icons/trad/bitcoin_testnet.ico
index e0618a38..e6b64590 100644
Binary files a/src/qt/res/icons/trad/bitcoin_testnet.ico and b/src/qt/res/icons/trad/bitcoin_testnet.ico differ
diff --git a/src/qt/res/icons/trad/bitcoin_testnet.png b/src/qt/res/icons/trad/bitcoin_testnet.png
index 40eb55cd..d58169db 100644
Binary files a/src/qt/res/icons/trad/bitcoin_testnet.png and b/src/qt/res/icons/trad/bitcoin_testnet.png differ
diff --git a/src/qt/res/icons/trad/browse.png b/src/qt/res/icons/trad/browse.png
index 0032637f..952384d4 100644
Binary files a/src/qt/res/icons/trad/browse.png and b/src/qt/res/icons/trad/browse.png differ
diff --git a/src/qt/res/icons/trad/chevron.png b/src/qt/res/icons/trad/chevron.png
new file mode 100644
index 00000000..33598692
Binary files /dev/null and b/src/qt/res/icons/trad/chevron.png differ
diff --git a/src/qt/res/icons/trad/clock1.png b/src/qt/res/icons/trad/clock1.png
index 214ac9b9..fa612ea0 100644
Binary files a/src/qt/res/icons/trad/clock1.png and b/src/qt/res/icons/trad/clock1.png differ
diff --git a/src/qt/res/icons/trad/clock2.png b/src/qt/res/icons/trad/clock2.png
index 5b0dd7af..d059a85e 100644
Binary files a/src/qt/res/icons/trad/clock2.png and b/src/qt/res/icons/trad/clock2.png differ
diff --git a/src/qt/res/icons/trad/clock3.png b/src/qt/res/icons/trad/clock3.png
index 523139f8..fb9215b6 100644
Binary files a/src/qt/res/icons/trad/clock3.png and b/src/qt/res/icons/trad/clock3.png differ
diff --git a/src/qt/res/icons/trad/clock4.png b/src/qt/res/icons/trad/clock4.png
index c007f501..cbf38ac9 100644
Binary files a/src/qt/res/icons/trad/clock4.png and b/src/qt/res/icons/trad/clock4.png differ
diff --git a/src/qt/res/icons/trad/clock5.png b/src/qt/res/icons/trad/clock5.png
index 2d40197a..a7fb13b7 100644
Binary files a/src/qt/res/icons/trad/clock5.png and b/src/qt/res/icons/trad/clock5.png differ
diff --git a/src/qt/res/icons/trad/configure.png b/src/qt/res/icons/trad/configure.png
index abbbbc27..0db953bc 100644
Binary files a/src/qt/res/icons/trad/configure.png and b/src/qt/res/icons/trad/configure.png differ
diff --git a/src/qt/res/icons/trad/connect0_16.png b/src/qt/res/icons/trad/connect0_16.png
index 1376cd7b..b332eb89 100644
Binary files a/src/qt/res/icons/trad/connect0_16.png and b/src/qt/res/icons/trad/connect0_16.png differ
diff --git a/src/qt/res/icons/trad/connect1_16.png b/src/qt/res/icons/trad/connect1_16.png
index a196ef3a..9d5df154 100644
Binary files a/src/qt/res/icons/trad/connect1_16.png and b/src/qt/res/icons/trad/connect1_16.png differ
diff --git a/src/qt/res/icons/trad/connect2_16.png b/src/qt/res/icons/trad/connect2_16.png
index d86563c4..bbd3c049 100644
Binary files a/src/qt/res/icons/trad/connect2_16.png and b/src/qt/res/icons/trad/connect2_16.png differ
diff --git a/src/qt/res/icons/trad/connect3_16.png b/src/qt/res/icons/trad/connect3_16.png
index d9087d78..2c20384f 100644
Binary files a/src/qt/res/icons/trad/connect3_16.png and b/src/qt/res/icons/trad/connect3_16.png differ
diff --git a/src/qt/res/icons/trad/connect4_16.png b/src/qt/res/icons/trad/connect4_16.png
index 10be0de7..7ff31989 100644
Binary files a/src/qt/res/icons/trad/connect4_16.png and b/src/qt/res/icons/trad/connect4_16.png differ
diff --git a/src/qt/res/icons/trad/debugwindow.png b/src/qt/res/icons/trad/debugwindow.png
index 0a59796f..52a567fb 100644
Binary files a/src/qt/res/icons/trad/debugwindow.png and b/src/qt/res/icons/trad/debugwindow.png differ
diff --git a/src/qt/res/icons/trad/drkblue_address-book.png b/src/qt/res/icons/trad/drkblue_address-book.png
index 1af1f60f..ddd05248 100644
Binary files a/src/qt/res/icons/trad/drkblue_address-book.png and b/src/qt/res/icons/trad/drkblue_address-book.png differ
diff --git a/src/qt/res/icons/trad/drkblue_editcopy.png b/src/qt/res/icons/trad/drkblue_editcopy.png
index d2201f85..4fc01212 100644
Binary files a/src/qt/res/icons/trad/drkblue_editcopy.png and b/src/qt/res/icons/trad/drkblue_editcopy.png differ
diff --git a/src/qt/res/icons/trad/drkblue_editpaste.png b/src/qt/res/icons/trad/drkblue_editpaste.png
index 317c2ed8..ec1ac2b9 100644
Binary files a/src/qt/res/icons/trad/drkblue_editpaste.png and b/src/qt/res/icons/trad/drkblue_editpaste.png differ
diff --git a/src/qt/res/icons/trad/drkblue_remove.png b/src/qt/res/icons/trad/drkblue_remove.png
index 99fd9660..c04dc86f 100644
Binary files a/src/qt/res/icons/trad/drkblue_remove.png and b/src/qt/res/icons/trad/drkblue_remove.png differ
diff --git a/src/qt/res/icons/trad/edit.png b/src/qt/res/icons/trad/edit.png
index 3be65327..6ed714d9 100644
Binary files a/src/qt/res/icons/trad/edit.png and b/src/qt/res/icons/trad/edit.png differ
diff --git a/src/qt/res/icons/trad/editcopy.png b/src/qt/res/icons/trad/editcopy.png
index 1dd4bf8f..780fd809 100644
Binary files a/src/qt/res/icons/trad/editcopy.png and b/src/qt/res/icons/trad/editcopy.png differ
diff --git a/src/qt/res/icons/warning.png b/src/qt/res/icons/warning.png
index a4f95d56..1188e1ac 100644
Binary files a/src/qt/res/icons/warning.png and b/src/qt/res/icons/warning.png differ
diff --git a/src/qt/res/images/crownium/about.png b/src/qt/res/images/crownium/about.png
index ed0a1d42..bbf7a0ab 100644
Binary files a/src/qt/res/images/crownium/about.png and b/src/qt/res/images/crownium/about.png differ
diff --git a/src/qt/res/images/crownium/checked.png b/src/qt/res/images/crownium/checked.png
index 0e35c7c7..4f337d87 100644
Binary files a/src/qt/res/images/crownium/checked.png and b/src/qt/res/images/crownium/checked.png differ
diff --git a/src/qt/res/images/crownium/dash_logo_horizontal.png b/src/qt/res/images/crownium/dash_logo_horizontal.png
index 95789de5..9d2e9fdc 100644
Binary files a/src/qt/res/images/crownium/dash_logo_horizontal.png and b/src/qt/res/images/crownium/dash_logo_horizontal.png differ
diff --git a/src/qt/res/images/crownium/drkblue_downArrow.png b/src/qt/res/images/crownium/drkblue_downArrow.png
index c9d70a79..2259e1dd 100644
Binary files a/src/qt/res/images/crownium/drkblue_downArrow.png and b/src/qt/res/images/crownium/drkblue_downArrow.png differ
diff --git a/src/qt/res/images/crownium/drkblue_downArrow_small.png b/src/qt/res/images/crownium/drkblue_downArrow_small.png
index 96eed1be..ef309aeb 100644
Binary files a/src/qt/res/images/crownium/drkblue_downArrow_small.png and b/src/qt/res/images/crownium/drkblue_downArrow_small.png differ
diff --git a/src/qt/res/images/crownium/drkblue_leftArrow_small.png b/src/qt/res/images/crownium/drkblue_leftArrow_small.png
index 4920bcad..f3e98616 100644
Binary files a/src/qt/res/images/crownium/drkblue_leftArrow_small.png and b/src/qt/res/images/crownium/drkblue_leftArrow_small.png differ
diff --git a/src/qt/res/images/crownium/drkblue_qtreeview_selected.png b/src/qt/res/images/crownium/drkblue_qtreeview_selected.png
index 9c9ae02e..a8c128ab 100644
Binary files a/src/qt/res/images/crownium/drkblue_qtreeview_selected.png and b/src/qt/res/images/crownium/drkblue_qtreeview_selected.png differ
diff --git a/src/qt/res/images/crownium/drkblue_rightArrow_small.png b/src/qt/res/images/crownium/drkblue_rightArrow_small.png
index 5035dcde..7ed328a7 100644
Binary files a/src/qt/res/images/crownium/drkblue_rightArrow_small.png and b/src/qt/res/images/crownium/drkblue_rightArrow_small.png differ
diff --git a/src/qt/res/images/crownium/drkblue_upArrow_small.png b/src/qt/res/images/crownium/drkblue_upArrow_small.png
index 8f13bf3b..c0dff0f3 100644
Binary files a/src/qt/res/images/crownium/drkblue_upArrow_small.png and b/src/qt/res/images/crownium/drkblue_upArrow_small.png differ
diff --git a/src/qt/res/images/crownium/drkblue_walletFrame_bg.png b/src/qt/res/images/crownium/drkblue_walletFrame_bg.png
index 506ccadc..3cc49220 100644
Binary files a/src/qt/res/images/crownium/drkblue_walletFrame_bg.png and b/src/qt/res/images/crownium/drkblue_walletFrame_bg.png differ
diff --git a/src/qt/res/images/crownium/splash.png b/src/qt/res/images/crownium/splash.png
index d487b64f..64df5f08 100644
Binary files a/src/qt/res/images/crownium/splash.png and b/src/qt/res/images/crownium/splash.png differ
diff --git a/src/qt/res/images/crownium/splash_testnet.png b/src/qt/res/images/crownium/splash_testnet.png
index bbbbb5e2..7f5f0731 100644
Binary files a/src/qt/res/images/crownium/splash_testnet.png and b/src/qt/res/images/crownium/splash_testnet.png differ
diff --git a/src/qt/res/images/crownium/unchecked.png b/src/qt/res/images/crownium/unchecked.png
index 296e6a5b..b16ef40f 100644
Binary files a/src/qt/res/images/crownium/unchecked.png and b/src/qt/res/images/crownium/unchecked.png differ
diff --git a/src/qt/res/images/drkblue/about.png b/src/qt/res/images/drkblue/about.png
index 0bc45bfd..ebb8bd1f 100644
Binary files a/src/qt/res/images/drkblue/about.png and b/src/qt/res/images/drkblue/about.png differ
diff --git a/src/qt/res/images/drkblue/checked.png b/src/qt/res/images/drkblue/checked.png
index 5d3cde4d..4f337d87 100644
Binary files a/src/qt/res/images/drkblue/checked.png and b/src/qt/res/images/drkblue/checked.png differ
diff --git a/src/qt/res/images/drkblue/dash_logo_horizontal.png b/src/qt/res/images/drkblue/dash_logo_horizontal.png
index 6e5d175d..9d2e9fdc 100644
Binary files a/src/qt/res/images/drkblue/dash_logo_horizontal.png and b/src/qt/res/images/drkblue/dash_logo_horizontal.png differ
diff --git a/src/qt/res/images/drkblue/drkblue_downArrow.png b/src/qt/res/images/drkblue/drkblue_downArrow.png
index e26c529d..2259e1dd 100644
Binary files a/src/qt/res/images/drkblue/drkblue_downArrow.png and b/src/qt/res/images/drkblue/drkblue_downArrow.png differ
diff --git a/src/qt/res/images/drkblue/drkblue_downArrow_small.png b/src/qt/res/images/drkblue/drkblue_downArrow_small.png
index 0f66a1a6..ef309aeb 100644
Binary files a/src/qt/res/images/drkblue/drkblue_downArrow_small.png and b/src/qt/res/images/drkblue/drkblue_downArrow_small.png differ
diff --git a/src/qt/res/images/drkblue/drkblue_leftArrow_small.png b/src/qt/res/images/drkblue/drkblue_leftArrow_small.png
index eb0f63ec..f3e98616 100644
Binary files a/src/qt/res/images/drkblue/drkblue_leftArrow_small.png and b/src/qt/res/images/drkblue/drkblue_leftArrow_small.png differ
diff --git a/src/qt/res/images/drkblue/drkblue_qtreeview_selected.png b/src/qt/res/images/drkblue/drkblue_qtreeview_selected.png
index 2656a1ef..a8c128ab 100644
Binary files a/src/qt/res/images/drkblue/drkblue_qtreeview_selected.png and b/src/qt/res/images/drkblue/drkblue_qtreeview_selected.png differ
diff --git a/src/qt/res/images/drkblue/drkblue_rightArrow_small.png b/src/qt/res/images/drkblue/drkblue_rightArrow_small.png
index 6041a526..7ed328a7 100644
Binary files a/src/qt/res/images/drkblue/drkblue_rightArrow_small.png and b/src/qt/res/images/drkblue/drkblue_rightArrow_small.png differ
diff --git a/src/qt/res/images/drkblue/drkblue_upArrow_small.png b/src/qt/res/images/drkblue/drkblue_upArrow_small.png
index 4e854fdf..c0dff0f3 100644
Binary files a/src/qt/res/images/drkblue/drkblue_upArrow_small.png and b/src/qt/res/images/drkblue/drkblue_upArrow_small.png differ
diff --git a/src/qt/res/images/drkblue/drkblue_walletFrame_bg.png b/src/qt/res/images/drkblue/drkblue_walletFrame_bg.png
index f69ed3bf..4a802dc0 100644
Binary files a/src/qt/res/images/drkblue/drkblue_walletFrame_bg.png and b/src/qt/res/images/drkblue/drkblue_walletFrame_bg.png differ
diff --git a/src/qt/res/images/drkblue/splash.png b/src/qt/res/images/drkblue/splash.png
index 267d9a2b..7a3c909d 100644
Binary files a/src/qt/res/images/drkblue/splash.png and b/src/qt/res/images/drkblue/splash.png differ
diff --git a/src/qt/res/images/drkblue/splash_testnet.png b/src/qt/res/images/drkblue/splash_testnet.png
index 396980c0..7a3c909d 100644
Binary files a/src/qt/res/images/drkblue/splash_testnet.png and b/src/qt/res/images/drkblue/splash_testnet.png differ
diff --git a/src/qt/res/images/drkblue/unchecked.png b/src/qt/res/images/drkblue/unchecked.png
index 38c7ebc4..b16ef40f 100644
Binary files a/src/qt/res/images/drkblue/unchecked.png and b/src/qt/res/images/drkblue/unchecked.png differ
diff --git a/src/qt/res/images/light/about.png b/src/qt/res/images/light/about.png
index 2f2ff171..d8130e6e 100644
Binary files a/src/qt/res/images/light/about.png and b/src/qt/res/images/light/about.png differ
diff --git a/src/qt/res/images/light/checked.png b/src/qt/res/images/light/checked.png
index 69e60eb0..4f337d87 100644
Binary files a/src/qt/res/images/light/checked.png and b/src/qt/res/images/light/checked.png differ
diff --git a/src/qt/res/images/light/dash_logo_horizontal.png b/src/qt/res/images/light/dash_logo_horizontal.png
index 0be9a18c..9d2e9fdc 100644
Binary files a/src/qt/res/images/light/dash_logo_horizontal.png and b/src/qt/res/images/light/dash_logo_horizontal.png differ
diff --git a/src/qt/res/images/light/drkblue_downArrow.png b/src/qt/res/images/light/drkblue_downArrow.png
index 1cdedb74..2259e1dd 100644
Binary files a/src/qt/res/images/light/drkblue_downArrow.png and b/src/qt/res/images/light/drkblue_downArrow.png differ
diff --git a/src/qt/res/images/light/drkblue_downArrow_small.png b/src/qt/res/images/light/drkblue_downArrow_small.png
index 2c75067c..ef309aeb 100644
Binary files a/src/qt/res/images/light/drkblue_downArrow_small.png and b/src/qt/res/images/light/drkblue_downArrow_small.png differ
diff --git a/src/qt/res/images/light/drkblue_leftArrow_small.png b/src/qt/res/images/light/drkblue_leftArrow_small.png
index f1a5edec..f3e98616 100644
Binary files a/src/qt/res/images/light/drkblue_leftArrow_small.png and b/src/qt/res/images/light/drkblue_leftArrow_small.png differ
diff --git a/src/qt/res/images/light/drkblue_qtreeview_selected.png b/src/qt/res/images/light/drkblue_qtreeview_selected.png
index 2656a1ef..a8c128ab 100644
Binary files a/src/qt/res/images/light/drkblue_qtreeview_selected.png and b/src/qt/res/images/light/drkblue_qtreeview_selected.png differ
diff --git a/src/qt/res/images/light/drkblue_rightArrow_small.png b/src/qt/res/images/light/drkblue_rightArrow_small.png
index 38f45d4d..7ed328a7 100644
Binary files a/src/qt/res/images/light/drkblue_rightArrow_small.png and b/src/qt/res/images/light/drkblue_rightArrow_small.png differ
diff --git a/src/qt/res/images/light/drkblue_upArrow_small.png b/src/qt/res/images/light/drkblue_upArrow_small.png
index 6480960d..c0dff0f3 100644
Binary files a/src/qt/res/images/light/drkblue_upArrow_small.png and b/src/qt/res/images/light/drkblue_upArrow_small.png differ
diff --git a/src/qt/res/images/light/drkblue_walletFrame_bg.png b/src/qt/res/images/light/drkblue_walletFrame_bg.png
index f69ed3bf..9b88a76c 100644
Binary files a/src/qt/res/images/light/drkblue_walletFrame_bg.png and b/src/qt/res/images/light/drkblue_walletFrame_bg.png differ
diff --git a/src/qt/res/images/light/splash.png b/src/qt/res/images/light/splash.png
index ee0ed5df..ae595534 100644
Binary files a/src/qt/res/images/light/splash.png and b/src/qt/res/images/light/splash.png differ
diff --git a/src/qt/res/images/light/splash_testnet.png b/src/qt/res/images/light/splash_testnet.png
index 5197848a..3da5ad74 100644
Binary files a/src/qt/res/images/light/splash_testnet.png and b/src/qt/res/images/light/splash_testnet.png differ
diff --git a/src/qt/res/images/light/unchecked.png b/src/qt/res/images/light/unchecked.png
index c9e8742e..b16ef40f 100644
Binary files a/src/qt/res/images/light/unchecked.png and b/src/qt/res/images/light/unchecked.png differ
diff --git a/src/qt/res/images/mosaicco/about.png b/src/qt/res/images/mosaicco/about.png
new file mode 100644
index 00000000..8405d9b0
Binary files /dev/null and b/src/qt/res/images/mosaicco/about.png differ
diff --git a/src/qt/res/images/mosaicco/checked.png b/src/qt/res/images/mosaicco/checked.png
new file mode 100644
index 00000000..4f337d87
Binary files /dev/null and b/src/qt/res/images/mosaicco/checked.png differ
diff --git a/src/qt/res/images/mosaicco/dash_logo_horizontal.png b/src/qt/res/images/mosaicco/dash_logo_horizontal.png
new file mode 100644
index 00000000..9d2e9fdc
Binary files /dev/null and b/src/qt/res/images/mosaicco/dash_logo_horizontal.png differ
diff --git a/src/qt/res/images/mosaicco/drkblue_downArrow.png b/src/qt/res/images/mosaicco/drkblue_downArrow.png
new file mode 100644
index 00000000..2259e1dd
Binary files /dev/null and b/src/qt/res/images/mosaicco/drkblue_downArrow.png differ
diff --git a/src/qt/res/images/mosaicco/drkblue_downArrow_small.png b/src/qt/res/images/mosaicco/drkblue_downArrow_small.png
new file mode 100644
index 00000000..ef309aeb
Binary files /dev/null and b/src/qt/res/images/mosaicco/drkblue_downArrow_small.png differ
diff --git a/src/qt/res/images/mosaicco/drkblue_leftArrow_small.png b/src/qt/res/images/mosaicco/drkblue_leftArrow_small.png
new file mode 100644
index 00000000..f3e98616
Binary files /dev/null and b/src/qt/res/images/mosaicco/drkblue_leftArrow_small.png differ
diff --git a/src/qt/res/images/mosaicco/drkblue_qtreeview_selected.png b/src/qt/res/images/mosaicco/drkblue_qtreeview_selected.png
new file mode 100644
index 00000000..a8c128ab
Binary files /dev/null and b/src/qt/res/images/mosaicco/drkblue_qtreeview_selected.png differ
diff --git a/src/qt/res/images/mosaicco/drkblue_rightArrow_small.png b/src/qt/res/images/mosaicco/drkblue_rightArrow_small.png
new file mode 100644
index 00000000..7ed328a7
Binary files /dev/null and b/src/qt/res/images/mosaicco/drkblue_rightArrow_small.png differ
diff --git a/src/qt/res/images/mosaicco/drkblue_upArrow_small.png b/src/qt/res/images/mosaicco/drkblue_upArrow_small.png
new file mode 100644
index 00000000..c0dff0f3
Binary files /dev/null and b/src/qt/res/images/mosaicco/drkblue_upArrow_small.png differ
diff --git a/src/qt/res/images/mosaicco/drkblue_walletFrame_bg.png b/src/qt/res/images/mosaicco/drkblue_walletFrame_bg.png
new file mode 100644
index 00000000..5cd1bed2
Binary files /dev/null and b/src/qt/res/images/mosaicco/drkblue_walletFrame_bg.png differ
diff --git a/src/qt/res/images/mosaicco/splash.png b/src/qt/res/images/mosaicco/splash.png
new file mode 100644
index 00000000..77b55158
Binary files /dev/null and b/src/qt/res/images/mosaicco/splash.png differ
diff --git a/src/qt/res/images/mosaicco/splash_testnet.png b/src/qt/res/images/mosaicco/splash_testnet.png
new file mode 100644
index 00000000..77b55158
Binary files /dev/null and b/src/qt/res/images/mosaicco/splash_testnet.png differ
diff --git a/src/qt/res/images/mosaicco/unchecked.png b/src/qt/res/images/mosaicco/unchecked.png
new file mode 100644
index 00000000..b16ef40f
Binary files /dev/null and b/src/qt/res/images/mosaicco/unchecked.png differ
diff --git a/src/qt/res/images/trad/about.png b/src/qt/res/images/trad/about.png
index 0bc45bfd..f28a71a4 100644
Binary files a/src/qt/res/images/trad/about.png and b/src/qt/res/images/trad/about.png differ
diff --git a/src/qt/res/images/trad/checked.png b/src/qt/res/images/trad/checked.png
index 238e834f..4f337d87 100644
Binary files a/src/qt/res/images/trad/checked.png and b/src/qt/res/images/trad/checked.png differ
diff --git a/src/qt/res/images/trad/dash_logo_horizontal.png b/src/qt/res/images/trad/dash_logo_horizontal.png
index 6e5d175d..9d2e9fdc 100644
Binary files a/src/qt/res/images/trad/dash_logo_horizontal.png and b/src/qt/res/images/trad/dash_logo_horizontal.png differ
diff --git a/src/qt/res/images/trad/drkblue_downArrow.png b/src/qt/res/images/trad/drkblue_downArrow.png
index e26c529d..2259e1dd 100644
Binary files a/src/qt/res/images/trad/drkblue_downArrow.png and b/src/qt/res/images/trad/drkblue_downArrow.png differ
diff --git a/src/qt/res/images/trad/drkblue_downArrow_small.png b/src/qt/res/images/trad/drkblue_downArrow_small.png
index 0f66a1a6..ef309aeb 100644
Binary files a/src/qt/res/images/trad/drkblue_downArrow_small.png and b/src/qt/res/images/trad/drkblue_downArrow_small.png differ
diff --git a/src/qt/res/images/trad/drkblue_leftArrow_small.png b/src/qt/res/images/trad/drkblue_leftArrow_small.png
index eb0f63ec..f3e98616 100644
Binary files a/src/qt/res/images/trad/drkblue_leftArrow_small.png and b/src/qt/res/images/trad/drkblue_leftArrow_small.png differ
diff --git a/src/qt/res/images/trad/drkblue_qtreeview_selected.png b/src/qt/res/images/trad/drkblue_qtreeview_selected.png
index 2656a1ef..a8c128ab 100644
Binary files a/src/qt/res/images/trad/drkblue_qtreeview_selected.png and b/src/qt/res/images/trad/drkblue_qtreeview_selected.png differ
diff --git a/src/qt/res/images/trad/drkblue_rightArrow_small.png b/src/qt/res/images/trad/drkblue_rightArrow_small.png
index 6041a526..7ed328a7 100644
Binary files a/src/qt/res/images/trad/drkblue_rightArrow_small.png and b/src/qt/res/images/trad/drkblue_rightArrow_small.png differ
diff --git a/src/qt/res/images/trad/drkblue_upArrow_small.png b/src/qt/res/images/trad/drkblue_upArrow_small.png
index 4e854fdf..c0dff0f3 100644
Binary files a/src/qt/res/images/trad/drkblue_upArrow_small.png and b/src/qt/res/images/trad/drkblue_upArrow_small.png differ
diff --git a/src/qt/res/images/trad/drkblue_walletFrame_bg.png b/src/qt/res/images/trad/drkblue_walletFrame_bg.png
index f69ed3bf..cfa0dc2a 100644
Binary files a/src/qt/res/images/trad/drkblue_walletFrame_bg.png and b/src/qt/res/images/trad/drkblue_walletFrame_bg.png differ
diff --git a/src/qt/res/images/trad/splash.png b/src/qt/res/images/trad/splash.png
index 267d9a2b..9006536e 100644
Binary files a/src/qt/res/images/trad/splash.png and b/src/qt/res/images/trad/splash.png differ
diff --git a/src/qt/res/images/trad/splash_testnet.png b/src/qt/res/images/trad/splash_testnet.png
index 396980c0..9a2dc25d 100644
Binary files a/src/qt/res/images/trad/splash_testnet.png and b/src/qt/res/images/trad/splash_testnet.png differ
diff --git a/src/qt/res/images/trad/unchecked.png b/src/qt/res/images/trad/unchecked.png
index aaac898c..b16ef40f 100644
Binary files a/src/qt/res/images/trad/unchecked.png and b/src/qt/res/images/trad/unchecked.png differ
diff --git a/src/qt/res/movies/spinner-000.png b/src/qt/res/movies/spinner-000.png
index 0dc48d0d..da47035b 100644
Binary files a/src/qt/res/movies/spinner-000.png and b/src/qt/res/movies/spinner-000.png differ
diff --git a/src/qt/res/movies/spinner-001.png b/src/qt/res/movies/spinner-001.png
index d167f205..7ed75a06 100644
Binary files a/src/qt/res/movies/spinner-001.png and b/src/qt/res/movies/spinner-001.png differ
diff --git a/src/qt/res/movies/spinner-002.png b/src/qt/res/movies/spinner-002.png
index 4a1f1f8e..c6410255 100644
Binary files a/src/qt/res/movies/spinner-002.png and b/src/qt/res/movies/spinner-002.png differ
diff --git a/src/qt/res/movies/spinner-003.png b/src/qt/res/movies/spinner-003.png
index fb1c2cd4..2d072428 100644
Binary files a/src/qt/res/movies/spinner-003.png and b/src/qt/res/movies/spinner-003.png differ
diff --git a/src/qt/res/movies/spinner-004.png b/src/qt/res/movies/spinner-004.png
index 4df21323..9e5b71fa 100644
Binary files a/src/qt/res/movies/spinner-004.png and b/src/qt/res/movies/spinner-004.png differ
diff --git a/src/qt/res/movies/spinner-005.png b/src/qt/res/movies/spinner-005.png
index 5d6f41e0..a9cc60d5 100644
Binary files a/src/qt/res/movies/spinner-005.png and b/src/qt/res/movies/spinner-005.png differ
diff --git a/src/qt/res/movies/spinner-006.png b/src/qt/res/movies/spinner-006.png
index c1f7d188..1eb375da 100644
Binary files a/src/qt/res/movies/spinner-006.png and b/src/qt/res/movies/spinner-006.png differ
diff --git a/src/qt/res/movies/spinner-007.png b/src/qt/res/movies/spinner-007.png
index 1e794b26..50c53c48 100644
Binary files a/src/qt/res/movies/spinner-007.png and b/src/qt/res/movies/spinner-007.png differ
diff --git a/src/qt/res/movies/spinner-008.png b/src/qt/res/movies/spinner-008.png
index df12ea87..ce622aac 100644
Binary files a/src/qt/res/movies/spinner-008.png and b/src/qt/res/movies/spinner-008.png differ
diff --git a/src/qt/res/movies/spinner-009.png b/src/qt/res/movies/spinner-009.png
index 18fc3a7d..fa16395e 100644
Binary files a/src/qt/res/movies/spinner-009.png and b/src/qt/res/movies/spinner-009.png differ
diff --git a/src/qt/res/movies/spinner-010.png b/src/qt/res/movies/spinner-010.png
index a79c845f..aa3e9b86 100644
Binary files a/src/qt/res/movies/spinner-010.png and b/src/qt/res/movies/spinner-010.png differ
diff --git a/src/qt/res/movies/spinner-011.png b/src/qt/res/movies/spinner-011.png
index 57baf668..098f1a3d 100644
Binary files a/src/qt/res/movies/spinner-011.png and b/src/qt/res/movies/spinner-011.png differ
diff --git a/src/qt/res/movies/spinner-012.png b/src/qt/res/movies/spinner-012.png
index 9deae785..07720626 100644
Binary files a/src/qt/res/movies/spinner-012.png and b/src/qt/res/movies/spinner-012.png differ
diff --git a/src/qt/res/movies/spinner-013.png b/src/qt/res/movies/spinner-013.png
index 0659d48d..49398f7d 100644
Binary files a/src/qt/res/movies/spinner-013.png and b/src/qt/res/movies/spinner-013.png differ
diff --git a/src/qt/res/movies/spinner-014.png b/src/qt/res/movies/spinner-014.png
index bc1ef51b..0e0ea8ca 100644
Binary files a/src/qt/res/movies/spinner-014.png and b/src/qt/res/movies/spinner-014.png differ
diff --git a/src/qt/res/movies/spinner-015.png b/src/qt/res/movies/spinner-015.png
index 24b57b62..102d0587 100644
Binary files a/src/qt/res/movies/spinner-015.png and b/src/qt/res/movies/spinner-015.png differ
diff --git a/src/qt/res/movies/spinner-016.png b/src/qt/res/movies/spinner-016.png
index d6228726..d7e0e748 100644
Binary files a/src/qt/res/movies/spinner-016.png and b/src/qt/res/movies/spinner-016.png differ
diff --git a/src/qt/res/movies/spinner-017.png b/src/qt/res/movies/spinner-017.png
index f48f688d..51149f75 100644
Binary files a/src/qt/res/movies/spinner-017.png and b/src/qt/res/movies/spinner-017.png differ
diff --git a/src/qt/res/movies/spinner-018.png b/src/qt/res/movies/spinner-018.png
index a2c8f38b..69d9ea1d 100644
Binary files a/src/qt/res/movies/spinner-018.png and b/src/qt/res/movies/spinner-018.png differ
diff --git a/src/qt/res/movies/spinner-019.png b/src/qt/res/movies/spinner-019.png
index 9d7cc35d..fe00d236 100644
Binary files a/src/qt/res/movies/spinner-019.png and b/src/qt/res/movies/spinner-019.png differ
diff --git a/src/qt/res/movies/spinner-020.png b/src/qt/res/movies/spinner-020.png
index 1a07acc4..27a74c92 100644
Binary files a/src/qt/res/movies/spinner-020.png and b/src/qt/res/movies/spinner-020.png differ
diff --git a/src/qt/res/movies/spinner-021.png b/src/qt/res/movies/spinner-021.png
index 9cea8f25..6aed356a 100644
Binary files a/src/qt/res/movies/spinner-021.png and b/src/qt/res/movies/spinner-021.png differ
diff --git a/src/qt/res/movies/spinner-022.png b/src/qt/res/movies/spinner-022.png
index 60250f6d..e50aa1ea 100644
Binary files a/src/qt/res/movies/spinner-022.png and b/src/qt/res/movies/spinner-022.png differ
diff --git a/src/qt/res/movies/spinner-023.png b/src/qt/res/movies/spinner-023.png
index fc290a0c..4cd38dd0 100644
Binary files a/src/qt/res/movies/spinner-023.png and b/src/qt/res/movies/spinner-023.png differ
diff --git a/src/qt/res/movies/spinner-024.png b/src/qt/res/movies/spinner-024.png
index c5dcf1ea..60063da9 100644
Binary files a/src/qt/res/movies/spinner-024.png and b/src/qt/res/movies/spinner-024.png differ
diff --git a/src/qt/res/movies/spinner-025.png b/src/qt/res/movies/spinner-025.png
index 7f3577a4..d0c7c5c7 100644
Binary files a/src/qt/res/movies/spinner-025.png and b/src/qt/res/movies/spinner-025.png differ
diff --git a/src/qt/res/movies/spinner-026.png b/src/qt/res/movies/spinner-026.png
index 1663ddf4..c9997689 100644
Binary files a/src/qt/res/movies/spinner-026.png and b/src/qt/res/movies/spinner-026.png differ
diff --git a/src/qt/res/movies/spinner-027.png b/src/qt/res/movies/spinner-027.png
index d0e6da45..4d8585bb 100644
Binary files a/src/qt/res/movies/spinner-027.png and b/src/qt/res/movies/spinner-027.png differ
diff --git a/src/qt/res/movies/spinner-028.png b/src/qt/res/movies/spinner-028.png
index 2a7aba50..2544e3cb 100644
Binary files a/src/qt/res/movies/spinner-028.png and b/src/qt/res/movies/spinner-028.png differ
diff --git a/src/qt/res/movies/spinner-029.png b/src/qt/res/movies/spinner-029.png
index c8ca15c1..4c467960 100644
Binary files a/src/qt/res/movies/spinner-029.png and b/src/qt/res/movies/spinner-029.png differ
diff --git a/src/qt/res/movies/spinner-030.png b/src/qt/res/movies/spinner-030.png
index c847c99a..01d24fdd 100644
Binary files a/src/qt/res/movies/spinner-030.png and b/src/qt/res/movies/spinner-030.png differ
diff --git a/src/qt/res/movies/spinner-031.png b/src/qt/res/movies/spinner-031.png
index 40344314..42e8de23 100644
Binary files a/src/qt/res/movies/spinner-031.png and b/src/qt/res/movies/spinner-031.png differ
diff --git a/src/qt/res/movies/spinner-032.png b/src/qt/res/movies/spinner-032.png
index f9db0805..69226218 100644
Binary files a/src/qt/res/movies/spinner-032.png and b/src/qt/res/movies/spinner-032.png differ
diff --git a/src/qt/res/movies/spinner-033.png b/src/qt/res/movies/spinner-033.png
index 43f57719..008865e7 100644
Binary files a/src/qt/res/movies/spinner-033.png and b/src/qt/res/movies/spinner-033.png differ
diff --git a/src/qt/res/movies/spinner-034.png b/src/qt/res/movies/spinner-034.png
index c26656ff..ba2cc1cf 100644
Binary files a/src/qt/res/movies/spinner-034.png and b/src/qt/res/movies/spinner-034.png differ
diff --git a/src/qt/res/movies/spinner-035.png b/src/qt/res/movies/spinner-035.png
index e471f950..cf936611 100644
Binary files a/src/qt/res/movies/spinner-035.png and b/src/qt/res/movies/spinner-035.png differ
diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp
index 363b7343..3f772b7f 100644
--- a/src/qt/splashscreen.cpp
+++ b/src/qt/splashscreen.cpp
@@ -1,5 +1,7 @@
-// Copyright (c) 2011-2015 The Bitcoin Core developers
-// Copyright (c) 2014-2017 The PEPEPOW Core developers
+// Copyright (c) 2009-2010 Satoshi Nakamoto
+// Copyright (c) 2009-2015 The Bitcoin Core developers
+// Copyright (c) 2014-2022 The Dash Core developers
+// Copyright (c) 2022-2024 The PEPEPOW Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
@@ -34,19 +36,19 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
setWindowFlags(Qt::FramelessWindowHint);
// set reference point, paddings
- int paddingLeft = 14;
- int paddingTop = 458;
- int titleVersionVSpace = 17;
- int titleCopyrightVSpace = 32;
+ int paddingLeft = 25;
+ int paddingTop = 440;
+ int titleVersionVSpace = 40;
+ int titleCopyrightVSpace = 50;
- float fontFactor = 1.0;
+ float fontFactor = 1;
// define text to place
QString titleText = tr("PEPEPOW Core");
QString versionText = QString(tr("Version %1")).arg(QString::fromStdString(FormatFullVersion()));
QString copyrightTextBtc = QChar(0xA9)+QString(" 2009-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Bitcoin Core developers"));
QString copyrightTextDash = QChar(0xA9)+QString(" 2014-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Dash Core developers"));
- QString copyrightTextPEPEPOW = QChar(0xA9)+QString(" 2019-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The PEPEPOW Core developers"));
+ QString copyrightTextPEPEPOW = QChar(0xA9)+QString(" 2022-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The PEPEPOW Core developers"));
QString titleAddText = networkStyle->getTitleAddText();
// networkstyle.cpp can't (yet) read themes, so we do it here to get the correct Splash-screen
QString splashScreenPath = ":/images/" + GUIUtil::getThemeName() + "/splash";
@@ -61,7 +63,9 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
pixmap = QPixmap(splashScreenPath);
QPainter pixPaint(&pixmap);
- pixPaint.setPen(QColor(100,100,100));
+ //pixPaint.setPen(QColor(100,100,100));
+ pixPaint.setPen(QColor(255,255,255)); // white color text
+
// check font size and drawing with
pixPaint.setFont(QFont(font, 28*fontFactor));
@@ -82,9 +86,9 @@ SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle)
// draw copyright stuff
pixPaint.setFont(QFont(font, 10*fontFactor));
- pixPaint.drawText(paddingLeft,paddingTop+titleCopyrightVSpace,copyrightTextBtc);
- pixPaint.drawText(paddingLeft,paddingTop+titleCopyrightVSpace+12,copyrightTextDash);
- pixPaint.drawText(paddingLeft,paddingTop+titleCopyrightVSpace+24,copyrightTextPEPEPOW);
+ pixPaint.drawText(paddingLeft,paddingTop+titleCopyrightVSpace+15,copyrightTextBtc);
+ pixPaint.drawText(paddingLeft,paddingTop+titleCopyrightVSpace+15,copyrightTextDash);
+ pixPaint.drawText(paddingLeft,paddingTop+titleCopyrightVSpace+35,copyrightTextPEPEPOW);
// draw additional text if special network
if(!titleAddText.isEmpty()) {
@@ -141,7 +145,8 @@ static void InitMessage(SplashScreen *splash, const std::string &message)
Qt::QueuedConnection,
Q_ARG(QString, QString::fromStdString(message)),
Q_ARG(int, Qt::AlignBottom|Qt::AlignHCenter),
- Q_ARG(QColor, QColor(55,55,55)));
+ //Q_ARG(QColor, QColor(55,55,55)));
+ Q_ARG(QColor, QColor(255,255,255))); // white color text
}
static void ShowProgress(SplashScreen *splash, const std::string &title, int nProgress)
@@ -164,29 +169,29 @@ static void SetProgressBreakAction(SplashScreen *splash, const std::functionShowProgress.connect(boost::bind(ShowProgress, splash, _1, _2));
+ wallet->ShowProgress.connect(boost::bind(ShowProgress, splash, boost::placeholders::_1, boost::placeholders::_2));
}
#endif
void SplashScreen::subscribeToCoreSignals()
{
// Connect signals to client
- uiInterface.InitMessage.connect(boost::bind(InitMessage, this, _1));
- uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
- uiInterface.SetProgressBreakAction.connect(boost::bind(SetProgressBreakAction, this, _1));
+ uiInterface.InitMessage.connect(boost::bind(InitMessage, this, boost::placeholders::_1));
+ uiInterface.ShowProgress.connect(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
+ uiInterface.SetProgressBreakAction.connect(boost::bind(SetProgressBreakAction, this, boost::placeholders::_1));
#ifdef ENABLE_WALLET
- uiInterface.LoadWallet.connect(boost::bind(ConnectWallet, this, _1));
+ uiInterface.LoadWallet.connect(boost::bind(ConnectWallet, this, boost::placeholders::_1));
#endif
}
void SplashScreen::unsubscribeFromCoreSignals()
{
// Disconnect signals from client
- uiInterface.InitMessage.disconnect(boost::bind(InitMessage, this, _1));
- uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
+ uiInterface.InitMessage.disconnect(boost::bind(InitMessage, this, boost::placeholders::_1));
+ uiInterface.ShowProgress.disconnect(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
#ifdef ENABLE_WALLET
if(pwalletMain)
- pwalletMain->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
+ pwalletMain->ShowProgress.disconnect(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
#endif
}
@@ -201,10 +206,13 @@ void SplashScreen::showMessage(const QString &message, int alignment, const QCol
void SplashScreen::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
- painter.drawPixmap(0, 0, pixmap);
- QRect r = rect().adjusted(5, 5, -5, -5);
- painter.setPen(curColor);
- painter.drawText(r, curAlignment, curMessage);
+ painter.setPen(QColor(255, 255, 255)); // White frame
+ painter.drawPixmap(0, 0, pixmap); //draw background picture
+ painter.setBrush(QBrush(QColor(70, 0, 110, 30))); // RGBA dark purple, 30 transparent
+ QRect textBackgroundRect = rect().adjusted(7, 7, -7, -7);
+ painter.drawRect(textBackgroundRect); // draw rect
+ painter.setPen(curColor); //font color
+ painter.drawText(textBackgroundRect, curAlignment, curMessage); // print text
}
void SplashScreen::closeEvent(QCloseEvent *event)
diff --git a/src/qt/trafficgraphwidget.cpp b/src/qt/trafficgraphwidget.cpp
index bf89b928..51734d37 100644
--- a/src/qt/trafficgraphwidget.cpp
+++ b/src/qt/trafficgraphwidget.cpp
@@ -8,6 +8,7 @@
#include
#include
+#include
#include
#include
@@ -119,13 +120,13 @@ void TrafficGraphWidget::paintEvent(QPaintEvent *)
if(!queue.empty()) {
QPainterPath pIn;
- paintPath(pIn, queue, boost::bind(chooseIn,_1));
+ paintPath(pIn, queue, boost::bind(chooseIn,boost::placeholders::_1));
painter.fillPath(pIn, QColor(0, 255, 0, 128));
painter.setPen(Qt::green);
painter.drawPath(pIn);
QPainterPath pOut;
- paintPath(pOut, queue, boost::bind(chooseOut,_1));
+ paintPath(pOut, queue, boost::bind(chooseOut,boost::placeholders::_1));
painter.fillPath(pOut, QColor(255, 0, 0, 128));
painter.setPen(Qt::red);
painter.drawPath(pOut);
diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp
index 5ba8e022..ecc32b43 100644
--- a/src/qt/transactiontablemodel.cpp
+++ b/src/qt/transactiontablemodel.cpp
@@ -801,13 +801,13 @@ static void ShowProgress(TransactionTableModel *ttm, const std::string &title, i
void TransactionTableModel::subscribeToCoreSignals()
{
// Connect signals to wallet
- wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3));
- wallet->ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
+ wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
+ wallet->ShowProgress.connect(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
}
void TransactionTableModel::unsubscribeFromCoreSignals()
{
// Disconnect signals from wallet
- wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3));
- wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
+ wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
+ wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
}
diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp
index 93085db2..9bb3a3d8 100644
--- a/src/qt/walletmodel.cpp
+++ b/src/qt/walletmodel.cpp
@@ -557,21 +557,21 @@ static void NotifyWatchonlyChanged(WalletModel *walletmodel, bool fHaveWatchonly
void WalletModel::subscribeToCoreSignals()
{
// Connect signals to wallet
- wallet->NotifyStatusChanged.connect(boost::bind(&NotifyKeyStoreStatusChanged, this, _1));
- wallet->NotifyAddressBookChanged.connect(boost::bind(NotifyAddressBookChanged, this, _1, _2, _3, _4, _5, _6));
- wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3));
- wallet->ShowProgress.connect(boost::bind(ShowProgress, this, _1, _2));
- wallet->NotifyWatchonlyChanged.connect(boost::bind(NotifyWatchonlyChanged, this, _1));
+ wallet->NotifyStatusChanged.connect(boost::bind(&NotifyKeyStoreStatusChanged, this, boost::placeholders::_1));
+ wallet->NotifyAddressBookChanged.connect(boost::bind(NotifyAddressBookChanged, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4, boost::placeholders::_5, boost::placeholders::_6));
+ wallet->NotifyTransactionChanged.connect(boost::bind(NotifyTransactionChanged, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
+ wallet->ShowProgress.connect(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
+ wallet->NotifyWatchonlyChanged.connect(boost::bind(NotifyWatchonlyChanged, this, boost::placeholders::_1));
}
void WalletModel::unsubscribeFromCoreSignals()
{
// Disconnect signals from wallet
- wallet->NotifyStatusChanged.disconnect(boost::bind(&NotifyKeyStoreStatusChanged, this, _1));
- wallet->NotifyAddressBookChanged.disconnect(boost::bind(NotifyAddressBookChanged, this, _1, _2, _3, _4, _5, _6));
- wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3));
- wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2));
- wallet->NotifyWatchonlyChanged.disconnect(boost::bind(NotifyWatchonlyChanged, this, _1));
+ wallet->NotifyStatusChanged.disconnect(boost::bind(&NotifyKeyStoreStatusChanged, this, boost::placeholders::_1));
+ wallet->NotifyAddressBookChanged.disconnect(boost::bind(NotifyAddressBookChanged, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4, boost::placeholders::_5, boost::placeholders::_6));
+ wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
+ wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this, boost::placeholders::_1, boost::placeholders::_2));
+ wallet->NotifyWatchonlyChanged.disconnect(boost::bind(NotifyWatchonlyChanged, this, boost::placeholders::_1));
}
// WalletModel::UnlockContext implementation
diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp
index 36546878..087bb770 100644
--- a/src/rpc/blockchain.cpp
+++ b/src/rpc/blockchain.cpp
@@ -94,7 +94,7 @@ UniValue blockheaderToJSON(const CBlockIndex* blockindex)
UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool txDetails = false)
{
UniValue result(UniValue::VOBJ);
- result.push_back(Pair("hash", block.GetHash().GetHex()));
+ result.push_back(Pair("hash", block.GetPOWHash().GetHex()));
int confirmations = -1;
// Only report confirmations if the block is on the main chain
if (chainActive.Contains(blockindex))
diff --git a/src/rpc/mining.cpp b/src/rpc/mining.cpp
index af133c4a..e4daea64 100644
--- a/src/rpc/mining.cpp
+++ b/src/rpc/mining.cpp
@@ -173,7 +173,7 @@ UniValue generate(const UniValue& params, bool fHelp)
LOCK(cs_main);
IncrementExtraNonce(pblock, chainActive.Tip(), nExtraNonce);
}
- while (!CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus())) {
+ while (!CheckProofOfWork(pblock->GetPOWHash(), pblock->nBits, Params().GetConsensus())) {
// Yes, there is a chance every nonce could fail to satisfy the -regtest
// target -- 1 in 2^(2^32). That ain't gonna happen.
++pblock->nNonce;
@@ -495,16 +495,18 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
if(!g_connman)
throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
- if (g_connman->GetNodeCount(CConnman::CONNECTIONS_ALL) == 0)
- throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "PEPEPOW Core is not connected!");
+ if (Params().MiningRequiresPeers()) {
+ if (g_connman->GetNodeCount(CConnman::CONNECTIONS_ALL) == 0)
+ throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "PEPEPOW Core is not connected!");
+ }
if (IsInitialBlockDownload())
throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "PEPEPOW Core is downloading blocks...");
// when enforcement is on we need information about a masternode payee or otherwise our block is going to be orphaned by the network
CScript payee;
- if (sporkManager.IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT)
- && !masternodeSync.IsWinnersListSynced()
+ // if (sporkManager.IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT) /* Actually do it ahead of SPORK8 */
+ if (!masternodeSync.IsWinnersListSynced()
&& !mnpayments.GetBlockPayee(chainActive.Height() + 1, payee))
throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "PEPEPOW Core is downloading masternode winners...");
@@ -725,7 +727,7 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
}
result.push_back(Pair("masternode", masternodeObj));
result.push_back(Pair("masternode_payments_started", pindexPrev->nHeight + 1 > Params().GetConsensus().nMasternodePaymentsStartBlock));
- result.push_back(Pair("masternode_payments_enforced", sporkManager.IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT)));
+ result.push_back(Pair("masternode_payments_enforced", true)); /* Do it ahead of SPORK8 */
UniValue superblockObjArray(UniValue::VARR);
if(pblock->voutSuperblock.size()) {
@@ -744,21 +746,71 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp)
result.push_back(Pair("superblocks_started", pindexPrev->nHeight + 1 > Params().GetConsensus().nSuperblockStartBlock));
result.push_back(Pair("superblocks_enabled", sporkManager.IsSporkActive(SPORK_9_SUPERBLOCKS_ENABLED)));
-
- UniValue foundationArray(UniValue::VARR);
- int h = pindexPrev->nHeight+1;
- int pos = 0;
-
- CBitcoinAddress address2(jijin[pos]);
- CScript FOUNDER_19_1_SCRIPT = GetScriptForDestination(address2.Get());
- UniValue entry(UniValue::VOBJ);
- entry.push_back(Pair("payee", address2.ToString().c_str()));
- entry.push_back(Pair("script", HexStr(FOUNDER_19_1_SCRIPT.begin(), FOUNDER_19_1_SCRIPT.end())));
- entry.push_back(Pair("amount", FOUNDATION));
- foundationArray.push_back(entry);
-
-
- result.push_back(Pair("foundation", foundationArray));
+ // 2.2.1.6 25th August 2023 - Foztor
+ // Pools that use getblocktemplate get confused, we should have removed this as part of 2.2 anyway.
+ // Thanks to PinPin @zergpool for helping to find this.
+ //
+ // 2.4.1.0 Jan 2024 - Foztor
+ // We choose to re-introduce the Foundation Fee.....
+
+ UniValue foundationArray(UniValue::VARR);
+ int h = pindexPrev->nHeight+1;
+ int pos = 0;
+
+
+
+
+ static const char* jijin[] = {
+ "PHjJrmyDGCAjQFsbiucsC1Ex1nPbu8hgiC",
+ };
+
+ static const char* jijin3[] = {
+ "PCwVHWuFMFDNGN86m86bkXhBwZoCNxbFvt",
+ };
+ static const char* jijin4[] = {
+ "yS3Ep2qvaz31uxM7VGN1fabt6zFNd8XKUB",
+ };
+
+
+
+ static const char* jijin2[] = {
+ "ydZdAomNCF3y5oX45vY9g34attJv2RSenG",
+ };
+
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ CBitcoinAddress addressF(jijin2[pos]);
+ CScript FOUNDER_19_1_SCRIPT = GetScriptForDestination(addressF.Get());
+ CAmount foundationPayment = GetFoundationPayment(h,0);
+ UniValue entry(UniValue::VOBJ);
+ entry.push_back(Pair("payee", addressF.ToString().c_str()));
+ entry.push_back(Pair("script", HexStr(FOUNDER_19_1_SCRIPT.begin(), FOUNDER_19_1_SCRIPT.end())));
+ entry.push_back(Pair("amount", foundationPayment));
+ foundationArray.push_back(entry);
+ } else {
+ if(Params().NetworkIDString() == CBaseChainParams::TESTNET) {
+ CBitcoinAddress addressF(jijin4[pos]);
+ CScript FOUNDER_19_1_SCRIPT = GetScriptForDestination(addressF.Get());
+ CAmount foundationPayment = GetFoundationPayment(h,1);
+ UniValue entry(UniValue::VOBJ);
+ entry.push_back(Pair("payee", addressF.ToString().c_str()));
+ entry.push_back(Pair("script", HexStr(FOUNDER_19_1_SCRIPT.begin(), FOUNDER_19_1_SCRIPT.end())));
+ entry.push_back(Pair("amount", foundationPayment));
+ foundationArray.push_back(entry);
+ } else {
+ CBitcoinAddress addressF(jijin[pos]);
+ CScript FOUNDER_19_1_SCRIPT = GetScriptForDestination(addressF.Get());
+ CAmount foundationPayment = GetFoundationPayment(h,1);
+ UniValue entry(UniValue::VOBJ);
+ entry.push_back(Pair("payee", addressF.ToString().c_str()));
+ entry.push_back(Pair("script", HexStr(FOUNDER_19_1_SCRIPT.begin(), FOUNDER_19_1_SCRIPT.end())));
+ entry.push_back(Pair("amount", foundationPayment));
+ foundationArray.push_back(entry);
+ }
+ }
+
+
+ result.push_back(Pair("foundation", foundationArray));
+ // End of removal of foundation from getblocktemplate in 2.2.1.6
return result;
}
diff --git a/src/script/PEPEPOWconsensus.h b/src/script/PEPEPOWconsensus.h
new file mode 100644
index 00000000..ff7dc4a8
--- /dev/null
+++ b/src/script/PEPEPOWconsensus.h
@@ -0,0 +1,69 @@
+// Copyright (c) 2009-2010 Satoshi Nakamoto
+// Copyright (c) 2009-2015 The Bitcoin Core developers
+// Distributed under the MIT software license, see the accompanying
+// file COPYING or http://www.opensource.org/licenses/mit-license.php.
+
+#ifndef BITCOIN_BITCOINCONSENSUS_H
+#define BITCOIN_BITCOINCONSENSUS_H
+
+#if defined(BUILD_BITCOIN_INTERNAL) && defined(HAVE_CONFIG_H)
+#include "config/PEPEPOW-config.h"
+ #if defined(_WIN32)
+ #if defined(DLL_EXPORT)
+ #if defined(HAVE_FUNC_ATTRIBUTE_DLLEXPORT)
+ #define EXPORT_SYMBOL __declspec(dllexport)
+ #else
+ #define EXPORT_SYMBOL
+ #endif
+ #endif
+ #elif defined(HAVE_FUNC_ATTRIBUTE_VISIBILITY)
+ #define EXPORT_SYMBOL __attribute__ ((visibility ("default")))
+ #endif
+#elif defined(MSC_VER) && !defined(STATIC_LIBBITCOINCONSENSUS)
+ #define EXPORT_SYMBOL __declspec(dllimport)
+#endif
+
+#ifndef EXPORT_SYMBOL
+ #define EXPORT_SYMBOL
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define BITCOINCONSENSUS_API_VER 0
+
+typedef enum PEPEPOWconsensus_error_t
+{
+ PEPEPOWconsensus_ERR_OK = 0,
+ PEPEPOWconsensus_ERR_TX_INDEX,
+ PEPEPOWconsensus_ERR_TX_SIZE_MISMATCH,
+ PEPEPOWconsensus_ERR_TX_DESERIALIZE,
+} PEPEPOWconsensus_error;
+
+/** Script verification flags */
+enum
+{
+ PEPEPOWconsensus_SCRIPT_FLAGS_VERIFY_NONE = 0,
+ PEPEPOWconsensus_SCRIPT_FLAGS_VERIFY_P2SH = (1U << 0), // evaluate P2SH (BIP16) subscripts
+ PEPEPOWconsensus_SCRIPT_FLAGS_VERIFY_DERSIG = (1U << 2), // enforce strict DER (BIP66) compliance
+ PEPEPOWconsensus_SCRIPT_FLAGS_VERIFY_CHECKLOCKTIMEVERIFY = (1U << 9), // enable CHECKLOCKTIMEVERIFY (BIP65)
+};
+
+/// Returns 1 if the input nIn of the serialized transaction pointed to by
+/// txTo correctly spends the scriptPubKey pointed to by scriptPubKey under
+/// the additional constraints specified by flags.
+/// If not NULL, err will contain an error/success code for the operation
+EXPORT_SYMBOL int PEPEPOWconsensus_verify_script(const unsigned char *scriptPubKey, unsigned int scriptPubKeyLen,
+ const unsigned char *txTo , unsigned int txToLen,
+ unsigned int nIn, unsigned int flags, PEPEPOWconsensus_error* err);
+
+EXPORT_SYMBOL unsigned int PEPEPOWconsensus_version();
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#undef EXPORT_SYMBOL
+
+#endif // BITCOIN_BITCOINCONSENSUS_H
diff --git a/src/secp256k1/Makefile.am b/src/secp256k1/Makefile.am
index 7772a4e9..782f8252 100644
--- a/src/secp256k1/Makefile.am
+++ b/src/secp256k1/Makefile.am
@@ -75,8 +75,9 @@ TESTS = tests
endif
if USE_ECMULT_STATIC_PRECOMPUTATION
-CPPFLAGS_FOR_BUILD +=-I$(top_srcdir)
-CFLAGS_FOR_BUILD += -Wall -Wextra -Wno-unused-function
+CPPFLAGS_FOR_BUILD =-I$(top_srcdir)
+CFLAGS_FOR_BUILD = -Wall -Wextra -Wno-unused-function
+CC_FOR_BUILD = cc
gen_context_OBJECTS = gen_context.o
gen_context_BIN = gen_context$(BUILD_EXEEXT)
diff --git a/src/spork.cpp b/src/spork.cpp
index 1e191c89..0ee8495e 100644
--- a/src/spork.cpp
+++ b/src/spork.cpp
@@ -134,6 +134,8 @@ bool CSporkManager::IsSporkActive(int nSporkID)
case SPORK_12_RECONSIDER_BLOCKS: r = SPORK_12_RECONSIDER_BLOCKS_DEFAULT; break;
case SPORK_13_OLD_SUPERBLOCK_FLAG: r = SPORK_13_OLD_SUPERBLOCK_FLAG_DEFAULT; break;
case SPORK_14_REQUIRE_SENTINEL_FLAG: r = SPORK_14_REQUIRE_SENTINEL_FLAG_DEFAULT; break;
+ case SPORK_15_REQUIRE_FOUNDATION_FEE: r = SPORK_15_REQUIRE_FOUNDATION_FEE_DEFAULT; break;
+ case SPORK_16_XELISV2: r = SPORK_16_XELISV2_DEFAULT; break;
default:
LogPrint("spork", "CSporkManager::IsSporkActive -- Unknown Spork ID %d\n", nSporkID);
r = 4070908800ULL; // 2099-1-1 i.e. off by default
@@ -160,6 +162,8 @@ int64_t CSporkManager::GetSporkValue(int nSporkID)
case SPORK_12_RECONSIDER_BLOCKS: return SPORK_12_RECONSIDER_BLOCKS_DEFAULT;
case SPORK_13_OLD_SUPERBLOCK_FLAG: return SPORK_13_OLD_SUPERBLOCK_FLAG_DEFAULT;
case SPORK_14_REQUIRE_SENTINEL_FLAG: return SPORK_14_REQUIRE_SENTINEL_FLAG_DEFAULT;
+ case SPORK_15_REQUIRE_FOUNDATION_FEE: return SPORK_15_REQUIRE_FOUNDATION_FEE_DEFAULT;
+ case SPORK_16_XELISV2: return SPORK_16_XELISV2_DEFAULT;
default:
LogPrint("spork", "CSporkManager::GetSporkValue -- Unknown Spork ID %d\n", nSporkID);
return -1;
@@ -178,6 +182,8 @@ int CSporkManager::GetSporkIDByName(std::string strName)
if (strName == "SPORK_12_RECONSIDER_BLOCKS") return SPORK_12_RECONSIDER_BLOCKS;
if (strName == "SPORK_13_OLD_SUPERBLOCK_FLAG") return SPORK_13_OLD_SUPERBLOCK_FLAG;
if (strName == "SPORK_14_REQUIRE_SENTINEL_FLAG") return SPORK_14_REQUIRE_SENTINEL_FLAG;
+ if (strName == "SPORK_15_REQUIRE_FOUNDATION_FEE") return SPORK_15_REQUIRE_FOUNDATION_FEE;
+ if (strName == "SPORK_16_XELISV2") return SPORK_16_XELISV2;
LogPrint("spork", "CSporkManager::GetSporkIDByName -- Unknown Spork name '%s'\n", strName);
return -1;
@@ -195,6 +201,8 @@ std::string CSporkManager::GetSporkNameByID(int nSporkID)
case SPORK_12_RECONSIDER_BLOCKS: return "SPORK_12_RECONSIDER_BLOCKS";
case SPORK_13_OLD_SUPERBLOCK_FLAG: return "SPORK_13_OLD_SUPERBLOCK_FLAG";
case SPORK_14_REQUIRE_SENTINEL_FLAG: return "SPORK_14_REQUIRE_SENTINEL_FLAG";
+ case SPORK_15_REQUIRE_FOUNDATION_FEE: return "SPORK_15_REQUIRE_FOUNDATION_FEE_DEFAULT";
+ case SPORK_16_XELISV2: return "SPORK_16_XELISV2_DEFAULT_DEFAULT";
default:
LogPrint("spork", "CSporkManager::GetSporkNameByID -- Unknown Spork ID %d\n", nSporkID);
return "Unknown";
diff --git a/src/spork.h b/src/spork.h
index 06baf9af..df337ac7 100644
--- a/src/spork.h
+++ b/src/spork.h
@@ -17,7 +17,7 @@ class CSporkManager;
- This would result in old clients getting confused about which spork is for what
*/
static const int SPORK_START = 10001;
-static const int SPORK_END = 10013;
+static const int SPORK_END = 10015;
static const int SPORK_2_INSTANTSEND_ENABLED = 10001;
static const int SPORK_3_INSTANTSEND_BLOCK_FILTERING = 10002;
@@ -28,16 +28,20 @@ static const int SPORK_10_MASTERNODE_PAY_UPDATED_NODES = 10009;
static const int SPORK_12_RECONSIDER_BLOCKS = 10011;
static const int SPORK_13_OLD_SUPERBLOCK_FLAG = 10012;
static const int SPORK_14_REQUIRE_SENTINEL_FLAG = 10013;
+static const int SPORK_15_REQUIRE_FOUNDATION_FEE = 10014;
+static const int SPORK_16_XELISV2 = 10015;
static const int64_t SPORK_2_INSTANTSEND_ENABLED_DEFAULT = 0; // ON
static const int64_t SPORK_3_INSTANTSEND_BLOCK_FILTERING_DEFAULT = 0; // ON
static const int64_t SPORK_5_INSTANTSEND_MAX_VALUE_DEFAULT = 1000; // 1000 PEPEW
-static const int64_t SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT = 1685008449ULL;// OFF
+static const int64_t SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT = 1710183624; // 11th March 2024 19:00 UTC - now superblock logic is fixed
static const int64_t SPORK_9_SUPERBLOCKS_ENABLED_DEFAULT = 4070908800ULL;// OFF
static const int64_t SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT = 4070908800ULL;// OFF
static const int64_t SPORK_12_RECONSIDER_BLOCKS_DEFAULT = 0; // 0 BLOCKS
static const int64_t SPORK_13_OLD_SUPERBLOCK_FLAG_DEFAULT = 4070908800ULL;// OFF
static const int64_t SPORK_14_REQUIRE_SENTINEL_FLAG_DEFAULT = 4070908800ULL;// OFF
+static const int64_t SPORK_15_REQUIRE_FOUNDATION_FEE_DEFAULT = 1706814000ULL;// 1st Feb 2024 19:00 UTC
+static const int64_t SPORK_16_XELISV2_DEFAULT = 1724925600ULL;// 29th August 2024 10:00 UTV - Prepare for XelV2
extern std::map mapSporks;
extern CSporkManager sporkManager;
diff --git a/src/test/test_PEPEPOW.h b/src/test/test_PEPEPOW.h
new file mode 100644
index 00000000..69f761e3
--- /dev/null
+++ b/src/test/test_PEPEPOW.h
@@ -0,0 +1,90 @@
+#ifndef BITCOIN_TEST_TEST_PEPE_H
+#define BITCOIN_TEST_TEST_PEPE_H
+
+#include "chainparamsbase.h"
+#include "key.h"
+#include "pubkey.h"
+#include "txdb.h"
+#include "txmempool.h"
+
+#include
+#include
+
+/** Basic testing setup.
+ * This just configures logging and chain parameters.
+ */
+struct BasicTestingSetup {
+ ECCVerifyHandle globalVerifyHandle;
+
+ BasicTestingSetup(const std::string& chainName = CBaseChainParams::MAIN);
+ ~BasicTestingSetup();
+};
+
+/** Testing setup that configures a complete environment.
+ * Included are data directory, coins database, script check threads
+ * and wallet (if enabled) setup.
+ */
+class CConnman;
+struct TestingSetup: public BasicTestingSetup {
+ CCoinsViewDB *pcoinsdbview;
+ boost::filesystem::path pathTemp;
+ boost::thread_group threadGroup;
+ CConnman* connman;
+
+ TestingSetup(const std::string& chainName = CBaseChainParams::MAIN);
+ ~TestingSetup();
+};
+
+class CBlock;
+struct CMutableTransaction;
+class CScript;
+
+//
+// Testing fixture that pre-creates a
+// 100-block REGTEST-mode block chain
+//
+struct TestChain100Setup : public TestingSetup {
+ TestChain100Setup();
+
+ // Create a new block with just given transactions, coinbase paying to
+ // scriptPubKey, and try to add it to the current chain.
+ CBlock CreateAndProcessBlock(const std::vector& txns,
+ const CScript& scriptPubKey);
+
+ ~TestChain100Setup();
+
+ std::vector coinbaseTxns; // For convenience, coinbase transactions
+ CKey coinbaseKey; // private/public key needed to spend coinbase transactions
+};
+
+class CTxMemPoolEntry;
+class CTxMemPool;
+
+struct TestMemPoolEntryHelper
+{
+ // Default values
+ CAmount nFee;
+ int64_t nTime;
+ double dPriority;
+ unsigned int nHeight;
+ bool hadNoDependencies;
+ bool spendsCoinbase;
+ unsigned int sigOpCount;
+ LockPoints lp;
+
+ TestMemPoolEntryHelper() :
+ nFee(0), nTime(0), dPriority(0.0), nHeight(1),
+ hadNoDependencies(false), spendsCoinbase(false), sigOpCount(1) { }
+
+ CTxMemPoolEntry FromTx(CMutableTransaction &tx, CTxMemPool *pool = NULL);
+
+ // Change the default value
+ TestMemPoolEntryHelper &Fee(CAmount _fee) { nFee = _fee; return *this; }
+ TestMemPoolEntryHelper &Time(int64_t _time) { nTime = _time; return *this; }
+ TestMemPoolEntryHelper &Priority(double _priority) { dPriority = _priority; return *this; }
+ TestMemPoolEntryHelper &Height(unsigned int _height) { nHeight = _height; return *this; }
+ TestMemPoolEntryHelper &HadNoDependencies(bool _hnd) { hadNoDependencies = _hnd; return *this; }
+ TestMemPoolEntryHelper &SpendsCoinbase(bool _flag) { spendsCoinbase = _flag; return *this; }
+ TestMemPoolEntryHelper &SigOps(unsigned int _sigops) { sigOpCount = _sigops; return *this; }
+};
+#endif
diff --git a/src/validation.cpp b/src/validation.cpp
index 03895e63..ac38524a 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -519,10 +519,17 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state)
// LogPrintf("------------CheckTransaction: begin CheckTransaction----------------\n");
if (tx.vin[0].scriptSig.size() < 2 || tx.vin[0].scriptSig.size() > 100)
return state.DoS(100, false, REJECT_INVALID, "bad-cb-length");
- if (!CheckFoundersInputs(tx, state, chainActive.Height())){
-// LogPrintf("------------CheckTransaction: begin CheckFoundersInputs----------------\n");
- return false;
- }
+ // Get rid of FoundersFee Nonsense as of Protocol 30700 / Release 2.1
+ // Re-introduced with SPORK15 Jan 24
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) { // Always test Foundation input on Regtest networks
+ if (!CheckFoundersInputs(tx, state, chainActive.Height())){
+ return false; } // Returning True is a bad idea (TM)
+ } else {
+ if (sporkManager.IsSporkActive(SPORK_15_REQUIRE_FOUNDATION_FEE)) {
+ if (!CheckFoundersInputs(tx, state, chainActive.Height())){
+ return false;
+ } }
+ }
// LogPrintf("------------CheckTransaction: begin CheckTransaction--end----------------\n");
@@ -541,16 +548,16 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state)
}
bool CheckFoundersInputs(const CTransaction &tx, CValidationState &state, int nHeight){
-// LogPrintf("----------------height= %i,FOUNDATION_HEIGHT=%i ----------------\n", nHeight,FOUNDATION_HEIGHT);
+ if( nHeight < 1070290) { // Bad things happened with SPORK_15, so we skip blocks before this height when we stalled
+ return true;
+ }
+
+
- if(nHeight < FOUNDATION_HEIGHT + 400){
-// LogPrintf("----------------nHeight < FOUNDATION_HEIGHT + 10,height= %i,FOUNDATION_HEIGHT=%i ----------------\n", nHeight,FOUNDATION_HEIGHT);
- return true;
- }
if(tx.vin[0].prevout.IsNull()){
LogPrintf("----------------CheckFoundersInputs:tx.GetHash=%s\n tx=%s\n", tx.GetHash().ToString(),tx.ToString());
CAmount res = GetBlockSubsidy(0,nHeight,Params().GetConsensus(), false);
- LogPrintf("-----------------fund count= %lld,height=%i\n", res *FOUNDATION_RATE/100/COIN,nHeight);
+ // LogPrintf("-----------------fund count= %lld,height=%i\n", res *FOUNDATION_RATE/100/COIN,nHeight);
//LogPrintf("block.vtx[0].GetValueOut() %lld <= blockReward %lld\n", block.vtx[0].GetValueOut(), blockReward);
}
if(!tx.vin[0].prevout.IsNull()) {
@@ -558,27 +565,81 @@ bool CheckFoundersInputs(const CTransaction &tx, CValidationState &state, int nH
return true;
}
bool found_1 = false;
+ bool found_2 = false;
+ bool found_3 = false;
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ found_1 = true;
+ }
+ if(Params().NetworkIDString() == CBaseChainParams::TESTNET) {
+ found_3 = true;
+ }
+
+ static const char* jijin1[] = {
+ "ydZdAomNCF3y5oX45vY9g34attJv2RSenG",
+ };
- CScript FOUNDER_1_SCRIPT = GetScriptForDestination(CBitcoinAddress(jijin[0]).Get());
-
+ static const char* jijinT[] = {
+ "ydZdAomNCF3y5oX45vY9g34attJv2RSenG",
+ };
+
+ static const char* jijin[] = {
+ "PHjJrmyDGCAjQFsbiucsC1Ex1nPbu8hgiC",
+ };
+ static const char* jinew[] = {
+ "PCwVHWuFMFDNGN86m86bkXhBwZoCNxbFvt",
+ };
+
+ CScript FOUNDER_1_SCRIPT = GetScriptForDestination(CBitcoinAddress(jijin[0]).Get());
+ CScript FOUNDER_2_SCRIPT = GetScriptForDestination(CBitcoinAddress(jinew[0]).Get());
+ CScript FOUNDER_3_SCRIPT = GetScriptForDestination(CBitcoinAddress(jijinT[0]).Get());
+/*
+ CAmount foundAmount = GetFoundationPayment(nHeight+1,1); // Fix offByOneError for Superblocks
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ FOUNDER_1_SCRIPT = GetScriptForDestination(CBitcoinAddress(jijin1[0]).Get());
+ foundAmount = GetFoundationPayment(nHeight+1,0); // Fix offByOneError for Superblocks
+ }
+ */
+ CAmount foundAmount = 250.0; // See Off By One Error Above /* Over-ride this seems to cause forks. Why, who knows *?
+ // LogPrintf("Expecting FOUNDATION PAYMENT of %lld at height=%i\n", foundAmount, nHeight+1);
BOOST_FOREACH(const CTxOut &output, tx.vout)
{
- if (output.scriptPubKey == FOUNDER_1_SCRIPT && output.nValue == FOUNDATION)
+ if (output.scriptPubKey == FOUNDER_1_SCRIPT && output.nValue >= foundAmount) // Superblocks will be bigger
{
+ LogPrintf("FOUND CORRECT FOUNDATION PAYMENT at height=%i\n", nHeight+1);
found_1 = true;
- continue;
+ found_2 = true;
+ // continue;
+ }
+ if (output.scriptPubKey == FOUNDER_2_SCRIPT && output.nValue >= foundAmount) // Superblocks will be bigger
+ {
+ LogPrintf("FOUND CORRECT FOUNDATION PAYMENT 2 at height=%i\n", nHeight+1);
+ found_1 = true;
+ found_2 = true;
+ // continue;
+ }
+ if (output.scriptPubKey == FOUNDER_3_SCRIPT && output.nValue >= foundAmount) // Superblocks will be bigger
+ {
+ LogPrintf("FOUND CORRECT TESTNET FOUNDATION PAYMENT 2 at height=%i\n", nHeight+1);
+ found_1 = true;
+ found_2 = true;
+ // continue;
}
}
-
+ if (!found_2 && found_1) { // Can only happen on REGTEST
+ LogPrintf("ERROR: REGTEST MISSING FOUNDATION PAYMENT at height=%i\n", nHeight+1);
+ }
if (!found_1)
{
+ LogPrintf("ERROR: MISSING/INCORRECT FOUNDATION PAYMENT at height=%i\n", nHeight+1);
// LogPrint("mempool", "----------------CTransaction::CheckTransaction() : founders reward missing,%i---------------\n", nHeight);
return state.DoS(100, false, REJECT_FOUNDER_REWARD_MISSING,"CTransaction::CheckTransaction() : founders reward missing");
+
}
-// LogPrint("----------------CTransaction::CheckTransaction() : return true----------------\n");
+ LogPrintf("----------------CheckFoundersInputs() : return true----------------\n");
return true;
+
}
bool ContextualCheckTransaction(const CTransaction& tx, CValidationState &state, CBlockIndex * const pindexPrev)
@@ -1248,7 +1309,7 @@ bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos, const Consensus:
}
// Check the header
- if (!CheckProofOfWork(block.GetHash(), block.nBits, consensusParams))
+ if (!CheckProofOfWork(block.GetPOWHash(), block.nBits, consensusParams))
return error("ReadBlockFromDisk: Errors in block header at %s", pos.ToString());
return true;
@@ -1259,8 +1320,9 @@ bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus
if (!ReadBlockFromDisk(block, pindex->GetBlockPos(), consensusParams))
return false;
if (block.GetHash() != pindex->GetBlockHash())
- return error("ReadBlockFromDisk(CBlock&, CBlockIndex*): GetHash() doesn't match index for %s at %s",
- pindex->ToString(), pindex->GetBlockPos().ToString());
+ return error("ReadBlockFromDisk(CBlock&, CBlockIndex*): GetHash() %s doesn't match index for %s at %s",
+ block.GetHash().ToString(), pindex->ToString(), pindex->GetBlockPos().ToString());
+ //ERROR: ReadBlockFromDisk(CBlock&, CBlockIndex*): GetHash() doesn't match index for CBlockIndex(pprev=0x7f13180035f0, nHeight=4, merkle=9e613bd206ffc5899d5daa673c5b41e95c4a6530fbbacb8e01a55921809e47a2, hashBlock=001216136a9c591d3a83313fadb56d82ce3c75a16641cfb0074b1f52cf285340) at CBlockDiskPos(nFile=0, nPos=985)
return true;
}
@@ -1291,16 +1353,71 @@ NOTE: unlike bitcoin we are using PREVIOUS block height here,
*/
CAmount GetBlockSubsidy(int nPrevBits, int nPrevHeight, const Consensus::Params& consensusParams, bool fSuperblockPartOnly)
{
- CAmount nSubsidy = 50000 * COIN;
+ CAmount nSubsidy = 0 * COIN;
+
+ // CAmount CBonusAmount = 0 * COIN;
if(nPrevHeight < 129600){
nSubsidy = 100000 *COIN;
- }else if(nPrevHeight < 259200) {
- nSubsidy = 50000 * COIN;
+ }else if(nPrevHeight < 259200){
+ nSubsidy = 50000*COIN;
}else{
- nSubsidy = 10000*COIN;
+ nSubsidy = 5000*COIN;
+ }
+ // Well that last halving wasn't a halving was it?
+ // We will restore the final halving at block height 385000
+ // As a result of the community vote on 17th August 2023
+ if(nPrevHeight > 385000) {
+ nSubsidy = 25000*COIN;
+ }
+ if(nPrevHeight > 514600) {
+ nSubsidy = 12500*COIN;
+ }
+ if(nPrevHeight > 644200) {
+ nSubsidy = 6250*COIN;
+ }
+ if(nPrevHeight > 773800) {
+ nSubsidy = 5000*COIN;
}
+
+ // Get to end values quickly on RegTest
+
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ if(nPrevHeight > 1500) {
+ nSubsidy = 5000*COIN;
+ } else {
+ nSubsidy = 1000000*COIN;
+ }
+ }
+ // With the XEL2 adoption, we will reward more for 12 months, tailing down slowly month by month
+ // 4320 blocks per day -> 129600 blocks per 30 day period
+
+ if(nPrevHeight >= 1930000) { // Extra XelV2 rewards
+ int BonusHeight = (1930000 + (25 * 129600)) - nPrevHeight;
+ if(BonusHeight > 0) {
+ int quotient = BonusHeight/(129600); // Lol - do the maths right Foz
+ if (quotient > 0 ) {
+ int bonusAmount = 500 * quotient;
+ nSubsidy = nSubsidy + bonusAmount*COIN;
+ }
+ }
+ }
+
+ if(Params().NetworkIDString() == CBaseChainParams::TESTNET) {
+ if(nPrevHeight >= 3950) { // Extra XelV2 rewards
+ int BonusHeight = (3950 + (25 * 100)) - nPrevHeight;
+ if(BonusHeight > 0) {
+ int quotient = BonusHeight/(100); // Lol - do the maths right Foz
+ if (quotient > 0 ) {
+ int bonusAmount = 500 * quotient;
+ nSubsidy = nSubsidy + bonusAmount*COIN;
+ }
+ }
+ }
+ } // End Testnet
+
+ // So called SuperBlocks
if(nPrevHeight >= FOUNDATION_HEIGHT){
if(nPrevHeight % 1000 == 998) {
nSubsidy = nSubsidy * 5;
@@ -1309,20 +1426,52 @@ CAmount GetBlockSubsidy(int nPrevBits, int nPrevHeight, const Consensus::Params&
}
}
- // Hard fork to reduce the block reward by 10 extra percent (allowing budget/superblocks)
- //CAmount nSuperblockPart = (nPrevHeight > consensusParams.nBudgetPaymentsStartBlock) ? nSubsidy/10 : 0;
return nSubsidy;
}
CAmount GetMasternodePayment(int nHeight, CAmount blockValue)
{
- CAmount nSubsidy = blockValue * 20/100; // start at 20%
-
-
+ int nMainNet = 1;
+ if(Params().NetworkIDString() == CBaseChainParams::REGTEST) {
+ nMainNet = 0;
+ };
+ CAmount foundationPayment = GetFoundationPayment(nHeight,nMainNet);
+ CAmount nSubsidy = (blockValue - foundationPayment) * 35/100; // start at 20% Updated to 35% with version 2.2
return nSubsidy;
}
+CAmount GetFoundationPayment(int nHeight, int nMainNet)
+{
+ // CAmount nSubsidy = blockValue * 5/100; // start at 5%
+ if(nMainNet == 0) {
+ CAmount nSubsidy = 250*COIN;
+ if( nHeight % 100 == 88 ) { // Double reward
+ nSubsidy = nSubsidy * 2;
+ }
+ if( nHeight % 1000 == 999 ) { // 5 times reward
+ nSubsidy = nSubsidy * 5;
+ }
+ if( nHeight < 500) {
+ nSubsidy = 0*COIN;
+ }
+ return nSubsidy;
+ }
+ CAmount nSubsidy = 0*COIN;
+ if (nHeight > 1065649) { // Roughly 19:00 UTC 30th Jan 2024
+ nSubsidy = 250*COIN;
+ }
+ if( nHeight % 100 == 88 ) { // Double reward
+ nSubsidy = nSubsidy * 2;
+ }
+ if( nHeight % 1000 == 999 ) { // 5 times reward
+ nSubsidy = nSubsidy * 5;
+ }
+ return nSubsidy;
+
+}
+
+
bool IsInitialBlockDownload()
{
static bool lockIBDState = false;
@@ -1903,6 +2052,13 @@ int32_t ComputeBlockVersion(const CBlockIndex* pindexPrev, const Consensus::Para
LOCK(cs_main);
int32_t nVersion = VERSIONBITS_TOP_BITS;
+ /* if(pindexPrev->nHeight) {
+ LogPrintf("ComputeBlockVersion pindexPrev nHeight %d vs %d\n", pindexPrev->nHeight, params.nNewHashHeight);
+ }
+ */
+
+
+
for (int i = 0; i < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; i++) {
Consensus::DeploymentPos pos = Consensus::DeploymentPos(i);
ThresholdState state = VersionBitsState(pindexPrev, params, pos, versionbitscache);
@@ -1928,6 +2084,17 @@ int32_t ComputeBlockVersion(const CBlockIndex* pindexPrev, const Consensus::Para
}
}
+
+ if(pindexPrev->nHeight >= params.nNewHashHeight - 1) {
+ if (sporkManager.IsSporkActive(SPORK_16_XELISV2)) {
+ nVersion |= 0x8000;
+ }
+ if(Params().NetworkIDString() == CBaseChainParams::TESTNET) {
+ nVersion |= 0x8000;
+ }
+ // LogPrintf("ComputeBlockVersion: nHeight at %d so setting nVersion to %s\n", pindexPrev->nHeight, nVersion);
+ }
+ // LogPrintf("ComputeBlockVersion returns %s \n", nVersion);
return nVersion;
}
@@ -2258,7 +2425,7 @@ static bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockInd
}
if (!IsBlockPayeeValid(block.vtx[0], pindex->nHeight, blockReward)) {
- mapRejectedBlocks.insert(make_pair(block.GetHash(), GetTime()));
+ // mapRejectedBlocks.insert(make_pair(block.GetHash(), GetTime()));
return state.DoS(0, error("ConnectBlock(PEPEW): couldn't find masternode or superblock payments"),
REJECT_INVALID, "bad-cb-payee");
}
@@ -2483,11 +2650,13 @@ void static UpdateTip(CBlockIndex *pindexNew) {
}
}
}
- for (int i = 0; i < 100 && pindex != NULL; i++)
+ for (int i = 0; i < 100 && pindex != NULL && pindex->pprev != NULL; i++)
{
int32_t nExpectedVersion = ComputeBlockVersion(pindex->pprev, chainParams.GetConsensus(), true);
- if (pindex->nVersion > VERSIONBITS_LAST_OLD_BLOCK_VERSION && (pindex->nVersion & ~nExpectedVersion) != 0)
+ if (pindex->nVersion > VERSIONBITS_LAST_OLD_BLOCK_VERSION && (pindex->nVersion & ~nExpectedVersion) != 0) {
++nUpgraded;
+ LogPrintf("Wrong version %s at %s\n", nExpectedVersion, i );
+ }
pindex = pindex->pprev;
}
if (nUpgraded > 0)
@@ -3135,7 +3304,7 @@ bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigne
bool CheckBlockHeader(const CBlockHeader& block, CValidationState& state, bool fCheckPOW)
{
// Check proof of work matches claimed amount
- if (fCheckPOW && !CheckProofOfWork(block.GetHash(), block.nBits, Params().GetConsensus()))
+ if (fCheckPOW && !CheckProofOfWork(block.GetPOWHash(), block.nBits, Params().GetConsensus()))
return state.DoS(50, error("CheckBlockHeader(): proof of work failed"),
REJECT_INVALID, "high-hash");
@@ -3388,6 +3557,10 @@ static bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state
if (mi == mapBlockIndex.end())
return state.DoS(10, error("%s: prev block not found", __func__), 0, "bad-prevblk");
pindexPrev = (*mi).second;
+
+ if ((pindexPrev->nHeight + 1) >= chainparams.GetConsensus().nNewHashHeight && !(block.nVersion & 0x8000)) {
+ return error("BlockValidationResult::BLOCK_INVALID_HEADER invalid-version at height %s version %s\n", pindexPrev->nHeight, block.nVersion);
+ }
if (pindexPrev->nStatus & BLOCK_FAILED_MASK)
return state.DoS(100, error("%s: prev block invalid", __func__), REJECT_INVALID, "bad-prevblk");
@@ -3514,6 +3687,7 @@ static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned
bool ProcessNewBlock(const CChainParams& chainparams, const CBlock* pblock, bool fForceProcessing, const CDiskBlockPos* dbp, bool *fNewBlock)
{
+ LogPrintf("%s : STARTS\n", __func__);
{
LOCK(cs_main);
@@ -3529,6 +3703,7 @@ bool ProcessNewBlock(const CChainParams& chainparams, const CBlock* pblock, bool
}
}
+ LogPrintf("%s : NotifyHeaderTip\n", __func__);
NotifyHeaderTip();
CValidationState state; // Only used to report errors, not invalidity - ignore it
diff --git a/src/validation.h b/src/validation.h
index b7d3bbbc..644abf5c 100644
--- a/src/validation.h
+++ b/src/validation.h
@@ -264,6 +264,7 @@ bool ActivateBestChain(CValidationState& state, const CChainParams& chainparams,
double ConvertBitsToDouble(unsigned int nBits);
CAmount GetBlockSubsidy(int nBits, int nHeight, const Consensus::Params& consensusParams, bool fSuperblockPartOnly = false);
CAmount GetMasternodePayment(int nHeight, CAmount blockValue);
+CAmount GetFoundationPayment(int nHeight, int nMainNet);
/**
* Prune block and undo files (blk???.dat and undo???.dat) so that the disk space used is less than a user-defined target.
diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp
index 73c83b24..a42b89ec 100644
--- a/src/validationinterface.cpp
+++ b/src/validationinterface.cpp
@@ -13,33 +13,33 @@ CMainSignals& GetMainSignals()
}
void RegisterValidationInterface(CValidationInterface* pwalletIn) {
- g_signals.AcceptedBlockHeader.connect(boost::bind(&CValidationInterface::AcceptedBlockHeader, pwalletIn, _1));
- g_signals.NotifyHeaderTip.connect(boost::bind(&CValidationInterface::NotifyHeaderTip, pwalletIn, _1, _2));
- g_signals.UpdatedBlockTip.connect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, _1, _2, _3));
- g_signals.SyncTransaction.connect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, _1, _2));
- g_signals.NotifyTransactionLock.connect(boost::bind(&CValidationInterface::NotifyTransactionLock, pwalletIn, _1));
- g_signals.UpdatedTransaction.connect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, _1));
- g_signals.SetBestChain.connect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, _1));
- g_signals.Inventory.connect(boost::bind(&CValidationInterface::Inventory, pwalletIn, _1));
- g_signals.Broadcast.connect(boost::bind(&CValidationInterface::ResendWalletTransactions, pwalletIn, _1, _2));
- g_signals.BlockChecked.connect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, _1, _2));
- g_signals.ScriptForMining.connect(boost::bind(&CValidationInterface::GetScriptForMining, pwalletIn, _1));
- g_signals.BlockFound.connect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, _1));
+ g_signals.AcceptedBlockHeader.connect(boost::bind(&CValidationInterface::AcceptedBlockHeader, pwalletIn, boost::placeholders::_1));
+ g_signals.NotifyHeaderTip.connect(boost::bind(&CValidationInterface::NotifyHeaderTip, pwalletIn, boost::placeholders::_1, boost::placeholders::_2));
+ g_signals.UpdatedBlockTip.connect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
+ g_signals.SyncTransaction.connect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, boost::placeholders::_1, boost::placeholders::_2));
+ g_signals.NotifyTransactionLock.connect(boost::bind(&CValidationInterface::NotifyTransactionLock, pwalletIn, boost::placeholders::_1));
+ g_signals.UpdatedTransaction.connect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, boost::placeholders::_1));
+ g_signals.SetBestChain.connect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, boost::placeholders::_1));
+ g_signals.Inventory.connect(boost::bind(&CValidationInterface::Inventory, pwalletIn, boost::placeholders::_1));
+ g_signals.Broadcast.connect(boost::bind(&CValidationInterface::ResendWalletTransactions, pwalletIn, boost::placeholders::_1, boost::placeholders::_2));
+ g_signals.BlockChecked.connect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, boost::placeholders::_1, boost::placeholders::_2));
+ g_signals.ScriptForMining.connect(boost::bind(&CValidationInterface::GetScriptForMining, pwalletIn, boost::placeholders::_1));
+ g_signals.BlockFound.connect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, boost::placeholders::_1));
}
void UnregisterValidationInterface(CValidationInterface* pwalletIn) {
- g_signals.BlockFound.disconnect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, _1));
- g_signals.ScriptForMining.disconnect(boost::bind(&CValidationInterface::GetScriptForMining, pwalletIn, _1));
- g_signals.BlockChecked.disconnect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, _1, _2));
- g_signals.Broadcast.disconnect(boost::bind(&CValidationInterface::ResendWalletTransactions, pwalletIn, _1, _2));
- g_signals.Inventory.disconnect(boost::bind(&CValidationInterface::Inventory, pwalletIn, _1));
- g_signals.SetBestChain.disconnect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, _1));
- g_signals.UpdatedTransaction.disconnect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, _1));
- g_signals.NotifyTransactionLock.disconnect(boost::bind(&CValidationInterface::NotifyTransactionLock, pwalletIn, _1));
- g_signals.SyncTransaction.disconnect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, _1, _2));
- g_signals.UpdatedBlockTip.disconnect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, _1, _2, _3));
- g_signals.NotifyHeaderTip.disconnect(boost::bind(&CValidationInterface::NotifyHeaderTip, pwalletIn, _1, _2));
- g_signals.AcceptedBlockHeader.disconnect(boost::bind(&CValidationInterface::AcceptedBlockHeader, pwalletIn, _1));
+ g_signals.BlockFound.disconnect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, boost::placeholders::_1));
+ g_signals.ScriptForMining.disconnect(boost::bind(&CValidationInterface::GetScriptForMining, pwalletIn, boost::placeholders::_1));
+ g_signals.BlockChecked.disconnect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, boost::placeholders::_1, boost::placeholders::_2));
+ g_signals.Broadcast.disconnect(boost::bind(&CValidationInterface::ResendWalletTransactions, pwalletIn, boost::placeholders::_1, boost::placeholders::_2));
+ g_signals.Inventory.disconnect(boost::bind(&CValidationInterface::Inventory, pwalletIn, boost::placeholders::_1));
+ g_signals.SetBestChain.disconnect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, boost::placeholders::_1));
+ g_signals.UpdatedTransaction.disconnect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, boost::placeholders::_1));
+ g_signals.NotifyTransactionLock.disconnect(boost::bind(&CValidationInterface::NotifyTransactionLock, pwalletIn, boost::placeholders::_1));
+ g_signals.SyncTransaction.disconnect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, boost::placeholders::_1, boost::placeholders::_2));
+ g_signals.UpdatedBlockTip.disconnect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
+ g_signals.NotifyHeaderTip.disconnect(boost::bind(&CValidationInterface::NotifyHeaderTip, pwalletIn, boost::placeholders::_1, boost::placeholders::_2));
+ g_signals.AcceptedBlockHeader.disconnect(boost::bind(&CValidationInterface::AcceptedBlockHeader, pwalletIn, boost::placeholders::_1));
}
void UnregisterAllValidationInterfaces() {
diff --git a/src/version.h b/src/version.h
index 76007cea..c1ebc206 100644
--- a/src/version.h
+++ b/src/version.h
@@ -10,7 +10,7 @@
* network protocol versioning
*/
-static const int PROTOCOL_VERSION = 70223;
+static const int PROTOCOL_VERSION = 70501;
//! initial proto version, to be increased after version/verack negotiation
static const int INIT_PROTO_VERSION = 209;
@@ -19,7 +19,11 @@ static const int INIT_PROTO_VERSION = 209;
static const int GETHEADERS_VERSION = 70077;
//! disconnect from peers older than this proto version
-static const int MIN_PEER_PROTO_VERSION = 70223;
+static const int MIN_PEER_PROTO_VERSION = 70301;
+
+static const int MIN_PEER_SPORK_15 = 70312;
+static const int MIN_PEER_SPORK_16 = 70501;
+static const int MIN_PEER_SPORK_15_POST_1070280 = 70313; // We stalled at 1070288
//! nTime field added to CAddress, starting with this version;
//! if possible, avoid requesting addresses nodes older than this