Merge pull request #5810 from knst/v20.0.4_release

backport: v20.0.4 backports and release
This commit is contained in:
PastaPastaPasta 2024-01-11 21:30:07 -06:00 committed by GitHub
commit 3b7deea3b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 424 additions and 160 deletions

View File

@ -1,4 +1,4 @@
Dash Core staging tree 18.0 Dash Core staging tree
=========================== ===========================
|CI|master|develop| |CI|master|develop|

View File

@ -1,7 +1,7 @@
AC_PREREQ([2.69]) AC_PREREQ([2.69])
define(_CLIENT_VERSION_MAJOR, 20) define(_CLIENT_VERSION_MAJOR, 20)
define(_CLIENT_VERSION_MINOR, 0) define(_CLIENT_VERSION_MINOR, 0)
define(_CLIENT_VERSION_BUILD, 3) define(_CLIENT_VERSION_BUILD, 4)
define(_CLIENT_VERSION_RC, 0) define(_CLIENT_VERSION_RC, 0)
define(_CLIENT_VERSION_IS_RELEASE, true) define(_CLIENT_VERSION_IS_RELEASE, true)
define(_COPYRIGHT_YEAR, 2023) define(_COPYRIGHT_YEAR, 2023)

View File

@ -24,29 +24,53 @@ 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
oPei xNMWNBcrT6DyByl7F+pMxwucXumoQQARAQABiQI8BBgBCAAmFiEEKVkDYuyHioH9
=42dS PCArUlJ77avoeYQFAl1ULyUCGwwFCQPDx2sACgkQUlJ77avoeYQPMQ/8DwfcmR5J
r/TeRa+50WWhVsZt+8/5eQq8acBk8YfPed79JXa1xeWM2BTXnEe8uS0jgaW4R8nF
E9Sq9RqXXM5H2GqlqzS9fyCx/SvR3eibYMcLIxjwaxx8MXTljx+p/SdTn+gsOXDC
nXUjJbwEMtLDAA2xMtnXKy6R9hziGiilTvX/B0CXzl9p7sjZBF24iZaUwAN9S1z0
6t9vW0CE+1oIlVmPm+B9Q1Jk5NQnvdEZt0vdnZ1zjaU7eZEzIOQ93KSSrQSA6jrN
ku4dlAWHFPNYhZ5RPy9Y2OmR1N5Ecu+/dzA9HHWTVq2sz6kT1iSEKDQQ4xNyY34U
x6SCdT557RyJufnBY68TTnPBEphE7Hfi9rZTpNRToqRXd8W6reqqRdqIwVq6EjWV
IUaBxyDsEI0yFsGk4GR8YjdyugUZKbalPJ0nzv/4/0L15w5lKoITtm3kh8Oz/FXs
OPEEr31nn5EbG2wik2XGmxS+UxKzFQ2E5bKIIqvo0g587N0tgOSEdwoypYaZzXML
ccce5m9fm7qitPJhdapzxfmncqHtCN/8KG03Y/pII5RCq4S+mJjknVN2ZBK6iofO
Ddms37sQ4p2dQfvLUoHuJO+BDTuVwecAxuQUNylAD60Ax330tU1JeHy6teEn8C3F
ols1sJK+mQ4YHhYcvL9X4l2iYUL09veg96KJAjwEGAEIACYCGwwWIQQpWQNi7IeK
gf08ICtSUnvtq+h5hAUCYRvREAUJDS2jawAKCRBSUnvtq+h5hEe7EACKAqWEXart
Fg7FwIiwD7MB/iMkIKSl05bBaGOqCO1sWtL/f38WhFIL1MKU7YJTiPkUgCQ8p2/s
QWIBdowgO6u2k3g+z6XrBRf+1L7FoYNWx5GgB2FWOnuKUb1Yi+ZXdQyrGB7qFtqb
cfkmGJWWZL4MDEbTt1seIWt2p4etVlT/frj0rwk473/FKztDN/pcmp6l/MKNDhlG
cbLgD/SGFhPLMZ4k5xM2KBKOw8eXk82KkbTFucCfubEWbaLld1WZMwKqxOGQfoBz
c4FsuBEG8GFVFZRHUVuh3vKktOM6tcVbdi+bua1tlTyiosqBxoALJdoi/ACgFj10
heCvCzpnV2DC8Uf7U3tXYD6ZWRuM/NLsiSj2ULV7lYEAntWRbbT/kqLTwlekuZ3t
TKCUJyKhBMx3tjIT8CGjfNBuj/0DXREQLiQ6yX867oh4RRFr6Z9v0xg+ChUZNwpm
dpfR3jRq5Emm2iy6hgt6ddyJF1SZ+wAMBvalV2blvYff40td/5OdvJj/ObbhkUY9
cFFKPu1CBpXqSf009KDfZnVZxH6kCfcnCq2zd/U825gKtm9a/ro2iElGt0JlzXBX
h2Ri+XYzWz7N/yJNW2LgiJ82OfnuyVe0SwffqaJDLa83oKn0jcDublZ4vTuLbs/x
u+HE6D2rqvc0CA1wAreY5+lD96PbmOAjnA==
=lPi0
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,5 +1,4 @@
-----BEGIN PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: GPGTools - https://gpgtools.org
mQINBFUkMgoBEAD5lFzlr4fIR3CKlsgx1KXLNR+1+IIe3AT8YloMq3rlvylOTgGl mQINBFUkMgoBEAD5lFzlr4fIR3CKlsgx1KXLNR+1+IIe3AT8YloMq3rlvylOTgGl
j1PTeQL0eHH+fD3ukSHHiZC7FcY2aC3vTPCd16+OO+ii/Nfx6vAyve2RiTA4brKi j1PTeQL0eHH+fD3ukSHHiZC7FcY2aC3vTPCd16+OO+ii/Nfx6vAyve2RiTA4brKi
@ -24,29 +23,129 @@ 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
8/LeBIb/ YF1MAYrG1vVYJOi4z3HoRJAg1qA1RsW3CRc/YkRRcHCXG28srtgALP5jY/264Pd7
=q31t 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
=nhGw
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----

