diff --git a/.github/scripts/05-binary-checks.sh b/.github/scripts/05-binary-checks.sh index ab2b60de25..f1ce3b2697 100755 --- a/.github/scripts/05-binary-checks.sh +++ b/.github/scripts/05-binary-checks.sh @@ -3,7 +3,8 @@ OS=${1} GITHUB_WORKSPACE=${2} -export BOOST_TEST_LOG_LEVEL=error +# "all" is too much log information. This will increase from verbosity from error" +#export BOOST_TEST_LOG_LEVEL=all if [[ ${OS} == "windows" ]]; then echo "----------------------------------------" diff --git a/.github/workflows/build-raven.yml b/.github/workflows/build-raven.yml index 25a9469629..1358bd4605 100644 --- a/.github/workflows/build-raven.yml +++ b/.github/workflows/build-raven.yml @@ -6,6 +6,7 @@ on: - release* pull_request: branches: + - master - develop - release* paths-ignore: diff --git a/configure.ac b/configure.ac index 15f3d976b6..685fcedbda 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 4) define(_CLIENT_VERSION_MINOR, 3) -define(_CLIENT_VERSION_REVISION, 1) +define(_CLIENT_VERSION_REVISION, 2) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2020) diff --git a/src/Makefile.qt.include b/src/Makefile.qt.include index 187752db33..e134766588 100644 --- a/src/Makefile.qt.include +++ b/src/Makefile.qt.include @@ -310,6 +310,8 @@ RES_ICONS = \ qt/res/icons/editcopy.png \ qt/res/icons/editpaste.png \ qt/res/icons/export.png \ + qt/res/icons/external_link.png \ + qt/res/icons/external_link_dark.png \ qt/res/icons/eye.png \ qt/res/icons/eye_minus.png \ qt/res/icons/eye_plus.png \ diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h index e041b769aa..a7a45126b5 100644 --- a/src/chainparamsseeds.h +++ b/src/chainparamsseeds.h @@ -5,10 +5,191 @@ * IPv4 as well as onion addresses are wrapped inside a IPv6 address accordingly. */ static SeedSpec6 pnSeed6_main[] = { - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x22,0xd6,0xc1,0x7d}, 8767}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0xd3,0xeb,0x6c}, 8767} + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xea,0x07,0xf0}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xdd,0xfb,0x6a}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0d,0xe5,0xfb,0x3b}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x22,0xf8,0x0d,0x1d}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xa6,0xde,0x46}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xd2,0xf4,0xdd}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0xa5,0xdc,0xbb}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0xca,0x60,0xb4}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x4b,0xdd,0xe0}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x57,0xf8,0xf5,0x71}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8a,0xcf,0x40,0x50}, 8767}, + {{0x20,0x01,0x0d,0x08,0x00,0xd9,0x49,0xe3,0xf9,0x94,0xf9,0x29,0xa1,0x10,0xe7,0x38}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x63,0xb5,0x4d}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x36,0x95,0x47,0x5b}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xd2,0xe8,0xd1}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xa3,0x21,0xfe}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0x9d,0xa3,0x71}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x53,0x97,0xce,0x7a}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0xca,0x69,0xdd}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x8d,0x3c,0xde}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x62,0xe6,0x3f,0xef}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x42,0x2a,0x38,0x1e}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xf9,0x19,0x77}, 8767}, + {{0x2a,0x01,0x04,0xf9,0xc0,0x10,0x06,0xa2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x6c,0xc7,0x42}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0xf4,0x3a,0x2c}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x93,0x87,0xe9,0x0c}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0xbd,0xad,0xe7}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x73,0x93,0x83}, 8767}, + {{0x20,0x01,0x0d,0x08,0x00,0xd9,0x49,0xe3,0x75,0x1d,0x58,0x0c,0x3b,0x54,0x3e,0x20}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8b,0x63,0x3e,0x7e}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0xbf,0xe1,0x42}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x32,0xfe,0x71,0x83}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0x25,0x2a,0xf7}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa8,0x77,0x23,0x6f}, 8767}, + {{0x20,0x01,0x41,0xd0,0x06,0x02,0x27,0xcf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xa3,0x4a,0xac}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x4d,0x35,0xcf}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x23,0xd2,0xf4,0xdd}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8b,0xa2,0x45,0x5f}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0d,0xfa,0x77,0x29}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb6,0x5c,0x0b,0x1e}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x65,0x84,0x9b,0xae}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2a,0xbe,0xdb,0x82}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xb8,0x71,0x2f}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x0e,0x00,0xa4}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x6c,0x8c,0xba}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x32,0x22,0x27,0x48}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x47,0x0f,0x2f,0x6a}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3b,0x78,0xc6,0xc3}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0x19,0xb0,0xeb}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x36,0x26,0x45,0x65}, 8767}, + {{0x20,0x01,0x0d,0x08,0x00,0xd9,0x49,0xe3,0xe8,0x35,0x17,0x17,0x08,0xbd,0xc3,0x4b}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0xce,0x51,0x8e}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xa3,0xef,0x40}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x03,0x7f,0x97,0xf5}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x22,0x4e,0x2f,0xe8}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x6c,0x80,0xea}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0xa6,0x53,0x5e}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x73,0x92,0x8e}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x6a,0xfb,0x39}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xb3,0xa0,0x19}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x72,0xbb,0x2a}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbe,0x02,0x86,0x99}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0x42,0x15,0xbc}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa1,0x75,0xff,0x15}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x23,0xd2,0xe8,0xd1}, 8767}, + {{0x20,0x01,0x0d,0x08,0x00,0xd9,0x49,0xe3,0x58,0x5a,0x64,0x3c,0x24,0x51,0x91,0xea}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x95,0x9a,0x46,0x2f}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xce,0xbd,0x9e,0x80}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0x57,0xe4,0x51}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x59,0x62,0x11}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x99,0xb8,0x94}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x4d,0x40,0x34}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd8,0x8e,0xa0}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x59,0x60,0x74}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x73,0x44,0x6d,0x0f}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0xca,0x49,0x57}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x09,0xc1,0x15}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xaf,0x78,0xd2,0xc7}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa1,0x35,0xc2,0x08}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x23,0xea,0x07,0xf0}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x53,0x95,0x63,0x81}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x90,0x5b,0x6f,0x72}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc0,0xe2,0xb7,0xb8}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9b,0x8a,0x9b,0xde}, 8767}, + {{0x20,0x01,0x19,0xf0,0x50,0x01,0x20,0xdc,0x54,0x00,0x02,0xff,0xfe,0x7f,0x97,0xfe}, 8767}, + {{0x24,0x00,0x40,0x53,0x94,0x81,0x05,0x00,0x34,0xca,0x10,0x0f,0xe0,0x91,0x61,0x3e}, 8767}, + {{0x2a,0x01,0x04,0xf8,0x0c,0x17,0x1c,0x5e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xf9,0x14,0x15}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0x83,0xfb,0x87}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x40,0xe3,0x74,0x15}, 8767}, + {{0x26,0x02,0xff,0xb8,0x00,0x00,0x00,0x00,0x02,0x08,0x00,0x72,0x00,0x56,0x02,0x14}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x46,0x7a,0xd6,0xc6}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8e,0x2c,0x9e,0x21}, 8767}, + {{0x26,0x04,0xa8,0x80,0x08,0x00,0x00,0xc1,0x00,0x00,0x00,0x00,0x04,0x24,0x20,0x01}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0x86,0x91,0x04}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x63,0x89,0xe7}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd0,0x48,0x38,0xd6}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x97,0x1f,0xcc}, 8767}, + {{0x2a,0x01,0x04,0xf8,0x02,0x42,0x21,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x22,0xe6,0xb9,0x9f}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcf,0x94,0x03,0xb3}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xdd,0x94,0x7b,0x43}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x72,0x80,0x0e}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc3,0xc9,0xad,0xd4}, 8767}, + {{0x2a,0x01,0x04,0xf8,0x0c,0x17,0x84,0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x53,0xf3,0xbf,0xc7}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xcb,0x72,0xde}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4e,0x81,0xef,0xb3}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x08,0xd2,0xc4,0x43}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x36,0xa5,0x0c,0x75}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0x79,0x6c,0x29}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9b,0x8a,0xec,0x06}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0xb7,0x37,0x2d}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x31,0x0c,0x42,0x9b}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xb3,0xb4,0xa0}, 8767}, + {{0x26,0x07,0xf1,0x30,0x00,0x00,0x00,0xee,0x00,0x00,0x00,0x00,0x73,0x0c,0xc3,0xd4}, 8767}, + {{0x20,0x01,0x41,0xd0,0x00,0x01,0xa3,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x86,0x7a,0x01,0xb2}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x67,0xf4,0x24,0x3c}, 8767}, + {{0x2a,0x01,0x04,0xf9,0x00,0x4a,0x29,0xdf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0xc3,0x12,0x9b}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x03,0x52,0xe6,0xe7}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3e,0xdc,0x90,0xa1}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0xcc,0xeb,0xfe}, 8767}, + {{0x24,0x03,0x27,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x33}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x40,0xe3,0x3d,0xba}, 8767}, + {{0x2a,0x01,0x04,0xf8,0x0c,0x17,0x6c,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x03,0x5f,0x7c,0x94}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd8,0x7f,0xbb,0x68}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd9,0x6c,0x60}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x31,0xf7,0x09,0xc9}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4c,0x16,0x29,0x57}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x5b,0xbe,0x01}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9f,0x41,0x62,0x75}, 8767}, + {{0x2a,0x01,0x04,0xf8,0x01,0x10,0x52,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x62,0xfb,0x7a,0x02}, 8767}, + {{0x24,0x00,0x89,0x02,0x00,0x00,0x00,0x00,0xf0,0x3c,0x91,0xff,0xfe,0x58,0x9b,0x94}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x27,0x41,0x6d}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5b,0xcd,0xaf,0x13}, 8767}, + {{0x20,0x01,0x41,0xd0,0x07,0x00,0x04,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x3f,0x10,0x34}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x23,0xc2,0x0d,0xcd}, 8767}, + {{0x26,0x07,0x53,0x00,0x00,0x60,0x41,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x91,0xef,0x00,0x7b}, 8767}, + {{0x2a,0x01,0x04,0xf9,0x00,0x2b,0x04,0xee,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd8,0x44,0x83}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x93,0x87,0x0b,0x89}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x78,0x19,0xc6,0x0f}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xf9,0x13,0xcf}, 8767}, + {{0x2a,0x02,0xc2,0x05,0x20,0x28,0x80,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0a}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc0,0x63,0x10,0xc6}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb4,0x96,0x3a,0x59}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x9c,0x26,0x51}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc6,0xc7,0x4d,0x53}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x91,0xef,0x00,0xa1}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x28,0x47,0x29,0xd0}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x6d,0x5a,0x02,0x46}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd8,0x03,0xd8}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x61,0x92,0xda}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb4,0x96,0x3a,0x7d}, 8767}, + {{0x2a,0x01,0x04,0xf9,0x00,0x2a,0x04,0x27,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02}, 8767}, + {{0x20,0x01,0x41,0xd0,0x07,0x00,0x04,0x7b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x36,0x95,0x47,0x5b}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x34,0x25,0x2a,0xf7}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5c,0xee,0xb4,0xf7}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x76,0x1f,0x6c,0x54}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5c,0x0c,0x9a,0x73}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x23,0xa3,0x21,0xfe}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x91,0xef,0x00,0x82}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x12,0xca,0x60,0xb4}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x22,0xf8,0x0d,0x1d}, 8767}, + {{0x2a,0x02,0xc2,0x05,0x20,0x28,0x80,0x54,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x12,0xca,0x49,0x57}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x23,0xa6,0xde,0x46}, 8767}, + {{0x2a,0x0a,0xe5,0xc0,0x00,0x02,0x00,0x10,0x00,0x00,0x00,0x00,0x12,0xca,0x69,0xdd}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8a,0xc5,0xde,0xa6}, 8767}, + {{0x20,0x01,0x0d,0x08,0x00,0xd9,0x49,0xe3,0x40,0xb3,0xee,0x66,0x2b,0xa8,0xd6,0x47}, 8767}, + {{0x2a,0x02,0x12,0x0b,0xc3,0xcf,0x58,0x10,0x35,0x0a,0x4b,0xf1,0x66,0x75,0x86,0x57}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x49,0x9d,0xe7,0x7d}, 8767}, + {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x27,0x69,0x11,0xc7}, 8767} }; + static SeedSpec6 pnSeed6_test[] = { {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x22,0xd6,0xc1,0x7d}, 18767}, {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0xd3,0xeb,0x6c}, 18767} diff --git a/src/init.cpp b/src/init.cpp index 54dafd0a34..bf4d5031e0 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -65,7 +65,9 @@ #include #include #include -#include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; #include #include #include diff --git a/src/qt/assetrecord.h b/src/qt/assetrecord.h index 2030bd34f9..b7f96e38b9 100644 --- a/src/qt/assetrecord.h +++ b/src/qt/assetrecord.h @@ -18,12 +18,12 @@ class AssetRecord public: AssetRecord(): - name(""), quantity(0), units(0), fIsAdministrator(false) + name(""), quantity(0), units(0), fIsAdministrator(false), ipfshash("") { } - AssetRecord(const std::string _name, const CAmount& _quantity, const int _units, const bool _fIsAdministrator): - name(_name), quantity(_quantity), units(_units), fIsAdministrator(_fIsAdministrator) + AssetRecord(const std::string _name, const CAmount& _quantity, const int _units, const bool _fIsAdministrator, const std::string _ipfshash): + name(_name), quantity(_quantity), units(_units), fIsAdministrator(_fIsAdministrator), ipfshash(_ipfshash) { } @@ -48,6 +48,7 @@ class AssetRecord CAmount quantity; int units; bool fIsAdministrator; + std::string ipfshash; /**@}*/ }; diff --git a/src/qt/assettablemodel.cpp b/src/qt/assettablemodel.cpp index a3ec25fce3..6969d92797 100644 --- a/src/qt/assettablemodel.cpp +++ b/src/qt/assettablemodel.cpp @@ -55,6 +55,7 @@ class AssetTablePriv { // retrieve units for asset uint8_t units = OWNER_UNITS; bool fIsAdministrator = true; + std::string ipfsHash = ""; if (setAssetsToSkip.count(bal->first)) continue; @@ -67,6 +68,7 @@ class AssetTablePriv { return; } units = assetData.units; + ipfsHash = assetData.strIPFSHash; // If we have the administrator asset, add it to the skip listå if (balances.count(bal->first + OWNER_TAG)) { setAssetsToSkip.insert(bal->first + OWNER_TAG); @@ -82,7 +84,7 @@ class AssetTablePriv { continue; } } - cachedBalances.append(AssetRecord(bal->first, bal->second, units, fIsAdministrator)); + cachedBalances.append(AssetRecord(bal->first, bal->second, units, fIsAdministrator, EncodeAssetData(ipfsHash))); } } } @@ -158,8 +160,25 @@ QVariant AssetTableModel::data(const QModelIndex &index, int role) const case FormattedAmountRole: return QString::fromStdString(rec->formattedQuantity()); case AdministratorRole: - { return rec->fIsAdministrator; + case AssetIPFSHashRole: + return QString::fromStdString(rec->ipfshash); + case AssetIPFSHashDecorationRole: + { + if (index.column() == Quantity) + return QVariant(); + + if (rec->ipfshash.size() == 0) + return QVariant(); + + QPixmap pixmap; + + if (darkModeEnabled) + pixmap = QPixmap::fromImage(QImage(":/icons/external_link_dark")); + else + pixmap = QPixmap::fromImage(QImage(":/icons/external_link")); + + return pixmap; } case Qt::DecorationRole: { @@ -235,7 +254,7 @@ QModelIndex AssetTableModel::index(int row, int column, const QModelIndex &paren QString AssetTableModel::formatTooltip(const AssetRecord *rec) const { - QString tooltip = formatAssetName(rec) + QString("\n") + formatAssetQuantity(rec); + QString tooltip = formatAssetName(rec) + QString("\n") + formatAssetQuantity(rec) + QString("\n") + formatAssetData(rec); return tooltip; } @@ -247,4 +266,9 @@ QString AssetTableModel::formatAssetName(const AssetRecord *wtx) const QString AssetTableModel::formatAssetQuantity(const AssetRecord *wtx) const { return QString::fromStdString(wtx->formattedQuantity()); +} + +QString AssetTableModel::formatAssetData(const AssetRecord *wtx) const +{ + return QString::fromStdString(wtx->ipfshash); } \ No newline at end of file diff --git a/src/qt/assettablemodel.h b/src/qt/assettablemodel.h index 5617956060..21dabb4ce6 100644 --- a/src/qt/assettablemodel.h +++ b/src/qt/assettablemodel.h @@ -43,7 +43,11 @@ class AssetTableModel : public QAbstractTableModel /** Formatted amount, without brackets when unconfirmed */ FormattedAmountRole = 102, /** AdministratorRole */ - AdministratorRole = 103 + AdministratorRole = 103, + /** RVN or name of an asset */ + AssetIPFSHashRole = 104, + /** IPFS Decoration Role */ + AssetIPFSHashDecorationRole = 105 }; int rowCount(const QModelIndex &parent) const; @@ -52,6 +56,7 @@ class AssetTableModel : public QAbstractTableModel QVariant headerData(int section, Qt::Orientation orientation, int role) const; QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; QString formatTooltip(const AssetRecord *rec) const; + QString formatAssetData(const AssetRecord *wtx) const; QString formatAssetName(const AssetRecord *wtx) const; QString formatAssetQuantity(const AssetRecord *wtx) const; diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 5b2bcafd33..a50ad2c5db 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -26,6 +26,9 @@ #include #include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; class CBlockIndex; static int64_t nLastHeaderTipUpdateNotification = 0; diff --git a/src/qt/myrestrictedassettablemodel.cpp b/src/qt/myrestrictedassettablemodel.cpp index 69d89f4818..36aae57663 100644 --- a/src/qt/myrestrictedassettablemodel.cpp +++ b/src/qt/myrestrictedassettablemodel.cpp @@ -27,6 +27,10 @@ #include #include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; + // Amount column is right-aligned it contains numbers static int column_alignments[] = { Qt::AlignLeft|Qt::AlignVCenter, /* date */ diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index 542a870e0a..7b462d4fce 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -21,6 +21,8 @@ #include #include +#include +#include #include #include @@ -29,8 +31,10 @@ #include #include +#include #include #include +#include #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) #define QTversionPreFiveEleven @@ -163,11 +167,13 @@ Q_OBJECT /** Get the icon for the administrator of the asset */ QPixmap pixmap = qvariant_cast(index.data(Qt::DecorationRole)); + QPixmap ipfspixmap = qvariant_cast(index.data(AssetTableModel::AssetIPFSHashDecorationRole)); bool admin = index.data(AssetTableModel::AdministratorRole).toBool(); /** Need to know the heigh to the pixmap. If it is 0 we don't we dont own this asset so dont have room for the icon */ int nIconSize = admin ? pixmap.height() : 0; + int nIPFSIconSize = ipfspixmap.height(); int extraNameSpacing = 12; if (nIconSize) extraNameSpacing = 0; @@ -188,7 +194,8 @@ Q_OBJECT /** Create the three main rectangles (Icon, Name, Amount) */ QRect assetAdministratorRect(QPoint(20, gradientRect.top() + halfheight/2 - 3*ypad), QSize(nIconSize, nIconSize)); QRect assetNameRect(gradientRect.left() + xspace - extraNameSpacing, gradientRect.top()+ypad+(halfheight/2), gradientRect.width() - xspace, halfheight + ypad); - QRect amountRect(gradientRect.left() + xspace, gradientRect.top()+ypad+(halfheight/2), gradientRect.width() - xspace - 16, halfheight); + QRect amountRect(gradientRect.left() + xspace, gradientRect.top()+ypad+(halfheight/2), gradientRect.width() - xspace - 24, halfheight); + QRect ipfsLinkRect(QPoint(gradientRect.right() - nIconSize/2, gradientRect.top() + halfheight/1.5), QSize(nIconSize/2, nIconSize/2)); // Create the gradient for the asset items QLinearGradient gradient(mainRect.topLeft(), mainRect.bottomRight()); @@ -224,6 +231,9 @@ Q_OBJECT if (nIconSize) painter->drawPixmap(assetAdministratorRect, pixmap); + if (nIPFSIconSize) + painter->drawPixmap(ipfsLinkRect, ipfspixmap); + /** Create the font that is used for painting the asset name */ QFont nameFont; #if !defined(Q_OS_MAC) @@ -271,7 +281,6 @@ Q_OBJECT painter->setPen(penName); painter->drawText(assetNameRect, Qt::AlignLeft|Qt::AlignVCenter, name); - /** Paint the amount */ painter->setFont(amountFont); painter->drawText(amountRect, Qt::AlignRight|Qt::AlignVCenter, amountText); @@ -338,7 +347,7 @@ OverviewPage::OverviewPage(const PlatformStyle *platformStyle, QWidget *parent) connect(asset_typing_delay, SIGNAL(timeout()), this, SLOT(assetSearchChanged())); connect(ui->listTransactions, SIGNAL(clicked(QModelIndex)), this, SLOT(handleTransactionClicked(QModelIndex))); - connect(ui->listAssets, SIGNAL(clicked(QModelIndex)), this, SLOT(handleAssetClicked(QModelIndex))); + ui->listAssets->viewport()->installEventFilter(this); // start with displaying the "out of sync" warnings showOutOfSyncWarning(true); @@ -409,6 +418,7 @@ OverviewPage::OverviewPage(const PlatformStyle *platformStyle, QWidget *parent) issueSub = new QAction(tr("Issue Sub Asset"), this); issueUnique = new QAction(tr("Issue Unique Asset"), this); reissue = new QAction(tr("Reissue Asset"), this); + openURL = new QAction(tr("Open IPFS in Browser"), this); sendAction->setObjectName("Send"); issueSub->setObjectName("Sub"); @@ -416,6 +426,7 @@ OverviewPage::OverviewPage(const PlatformStyle *platformStyle, QWidget *parent) reissue->setObjectName("Reissue"); copyNameAction->setObjectName("Copy Name"); copyAmountAction->setObjectName("Copy Amount"); + openURL->setObjectName("Browse"); // context menu contextMenu = new QMenu(this); @@ -423,22 +434,48 @@ OverviewPage::OverviewPage(const PlatformStyle *platformStyle, QWidget *parent) contextMenu->addAction(issueSub); contextMenu->addAction(issueUnique); contextMenu->addAction(reissue); + contextMenu->addAction(openURL); contextMenu->addSeparator(); contextMenu->addAction(copyNameAction); contextMenu->addAction(copyAmountAction); // context menu signals } +bool OverviewPage::eventFilter(QObject *object, QEvent *event) +{ + // If the asset viewport is being clicked + if (object == ui->listAssets->viewport() && event->type() == QEvent::MouseButtonPress) { + + // Grab the mouse event + QMouseEvent * mouseEv = static_cast(event); + + // Select the current index at the mouse location + QModelIndex currentIndex = ui->listAssets->indexAt(mouseEv->pos()); + + // Open the menu on right click, direct url on left click + if (mouseEv->buttons() & Qt::RightButton ) { + handleAssetRightClicked(currentIndex); + } else if (mouseEv->buttons() & Qt::LeftButton) { + openIPFSForAsset(currentIndex); + } + } + + return QWidget::eventFilter(object, event); +} + void OverviewPage::handleTransactionClicked(const QModelIndex &index) { if(filter) Q_EMIT transactionClicked(filter->mapToSource(index)); } -void OverviewPage::handleAssetClicked(const QModelIndex &index) +void OverviewPage::handleAssetRightClicked(const QModelIndex &index) { if(assetFilter) { + // Grab the data elements from the index that we need to disable and enable menu items QString name = index.data(AssetTableModel::AssetNameRole).toString(); + QString ipfshash = index.data(AssetTableModel::AssetIPFSHashRole).toString(); + if (IsAssetNameAnOwner(name.toStdString())) { name = name.left(name.size() - 1); sendAction->setDisabled(true); @@ -446,6 +483,13 @@ void OverviewPage::handleAssetClicked(const QModelIndex &index) sendAction->setDisabled(false); } + // If the ipfs hash isn't there or doesn't start with Qm, disable the action item + if (ipfshash.count() > 0 && ipfshash.indexOf("Qm") == 0) { + openURL->setDisabled(false); + } else { + openURL->setDisabled(true); + } + if (!index.data(AssetTableModel::AdministratorRole).toBool()) { issueSub->setDisabled(true); issueUnique->setDisabled(true); @@ -466,20 +510,22 @@ void OverviewPage::handleAssetClicked(const QModelIndex &index) if (action) { if (action->objectName() == "Send") - Q_EMIT assetSendClicked(assetFilter->mapToSource(index)); + Q_EMIT assetSendClicked(assetFilter->mapToSource(index)); else if (action->objectName() == "Sub") - Q_EMIT assetIssueSubClicked(assetFilter->mapToSource(index)); + Q_EMIT assetIssueSubClicked(assetFilter->mapToSource(index)); else if (action->objectName() == "Unique") - Q_EMIT assetIssueUniqueClicked(assetFilter->mapToSource(index)); + Q_EMIT assetIssueUniqueClicked(assetFilter->mapToSource(index)); else if (action->objectName() == "Reissue") - Q_EMIT assetReissueClicked(assetFilter->mapToSource(index)); + Q_EMIT assetReissueClicked(assetFilter->mapToSource(index)); else if (action->objectName() == "Copy Name") GUIUtil::setClipboard(index.data(AssetTableModel::AssetNameRole).toString()); else if (action->objectName() == "Copy Amount") GUIUtil::setClipboard(index.data(AssetTableModel::FormattedAmountRole).toString()); + else if (action->objectName() == "Browse") { + QDesktopServices::openUrl(QUrl::fromUserInput("https://cloudflare-ipfs.com/ipfs/" + ipfshash)); + } } } - } void OverviewPage::handleOutOfSyncWarningClicks() @@ -645,3 +691,14 @@ void OverviewPage::assetSearchChanged() return; assetFilter->setAssetNamePrefix(ui->assetSearch->text()); } + +void OverviewPage::openIPFSForAsset(const QModelIndex &index) +{ + // Get the ipfs hash of the asset clicked + QString ipfshash = index.data(AssetTableModel::AssetIPFSHashRole).toString(); + + // If the ipfs hash isn't there or doesn't start with Qm, disable the action item + if (ipfshash.count() > 0 && ipfshash.indexOf("Qm") == 0) { + QDesktopServices::openUrl(QUrl::fromUserInput("https://cloudflare-ipfs.com/ipfs/" + ipfshash)); + } +} diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h index bfd5798464..ba8eabe3a8 100644 --- a/src/qt/overviewpage.h +++ b/src/qt/overviewpage.h @@ -44,6 +44,9 @@ class OverviewPage : public QWidget void showOutOfSyncWarning(bool fShow); void showAssets(); + bool eventFilter(QObject *object, QEvent *event); + void openIPFSForAsset(const QModelIndex &index); + public Q_SLOTS: void setBalance(const CAmount& balance, const CAmount& unconfirmedBalance, const CAmount& immatureBalance, const CAmount& watchOnlyBalance, const CAmount& watchUnconfBalance, const CAmount& watchImmatureBalance); @@ -77,12 +80,13 @@ public Q_SLOTS: QAction *issueSub; QAction *issueUnique; QAction *reissue; + QAction *openURL; private Q_SLOTS: - void updateDisplayUnit(); + void updateDisplayUnit(); void handleTransactionClicked(const QModelIndex &index); - void handleAssetClicked(const QModelIndex &index); + void handleAssetRightClicked(const QModelIndex &index); void updateAlerts(const QString &warnings); void updateWatchOnlyLabels(bool showWatchOnly); void handleOutOfSyncWarningClicks(); diff --git a/src/qt/raven.qrc b/src/qt/raven.qrc index 695f4de27d..f647cdaf44 100644 --- a/src/qt/raven.qrc +++ b/src/qt/raven.qrc @@ -33,6 +33,8 @@ res/icons/overview.png res/icons/overview_selected.png res/icons/export.png + res/icons/external_link.png + res/icons/external_link_dark.png res/icons/synced.png res/icons/remove.png res/icons/tx_mined.png diff --git a/src/qt/ravengui.cpp b/src/qt/ravengui.cpp index 19f6208a51..7a1a016e5d 100644 --- a/src/qt/ravengui.cpp +++ b/src/qt/ravengui.cpp @@ -69,6 +69,10 @@ #include #include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; + #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) #include #include diff --git a/src/qt/res/icons/external_link.png b/src/qt/res/icons/external_link.png new file mode 100644 index 0000000000..2df5365a44 Binary files /dev/null and b/src/qt/res/icons/external_link.png differ diff --git a/src/qt/res/icons/external_link_dark.png b/src/qt/res/icons/external_link_dark.png new file mode 100644 index 0000000000..62dba2e421 Binary files /dev/null and b/src/qt/res/icons/external_link_dark.png differ diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp index 9f37fc14e2..c90fdcff1c 100644 --- a/src/qt/splashscreen.cpp +++ b/src/qt/splashscreen.cpp @@ -31,6 +31,10 @@ #define QTversionPreFiveEleven #endif +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; + SplashScreen::SplashScreen(Qt::WindowFlags f, const NetworkStyle *networkStyle) : QWidget(0, f), curAlignment(0) { diff --git a/src/qt/trafficgraphwidget.cpp b/src/qt/trafficgraphwidget.cpp index 84885c582c..9a397671ac 100644 --- a/src/qt/trafficgraphwidget.cpp +++ b/src/qt/trafficgraphwidget.cpp @@ -7,6 +7,7 @@ #include "clientmodel.h" #include +#include #include #include diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index 45ced64e9a..12a542c8f0 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -27,6 +27,10 @@ #include #include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; + // Amount column is right-aligned it contains numbers static int column_alignments[] = { Qt::AlignLeft|Qt::AlignVCenter, /* status */ diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index e8e3ea1063..5c4d078b38 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -39,6 +39,9 @@ #include #include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; WalletModel::WalletModel(const PlatformStyle *platformStyle, CWallet *_wallet, OptionsModel *_optionsModel, QObject *parent) : QObject(parent), wallet(_wallet), optionsModel(_optionsModel), addressTableModel(0), diff --git a/src/rpc/server.cpp b/src/rpc/server.cpp index bc0cd173c1..63b1ba7216 100644 --- a/src/rpc/server.cpp +++ b/src/rpc/server.cpp @@ -19,7 +19,9 @@ #include #include -#include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; #include #include // for to_upper() #include diff --git a/src/scheduler.cpp b/src/scheduler.cpp index 0d920614d0..3c710588dc 100644 --- a/src/scheduler.cpp +++ b/src/scheduler.cpp @@ -9,7 +9,9 @@ #include "reverselock.h" #include -#include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; #include CScheduler::CScheduler() : nThreadsServicingQueue(0), stopRequested(false), stopWhenEmpty(false) diff --git a/src/test/scheduler_tests.cpp b/src/test/scheduler_tests.cpp index dd2a554e93..3be0e74796 100644 --- a/src/test/scheduler_tests.cpp +++ b/src/test/scheduler_tests.cpp @@ -8,7 +8,9 @@ #include "test/test_raven.h" -#include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; #include #include diff --git a/src/torcontrol.cpp b/src/torcontrol.cpp index d617603e98..578ebacb36 100644 --- a/src/torcontrol.cpp +++ b/src/torcontrol.cpp @@ -16,7 +16,9 @@ #include #include -#include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; #include #include #include diff --git a/src/validation.cpp b/src/validation.cpp index 89b8a26183..3529a1626a 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -60,6 +60,10 @@ #include "assets/snapshotrequestdb.h" #include "assets/assetsnapshotdb.h" +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; + #if defined(NDEBUG) # error "Raven cannot be compiled without assertions." #endif diff --git a/src/validationinterface.cpp b/src/validationinterface.cpp index fbf28048c3..de46a8a5dc 100644 --- a/src/validationinterface.cpp +++ b/src/validationinterface.cpp @@ -17,6 +17,10 @@ #include +// Fixing Boost 1.73 compile errors +#include +using namespace boost::placeholders; + struct MainSignalsInstance { boost::signals2::signal UpdatedBlockTip; boost::signals2::signal TransactionAddedToMempool;