View File

@ -237,6 +237,7 @@ mkdir -p "$OUTDIR"
CONFIGFLAGS+=" --enable-reduce-exports --disable-bench --disable-gui-tests --disable-fuzz-binary" CONFIGFLAGS+=" --enable-reduce-exports --disable-bench --disable-gui-tests --disable-fuzz-binary"
case "$HOST" in case "$HOST" in
*linux*) CONFIGFLAGS+=" --disable-threadlocal" ;; *linux*) CONFIGFLAGS+=" --disable-threadlocal" ;;
*mingw*) CONFIGFLAGS+=" --disable-miner" ;;
esac esac
# CFLAGS # CFLAGS

View File

@ -1,82 +1,29 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIFNTCCBB2gAwIBAgIQC8hE/HYFbdaSbMDoQg3bdDANBgkqhkiG9w0BAQsFADBy MIICMjCCAbigAwIBAgIULx0qs9qjM500eqn6THPK0KrYDI4wCgYIKoZIzj0EAwIw
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 YDELMAkGA1UEBhMCVVMxHTAbBgNVBAoMFERhc2ggQ29yZSBHcm91cCBJbmMuMREw
d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg DwYDVQQDDAhkYXNoLm9yZzEfMB0GCSqGSIb3DQEJARYQaW5mb3NlY0BkYXNoLm9y
SUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMDgxMzAwMDAwMFoXDTIzMDgxODEyMDAw ZzAeFw0yNDAxMDkyMjMwMzFaFw0yNzAxMDgyMjMwMzFaMCQxIjAgBgNVBAMMGURh
MFowcjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNj c2ggQ29yZSBXaW5kb3dzIFNpZ25pbmcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATT
b3R0c2RhbGUxHTAbBgNVBAoTFERhc2ggQ29yZSBHcm91cCBJbmMuMR0wGwYDVQQD Y9lr0wAD43uUey32F2QOeyCohNg470gWCl2tBgZwg73EKjz1FX/vPcFfdq3C7JiU
ExREYXNoIENvcmUgR3JvdXAgSW5jLjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC mRkYkkVZyvcOebMVOkDbxpH5lEZRAr3f0yDc0UytDlJi2032RnZoRl5d3e9Xv4ej
AQoCggEBAJ5yx72CIbnZYYovXBg3YctSF7NEOeWqM6SDnwpLjCMXt8HKdKyte8/r bzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMD
xxNxkwAvenF34gkzyJD9wRggbrNmtgg/zaT3xa0RUC9y7uxvBRHJ9nSskbRV5Ljp MB0GA1UdDgQWBBR+bbN2rRZFkoX3xuTOPRSse9AWwzAfBgNVHSMEGDAWgBSIe1dn
v+KTBiekJ/M95Xt0rGYLT76OE2QvWv7fS15JJ7h0F+ReFRvUFlj2HqewTCwYqu0c E+OEffr+P5AdH0enMXtqizAKBggqhkjOPQQDAgNoADBlAjEA+AO2SVgxzDmPENHl
OIKhHs8I4EEHzMkIfVEEKlzpIfGwndRPmMxrq/6RXpQlrTo9tIA10KiyhQx1sNRu CS/784XSRC2MBlCwlsIdD8Jti3MNCpvmJiLpuE6HHsKOFxWPAjBlyqgJXyiM30/8
bkWjXEw1SBK63F4Xj8ZaIdlDj3vwEE16Ltk2Nr+eX68gDwyCe9TQ2D7O4rrFEh8f AU0qiBlnU9LhmYu1vKbfXweuAve83XVDScaGLPuqqXFp3KTNnjs=
nEp7hcY7BoLc95COYKtWhj8mnC0obBECAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaA
FFrEuXsqCqOl6nEDwGD5LfZldQ5YMB0GA1UdDgQWBBRVtnOXT2wps7EH/GWYwlg9
XLnMxDAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0f
BHAwbjA1oDOgMYYvaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJl
ZC1jcy1nMS5jcmwwNaAzoDGGL2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEy
LWFzc3VyZWQtY3MtZzEuY3JsMEwGA1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYI
KwYBBQUHAgEWHGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQB
MIGEBggrBgEFBQcBAQR4MHYwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2lj
ZXJ0LmNvbTBOBggrBgEFBQcwAoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29t
L0RpZ2lDZXJ0U0hBMkFzc3VyZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB
/wQCMAAwDQYJKoZIhvcNAQELBQADggEBAJ/3uaSW1E3Cp17UlHk6K9NrSYmq6h4x
0FQYvcPc4lYZincDZKElDkClncYAl+FHVLJ2qBBuBF1PU96/PnG5iwROC707jJEs
p8SlHfMIiiKMq/HIMAekVNBUnbnUxFZJTEX20p9kEIBBu9A1JJ6a1tYtp7fh+INr
lLi3f0P8JNGUgWog+a/n+Icd/3tJ6fsOnrG8jCa11OGjpMegpvPvSh5YzembF0CC
WS6tOu6DbMcceQ6pFniD5MTwiF6Ye6cSLBCwD2SUyzganIZgz5m7XXX/xfjBkLbL
SQw/P5F1pHZCyyY+evH9Fjm7YAqwfpkVMJDp/XMaht2dxuhyCn70wgk=
-----END CERTIFICATE----- -----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIFMDCCBBigAwIBAgIQBAkYG1/Vu2Z1U0O1b5VQCDANBgkqhkiG9w0BAQsFADBl MIICUjCCAdigAwIBAgIULvyU04rzSQ7PGNSHxiNPkIWTg5cwCgYIKoZIzj0EAwIw
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 YDELMAkGA1UEBhMCVVMxHTAbBgNVBAoMFERhc2ggQ29yZSBHcm91cCBJbmMuMREw
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv DwYDVQQDDAhkYXNoLm9yZzEfMB0GCSqGSIb3DQEJARYQaW5mb3NlY0BkYXNoLm9y
b3QgQ0EwHhcNMTMxMDIyMTIwMDAwWhcNMjgxMDIyMTIwMDAwWjByMQswCQYDVQQG ZzAeFw0yNDAxMDkyMjI1NTJaFw0zNDAxMDYyMjI1NTJaMGAxCzAJBgNVBAYTAlVT
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl MR0wGwYDVQQKDBREYXNoIENvcmUgR3JvdXAgSW5jLjERMA8GA1UEAwwIZGFzaC5v
cnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29kZSBT cmcxHzAdBgkqhkiG9w0BCQEWEGluZm9zZWNAZGFzaC5vcmcwdjAQBgcqhkjOPQIB
aWduaW5nIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+NOzHH8O BgUrgQQAIgNiAAS5flHJXHF2pcjC/S9tDdkyek+ekF9e4OTb0Jl43Z+utNBCYXTH
Ea9ndwfTCzFJGc/Q+0WZsTrbRPV/5aid2zLXcep2nQUut4/6kkPApfmJ1DcZ17aq 82wwh+lfZbRBNjBd1id8+49hU8qX3e0mYWNOc/c+7iqOMQh1OvV/C/Lee/aCc8BN
8JyGpdglrA55KDp+6dFn08b7KSfH03sjlOSRI5aQd4L5oYQjZhJUM1B0sSgmuyRp ghSJEVyCc++cc2SjUzBRMB0GA1UdDgQWBBSIe1dnE+OEffr+P5AdH0enMXtqizAf
wsJS8hRniolF1C2ho+mILCCVrhxKhwjfDPXiTWAYvqrEsq5wMWYzcT6scKKrzn/p BgNVHSMEGDAWgBSIe1dnE+OEffr+P5AdH0enMXtqizAPBgNVHRMBAf8EBTADAQH/
fMuSoeU7MRzP6vIK5Fe7SrXpdOYr/mzLfnQ5Ng2Q7+S1TqSp6moKq4TzrGdOtcT3 MAoGCCqGSM49BAMCA2gAMGUCMGrul4xW1uNXQhbXnJOWNDjnFWFHhPHM8vG7/upg
jNEgJSPrCGQ+UpbB8g8S9MWOD8Gi6CxR93O8vYWxYoNzQYIH5DiLanMg0A9kczye Ao6zeffQT9TFtMeUTAf/leu/GwIxAM+n/elxROHGSp5rBr8ZYzyajRfJ/b1tlY3J
n6Yzqf0Z3yWT0QIDAQABo4IBzTCCAckwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV 4XDDnlfcKom9Z5npK05shbgE2fAGpg==
HQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMweQYIKwYBBQUHAQEEbTBr
MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUH
MAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJ
RFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2lj
ZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6
Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmww
TwYDVR0gBEgwRjA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCgYIYIZIAYb9bAMwHQYDVR0OBBYEFFrEuXsq
CqOl6nEDwGD5LfZldQ5YMB8GA1UdIwQYMBaAFEXroq/0ksuCMS1Ri6enIZ3zbcgP
MA0GCSqGSIb3DQEBCwUAA4IBAQA+7A1aJLPzItEVyCx8JSl2qB1dHC06GsTvMGHX
fgtg/cM9D8Svi/3vKt8gVTew4fbRknUPUbRupY5a4l4kgU4QpO4/cY5jDhNLrddf
RHnzNhQGivecRk5c/5CxGwcOkRX7uq+1UcKNJK4kxscnKqEpKBo6cSgCPC6Ro8Al
EeKcFEehemhor5unXCBc2XGxDI+7qPjFEmifz0DLQESlE/DmZAwlCEIysjaKJAL+
L3J+HNdJRZboWR3p+nRka7LrZkPas7CM1ekN3fYBIM6ZMWM9CBoYs4GbT8aTEAb8
B4H6i9r5gkn3Ym6hU/oSlBiFLpKR6mhsRDKyZqHnGKSaZFHv
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,4 +1,4 @@
# Dash Core version v20.0.3 # Dash Core version v20.0.4
Release is now available from: Release is now available from:
@ -35,24 +35,29 @@ reindex or re-sync the whole chain.
# Notable changes # Notable changes
## Masternode fix ## Build changes
The memory usage during the old quorum data cleanup mechanism was reduced. The miner has been disabled for Windows binaries built via Guix. This resolves
an issue that was preventing users from installing v20.0.3 due to false
positive alerts from Microsoft Defender and other antivirus providers.
## Wallet fix Use a self-signed Windows code signing certificate instead of expired one. The
expired certificate being used previously caused most antivirus software to trigger.
The new self-signed certificate results in a greatly improved installation experience.
A fix has been implemented for the reported decryption of wallets. Updated expired gpg keys for builders. Note that the actual keys themselves are the same.
The updated keys changed their expiration dates and added additional information such as
new email addresses.
## RPC changes ## Governance
In `getspecialtxes` `instantlock` and `chainlock` fields are reflecting actual values now. Triggers from the past are now ignored when voting.
## Other changes ## Asset lock and unlock transactions
Implemented improvements in Github CI and build system for macOS. Fixed compilation issues on FreeBSD. Use the correct quorum for signing withdrawal (asset unlock) txes on RegTest.
# v20.0.4 Change log
# v20.0.3 Change log
See detailed [set of changes][set-of-changes]. See detailed [set of changes][set-of-changes].
@ -61,7 +66,6 @@ See detailed [set of changes][set-of-changes].
Thanks to everyone who directly contributed to this release: Thanks to everyone who directly contributed to this release:
- Konstantin Akimov (knst) - Konstantin Akimov (knst)
- Odysseas Gabrielides (ogabrielides)
- PastaPastaPasta - PastaPastaPasta
- UdjinM6 - UdjinM6
@ -90,6 +94,7 @@ Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12.
These release are considered obsolete. Old release notes can be found here: These release are considered obsolete. Old release notes can be found here:
- [v20.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.3.md) released December/26/2023
- [v20.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.2.md) released December/06/2023 - [v20.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.2.md) released December/06/2023
- [v20.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.1.md) released November/18/2023 - [v20.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.1.md) released November/18/2023
- [v20.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.0.md) released November/15/2023 - [v20.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.0.md) released November/15/2023
@ -135,4 +140,4 @@ These release are considered obsolete. Old release notes can be found here:
- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014 - [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014
- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014 - [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014
[set-of-changes]: https://github.com/dashpay/dash/compare/v20.0.2...dashpay:v20.0.3 [set-of-changes]: https://github.com/dashpay/dash/compare/v20.0.3...dashpay:v20.0.4

View File

@ -0,0 +1,138 @@
# Dash Core version v20.0.3
Release is now available from:
<https://www.dash.org/downloads/#wallets>
This is a new patch version release, bringing small bug fixes and build system enhancements.
This release is optional for all nodes.
Please report bugs using the issue tracker at GitHub:
<https://github.com/dashpay/dash/issues>
# Upgrading and downgrading
## How to Upgrade
If you are running an older version, shut it down. Wait until it has completely
shut down (which might take a few minutes for older versions), then run the
installer (on Windows) or just copy over /Applications/Dash-Qt (on Mac) or
dashd/dash-qt (on Linux). If you upgrade after DIP0003 activation and you were
using version < 0.13 you will have to reindex (start with -reindex-chainstate
or -reindex) to make sure your wallet has all the new data synced. Upgrading
from version 0.13 should not require any additional actions.
## Downgrade warning
### Downgrade to a version < v19.2.0
Downgrading to a version older than v19.2.0 is not supported due to changes
in the evodb database. If you need to use an older version, you must either
reindex or re-sync the whole chain.
# Notable changes
## Masternode fix
The memory usage during the old quorum data cleanup mechanism was reduced.
## Wallet fix
A fix has been implemented for the reported decryption of wallets.
## RPC changes
In `getspecialtxes` `instantlock` and `chainlock` fields are reflecting actual values now.
## Other changes
Implemented improvements in Github CI and build system for macOS. Fixed compilation issues on FreeBSD.
# v20.0.3 Change log
See detailed [set of changes][set-of-changes].
# Credits
Thanks to everyone who directly contributed to this release:
- Konstantin Akimov (knst)
- Odysseas Gabrielides (ogabrielides)
- PastaPastaPasta
- UdjinM6
As well as everyone that submitted issues, reviewed pull requests and helped
debug the release candidates.
# Older releases
Dash was previously known as Darkcoin.
Darkcoin tree 0.8.x was a fork of Litecoin tree 0.8, original name was XCoin
which was first released on Jan/18/2014.
Darkcoin tree 0.9.x was the open source implementation of masternodes based on
the 0.8.x tree and was first released on Mar/13/2014.
Darkcoin tree 0.10.x used to be the closed source implementation of Darksend
which was released open source on Sep/25/2014.
Dash Core tree 0.11.x was a fork of Bitcoin Core tree 0.9,
Darkcoin was rebranded to Dash.
Dash Core tree 0.12.0.x was a fork of Bitcoin Core tree 0.10.
Dash Core tree 0.12.1.x was a fork of Bitcoin Core tree 0.12.
These release are considered obsolete. Old release notes can be found here:
- [v20.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.2.md) released December/06/2023
- [v20.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.1.md) released November/18/2023
- [v20.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-20.0.0.md) released November/15/2023
- [v19.3.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.3.0.md) released July/31/2023
- [v19.2.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.2.0.md) released June/19/2023
- [v19.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.1.0.md) released May/22/2023
- [v19.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-19.0.0.md) released Apr/14/2023
- [v18.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.2.2.md) released Mar/21/2023
- [v18.2.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.2.1.md) released Jan/17/2023
- [v18.2.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.2.0.md) released Jan/01/2023
- [v18.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.1.1.md) released January/08/2023
- [v18.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.1.0.md) released October/09/2022
- [v18.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.0.2.md) released October/09/2022
- [v18.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-18.0.1.md) released August/17/2022
- [v0.17.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.17.0.3.md) released June/07/2021
- [v0.17.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.17.0.2.md) released May/19/2021
- [v0.16.1.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.1.1.md) released November/17/2020
- [v0.16.1.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.1.0.md) released November/14/2020
- [v0.16.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.16.0.1.md) released September/30/2020
- [v0.15.0.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.15.0.0.md) released Febrary/18/2020
- [v0.14.0.5](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.5.md) released December/08/2019
- [v0.14.0.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.4.md) released November/22/2019
- [v0.14.0.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.3.md) released August/15/2019
- [v0.14.0.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.2.md) released July/4/2019
- [v0.14.0.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.1.md) released May/31/2019
- [v0.14.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.14.0.md) released May/22/2019
- [v0.13.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.3.md) released Apr/04/2019
- [v0.13.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.2.md) released Mar/15/2019
- [v0.13.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.1.md) released Feb/9/2019
- [v0.13.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.13.0.md) released Jan/14/2019
- [v0.12.3.4](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.4.md) released Dec/14/2018
- [v0.12.3.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.3.md) released Sep/19/2018
- [v0.12.3.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.2.md) released Jul/09/2018
- [v0.12.3.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.3.1.md) released Jul/03/2018
- [v0.12.2.3](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.3.md) released Jan/12/2018
- [v0.12.2.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.2.md) released Dec/17/2017
- [v0.12.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.2.md) released Nov/08/2017
- [v0.12.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.1.md) released Feb/06/2017
- [v0.12.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.12.0.md) released Aug/15/2015
- [v0.11.2](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.2.md) released Mar/04/2015
- [v0.11.1](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.1.md) released Feb/10/2015
- [v0.11.0](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.11.0.md) released Jan/15/2015
- [v0.10.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.10.0.md) released Sep/25/2014
- [v0.9.x](https://github.com/dashpay/dash/blob/master/doc/release-notes/dash/release-notes-0.9.0.md) released Mar/13/2014
[set-of-changes]: https://github.com/dashpay/dash/compare/v20.0.2...dashpay:v20.0.3

View File

@ -284,7 +284,6 @@ public:
consensus.llmqTypeDIP0024InstantSend = Consensus::LLMQType::LLMQ_60_75; consensus.llmqTypeDIP0024InstantSend = Consensus::LLMQType::LLMQ_60_75;
consensus.llmqTypePlatform = Consensus::LLMQType::LLMQ_100_67; consensus.llmqTypePlatform = Consensus::LLMQType::LLMQ_100_67;
consensus.llmqTypeMnhf = Consensus::LLMQType::LLMQ_400_85; consensus.llmqTypeMnhf = Consensus::LLMQType::LLMQ_400_85;
consensus.llmqTypeAssetLocks = consensus.llmqTypePlatform;
fDefaultConsistencyChecks = false; fDefaultConsistencyChecks = false;
fRequireStandard = true; fRequireStandard = true;
@ -477,7 +476,6 @@ public:
consensus.llmqTypeDIP0024InstantSend = Consensus::LLMQType::LLMQ_60_75; consensus.llmqTypeDIP0024InstantSend = Consensus::LLMQType::LLMQ_60_75;
consensus.llmqTypePlatform = Consensus::LLMQType::LLMQ_25_67; consensus.llmqTypePlatform = Consensus::LLMQType::LLMQ_25_67;
consensus.llmqTypeMnhf = Consensus::LLMQType::LLMQ_50_60; consensus.llmqTypeMnhf = Consensus::LLMQType::LLMQ_50_60;
consensus.llmqTypeAssetLocks = consensus.llmqTypePlatform;
fDefaultConsistencyChecks = false; fDefaultConsistencyChecks = false;
fRequireStandard = false; fRequireStandard = false;
@ -653,7 +651,6 @@ public:
consensus.llmqTypeDIP0024InstantSend = Consensus::LLMQType::LLMQ_DEVNET_DIP0024; consensus.llmqTypeDIP0024InstantSend = Consensus::LLMQType::LLMQ_DEVNET_DIP0024;
consensus.llmqTypePlatform = Consensus::LLMQType::LLMQ_DEVNET_PLATFORM; consensus.llmqTypePlatform = Consensus::LLMQType::LLMQ_DEVNET_PLATFORM;
consensus.llmqTypeMnhf = Consensus::LLMQType::LLMQ_DEVNET; consensus.llmqTypeMnhf = Consensus::LLMQType::LLMQ_DEVNET;
consensus.llmqTypeAssetLocks = consensus.llmqTypePlatform;
UpdateDevnetLLMQChainLocksFromArgs(args); UpdateDevnetLLMQChainLocksFromArgs(args);
UpdateDevnetLLMQInstantSendFromArgs(args); UpdateDevnetLLMQInstantSendFromArgs(args);
@ -735,7 +732,6 @@ public:
void UpdateDevnetLLMQPlatform(Consensus::LLMQType llmqType) void UpdateDevnetLLMQPlatform(Consensus::LLMQType llmqType)
{ {
consensus.llmqTypePlatform = llmqType; consensus.llmqTypePlatform = llmqType;
consensus.llmqTypeAssetLocks = llmqType;
} }
/** /**
@ -940,7 +936,6 @@ public:
consensus.llmqTypeDIP0024InstantSend = Consensus::LLMQType::LLMQ_TEST_DIP0024; consensus.llmqTypeDIP0024InstantSend = Consensus::LLMQType::LLMQ_TEST_DIP0024;
consensus.llmqTypePlatform = Consensus::LLMQType::LLMQ_TEST_PLATFORM; consensus.llmqTypePlatform = Consensus::LLMQType::LLMQ_TEST_PLATFORM;
consensus.llmqTypeMnhf = Consensus::LLMQType::LLMQ_TEST; consensus.llmqTypeMnhf = Consensus::LLMQType::LLMQ_TEST;
consensus.llmqTypeAssetLocks = Consensus::LLMQType::LLMQ_TEST;
UpdateLLMQTestParametersFromArgs(args, Consensus::LLMQType::LLMQ_TEST); UpdateLLMQTestParametersFromArgs(args, Consensus::LLMQType::LLMQ_TEST);
UpdateLLMQTestParametersFromArgs(args, Consensus::LLMQType::LLMQ_TEST_INSTANTSEND); UpdateLLMQTestParametersFromArgs(args, Consensus::LLMQType::LLMQ_TEST_INSTANTSEND);

View File

@ -163,7 +163,6 @@ struct Params {
LLMQType llmqTypeDIP0024InstantSend{LLMQType::LLMQ_NONE}; LLMQType llmqTypeDIP0024InstantSend{LLMQType::LLMQ_NONE};
LLMQType llmqTypePlatform{LLMQType::LLMQ_NONE}; LLMQType llmqTypePlatform{LLMQType::LLMQ_NONE};
LLMQType llmqTypeMnhf{LLMQType::LLMQ_NONE}; LLMQType llmqTypeMnhf{LLMQType::LLMQ_NONE};
LLMQType llmqTypeAssetLocks{LLMQType::LLMQ_NONE};
int DeploymentHeight(BuriedDeployment dep) const int DeploymentHeight(BuriedDeployment dep) const
{ {

View File

@ -114,7 +114,7 @@ bool CAssetUnlockPayload::VerifySig(const uint256& msgHash, gsl::not_null<const
// and at the quorumHash must be active in either the current or previous quorum cycle // and at the quorumHash must be active in either the current or previous quorum cycle
// and the sig must validate against that specific quorumHash. // and the sig must validate against that specific quorumHash.
Consensus::LLMQType llmqType = Params().GetConsensus().llmqTypeAssetLocks; Consensus::LLMQType llmqType = Params().GetConsensus().llmqTypePlatform;
// We check at most 2 quorums // We check at most 2 quorums
const auto quorums = llmq::quorumManager->ScanQuorums(llmqType, pindexTip, 2); const auto quorums = llmq::quorumManager->ScanQuorums(llmqType, pindexTip, 2);

View File

@ -738,6 +738,11 @@ void CGovernanceManager::VoteGovernanceTriggers(const std::optional<const CGover
const auto activeTriggers = triggerman.GetActiveTriggers(); const auto activeTriggers = triggerman.GetActiveTriggers();
for (const auto& trigger : activeTriggers) { for (const auto& trigger : activeTriggers) {
const uint256 trigger_hash = trigger->GetGovernanceObject(*this)->GetHash(); const uint256 trigger_hash = trigger->GetGovernanceObject(*this)->GetHash();
if (trigger->GetBlockHeight() <= nCachedBlockHeight) {
// ignore triggers from the past
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Not voting NO-FUNDING for outdated trigger:%s\n", __func__, trigger_hash.ToString());
continue;
}
if (trigger_hash == votedFundingYesTriggerHash) { if (trigger_hash == votedFundingYesTriggerHash) {
// Skip actual trigger // Skip actual trigger
LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Not voting NO-FUNDING for trigger:%s, we voted yes for it already\n", __func__, trigger_hash.ToString()); LogPrint(BCLog::GOBJECT, "CGovernanceManager::%s Not voting NO-FUNDING for trigger:%s, we voted yes for it already\n", __func__, trigger_hash.ToString());

View File

@ -45,13 +45,13 @@ from test_framework.util import (
hex_str_to_bytes, hex_str_to_bytes,
) )
llmq_type_test = 100 llmq_type_test = 106 # LLMQType::LLMQ_TEST_PLATFORM
tiny_amount = int(Decimal("0.0007") * COIN) tiny_amount = int(Decimal("0.0007") * COIN)
blocks_in_one_day = 576 blocks_in_one_day = 576
class AssetLocksTest(DashTestFramework): class AssetLocksTest(DashTestFramework):
def set_test_params(self): def set_test_params(self):
self.set_dash_test_params(5, 3) self.set_dash_test_params(6, 4, evo_count=3)
def skip_test_if_missing_module(self): def skip_test_if_missing_module(self):
self.skip_if_no_wallet() self.skip_if_no_wallet()
@ -98,7 +98,9 @@ class AssetLocksTest(DashTestFramework):
request_id = hash256(request_id_buf)[::-1].hex() request_id = hash256(request_id_buf)[::-1].hex()
height = node_wallet.getblockcount() height = node_wallet.getblockcount()
self.log.info(f"Creating asset unlock: {llmq_type_test} {request_id}")
quorumHash = mninfo[0].node.quorum("selectquorum", llmq_type_test, request_id)["quorumHash"] quorumHash = mninfo[0].node.quorum("selectquorum", llmq_type_test, request_id)["quorumHash"]
self.log.info(f"Used quorum hash: {quorumHash}")
unlockTx_payload = CAssetUnlockTx( unlockTx_payload = CAssetUnlockTx(
version = 1, version = 1,
index = index, index = index,
@ -235,8 +237,35 @@ class AssetLocksTest(DashTestFramework):
node = self.nodes[1] node = self.nodes[1]
self.set_sporks() self.set_sporks()
self.activate_v20()
self.activate_v19(expected_activation_height=900)
self.log.info("Activated v19 at height:" + str(node.getblockcount()))
# TODO: need to refactor this part to common code
# enabling instantsend -> 3 rotating quorums -> new 103 quorum
# with following dynamically adding evo nodes one-by-one seems
# as little too much complex for functional test (each which use Evo nodes)
self.nodes[0].sporkupdate("SPORK_2_INSTANTSEND_ENABLED", 0)
self.wait_for_sporks_same()
self.move_to_next_cycle()
self.log.info("Cycle H height:" + str(self.nodes[0].getblockcount()))
self.move_to_next_cycle()
self.log.info("Cycle H+C height:" + str(self.nodes[0].getblockcount()))
self.move_to_next_cycle()
self.log.info("Cycle H+2C height:" + str(self.nodes[0].getblockcount()))
self.mine_cycle_quorum(llmq_type_name='llmq_test_dip0024', llmq_type=103)
for i in range(3):
self.dynamically_add_masternode(evo=True)
node.generate(8)
self.sync_blocks()
self.set_sporks()
self.activate_v20()
node.generate(1)
self.sync_all()
self.mempool_size = 0 self.mempool_size = 0
key = ECKey() key = ECKey()
@ -253,13 +282,13 @@ class AssetLocksTest(DashTestFramework):
coin = coins.pop() coin = coins.pop()
asset_lock_tx = self.create_assetlock(coin, locked_1, pubkey) asset_lock_tx = self.create_assetlock(coin, locked_1, pubkey)
self.check_mempool_result(tx=asset_lock_tx, result_expected={'allowed': True}) self.check_mempool_result(tx=asset_lock_tx, result_expected={'allowed': True})
self.validate_credit_pool_balance(0) self.validate_credit_pool_balance(0)
txid_in_block = self.send_tx(asset_lock_tx) txid_in_block = self.send_tx(asset_lock_tx)
assert "assetLockTx" in node.getrawtransaction(txid_in_block, 1) assert "assetLockTx" in node.getrawtransaction(txid_in_block, 1)
self.validate_credit_pool_balance(0) self.validate_credit_pool_balance(0)
node.generate(1) node.generate(1)
assert_equal(self.get_credit_pool_balance(node=node_wallet), 0)
assert_equal(self.get_credit_pool_balance(node=node), locked_1) assert_equal(self.get_credit_pool_balance(node=node), locked_1)
self.log.info("Generate a number of blocks to ensure this is the longest chain for later in the test when we reconsiderblock") self.log.info("Generate a number of blocks to ensure this is the longest chain for later in the test when we reconsiderblock")
node.generate(12) node.generate(12)
@ -295,7 +324,7 @@ class AssetLocksTest(DashTestFramework):
self.create_and_check_block([extra_lock_tx], expected_error = 'bad-cbtx-assetlocked-amount') self.create_and_check_block([extra_lock_tx], expected_error = 'bad-cbtx-assetlocked-amount')
self.log.info("Mine a quorum...") self.log.info("Mine a quorum...")
self.mine_quorum() self.mine_quorum(llmq_type_name='llmq_test_platform', llmq_type=106, expected_connections=2, expected_members=3, expected_contributions=3, expected_complaints=0, expected_justifications=0, expected_commitments=3 )
self.validate_credit_pool_balance(locked_1) self.validate_credit_pool_balance(locked_1)
@ -345,7 +374,7 @@ class AssetLocksTest(DashTestFramework):
reason = "double copy") reason = "double copy")
self.log.info("Mining next quorum to check tx 'asset_unlock_tx_late' is still valid...") self.log.info("Mining next quorum to check tx 'asset_unlock_tx_late' is still valid...")
self.mine_quorum() self.mine_quorum(llmq_type_name="llmq_test_platform", llmq_type=106)
self.log.info("Checking credit pool amount is same...") self.log.info("Checking credit pool amount is same...")
self.validate_credit_pool_balance(locked_1 - 1 * COIN) self.validate_credit_pool_balance(locked_1 - 1 * COIN)
self.check_mempool_result(tx=asset_unlock_tx_late, result_expected={'allowed': True}) self.check_mempool_result(tx=asset_unlock_tx_late, result_expected={'allowed': True})
@ -365,7 +394,7 @@ class AssetLocksTest(DashTestFramework):
result_expected={'allowed': False, 'reject-reason' : 'bad-assetunlock-too-late'}) result_expected={'allowed': False, 'reject-reason' : 'bad-assetunlock-too-late'})
self.log.info("Checking that two quorums later it is too late because quorum is not active...") self.log.info("Checking that two quorums later it is too late because quorum is not active...")
self.mine_quorum() self.mine_quorum(llmq_type_name="llmq_test_platform", llmq_type=106)
self.log.info("Expecting new reject-reason...") self.log.info("Expecting new reject-reason...")
self.check_mempool_result(tx=asset_unlock_tx_too_late, self.check_mempool_result(tx=asset_unlock_tx_too_late,
result_expected={'allowed': False, 'reject-reason' : 'bad-assetunlock-not-active-quorum'}) result_expected={'allowed': False, 'reject-reason' : 'bad-assetunlock-not-active-quorum'})
@ -423,7 +452,7 @@ class AssetLocksTest(DashTestFramework):
self.log.info("Fast forward to the next day to reset all current unlock limits...") self.log.info("Fast forward to the next day to reset all current unlock limits...")
self.slowly_generate_batch(blocks_in_one_day + 1) self.slowly_generate_batch(blocks_in_one_day + 1)
self.mine_quorum() self.mine_quorum(llmq_type_name="llmq_test_platform", llmq_type=106)
total = self.get_credit_pool_balance() total = self.get_credit_pool_balance()
while total <= 10_900 * COIN: while total <= 10_900 * COIN:

View File

@ -303,13 +303,34 @@ class DashGovernanceTest (DashTestFramework):
self.check_superblockbudget(True) self.check_superblockbudget(True)
self.check_superblock() self.check_superblock()
# Move a few block past the recent superblock height and make sure we have no new votes
for _ in range(5):
with self.nodes[1].assert_debug_log("", [f"Voting NO-FUNDING for trigger:{winning_trigger_hash} success"]):
self.nodes[0].generate(1)
self.bump_mocktime(1)
self.sync_blocks()
# Votes on both triggers should NOT change
assert_equal(self.nodes[0].gobject("list", "valid", "triggers")[winning_trigger_hash]['NoCount'], 1)
assert_equal(self.nodes[0].gobject("list", "valid", "triggers")[isolated_trigger_hash]['NoCount'], self.mn_count - 1)
block_count = self.nodes[0].getblockcount()
n = sb_cycle - block_count % sb_cycle
# Move remaining n blocks until the next Superblock
for i in range(n):
self.nodes[0].generate(1)
self.bump_mocktime(1)
self.sync_blocks()
assert_equal(self.nodes[0].getblockcount(), 260)
assert_equal(self.nodes[0].getblockchaininfo()["softforks"]["v20"]["bip9"]["status"], "active")
# Mine and check a couple more superblocks # Mine and check a couple more superblocks
for i in range(2): for i in range(2):
for _ in range(20): for _ in range(20):
self.nodes[0].generate(1) self.nodes[0].generate(1)
self.bump_mocktime(1) self.bump_mocktime(1)
self.sync_blocks() self.sync_blocks()
assert_equal(self.nodes[0].getblockcount(), 240 + (i + 1) * 20) assert_equal(self.nodes[0].getblockcount(), 260 + (i + 1) * 20)
assert_equal(self.nodes[0].getblockchaininfo()["softforks"]["v20"]["bip9"]["status"], "active") assert_equal(self.nodes[0].getblockchaininfo()["softforks"]["v20"]["bip9"]["status"], "active")
self.check_superblockbudget(True) self.check_superblockbudget(True)
self.check_superblock() self.check_superblock()

View File

@ -1155,6 +1155,7 @@ class DashTestFramework(BitcoinTestFramework):
for i in range(0, idx): for i in range(0, idx):
self.connect_nodes(i, idx) self.connect_nodes(i, idx)
# TODO: to let creating Evo Nodes without instant-send available
def dynamically_add_masternode(self, evo=False, rnd=None, should_be_rejected=False): def dynamically_add_masternode(self, evo=False, rnd=None, should_be_rejected=False):
mn_idx = len(self.nodes) mn_idx = len(self.nodes)