Merge remote-tracking branch 'origin/duke' into duke

This commit is contained in:
Duke Leto
2019-11-22 14:22:06 -05:00
3 changed files with 117 additions and 31 deletions

46
contrib/hush-uri.bat Normal file
View File

@@ -0,0 +1,46 @@
@Echo On
Title Reg Converter v1.1 & Color 1A
REM ~ call :IsAdmin
call :RegExport
Exit
:RegExport
Set RegFile="%Temp%\~etsaclu.tmp"
Set "hush=%~dp0"
set "hush=%hush:\=\\%"
If Exist %RegFile% (
Attrib -R -S -H %RegFile% & Del /F /Q %RegFile%
If Exist %RegFile% cls & Echo Could not delete file %RegFile% & Pause
)
> %RegFile% Echo Windows Registry Editor Version 5.00
>> %RegFile% Echo.
>> %RegFile% Echo [HKEY_CLASSES_ROOT\hush]
>> %RegFile% Echo @="URL:hush protocol"
>> %RegFile% Echo "URL Protocol"=""
>> %RegFile% Echo.
>> %RegFile% Echo [HKEY_CLASSES_ROOT\hush\DefaultIcon]
>> %RegFile% Echo @="silentdragon.exe"
>> %RegFile% Echo.
>> %RegFile% Echo [HKEY_CLASSES_ROOT\hush\Shell]
>> %RegFile% Echo.
>> %RegFile% Echo [HKEY_CLASSES_ROOT\hush\Shell\Open]
>> %RegFile% Echo.
>> %RegFile% Echo [HKEY_CLASSES_ROOT\hush\Shell\Open\Command]
>> %RegFile% Echo @="%hush%silentdragon.exe \"%%1\""
Start /Wait %systemroot%\Regedit.exe /S %RegFile%
Del %RegFile%
goto:eof
:IsAdmin
Reg.exe query "HKU\S-1-5-19\Environment"
If Not %ERRORLEVEL% EQU 0 (
Cls & Echo You must have administrator rights to continue ...
Pause & Exit
)
Cls
goto:eof

View File

@@ -1,4 +1,5 @@
// Copyright (c) 2012-2014 The Bitcoin Core developers // Copyright (c) 2012-2014 The Bitcoin Core developers
// Copyright (c) 2019 The Hush developers
// Distributed under the MIT software license, see the accompanying // Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php. // file COPYING or http://www.opensource.org/licenses/mit-license.php.
@@ -616,9 +617,10 @@ CAmount CCoinsViewCache::GetValueIn(int32_t nHeight,int64_t *interestp,const CTr
bool CCoinsViewCache::HaveJoinSplitRequirements(const CTransaction& tx) const bool CCoinsViewCache::HaveJoinSplitRequirements(const CTransaction& tx) const
{ {
for (const SpendDescription &spendDescription : tx.vShieldedSpend) { for (const SpendDescription &spendDescription : tx.vShieldedSpend) {
if (GetNullifier(spendDescription.nullifier, SAPLING)) // Prevent double spends if (GetNullifier(spendDescription.nullifier, SAPLING)) { // Prevent double spends
fprintf(stderr,"%s: sapling nullifier %s exists, preventing double spend\n", __FUNCTION__, spendDescription.nullifier); fprintf(stderr,"%s: sapling nullifier %s exists, preventing double spend\n", __FUNCTION__, spendDescription.nullifier);
return false; return false;
}
SaplingMerkleTree tree; SaplingMerkleTree tree;
if (!GetSaplingAnchorAt(spendDescription.anchor, tree)) { if (!GetSaplingAnchorAt(spendDescription.anchor, tree)) {

View File

@@ -776,14 +776,23 @@ bool InitSanityCheck(void)
void NoParamsShutdown(void) void NoParamsShutdown(void)
{ {
//TODO: error message incorrect about location
fprintf(stderr,"%s: no params!\n", __FUNCTION__); fprintf(stderr,"%s: no params!\n", __FUNCTION__);
LogPrintf("Could not find Sapling params anywhere! Exiting..."); LogPrintf("Could not find valid Sapling params anywhere! Exiting...");
uiInterface.ThreadSafeMessageBox(strprintf( uiInterface.ThreadSafeMessageBox(strprintf(
_("Cannot find the Sapling network parameters in the following directory:\n" _("Cannot find the Sapling network parameters! Something is very wrong.\n"
"%s\n" "Please join our Discord for help: https://myhush.org/discord/")),
"Please run join our Discord for help: https://myhush.org/discord/"), "", CClientUIInterface::MSG_ERROR);
ZC_GetParamsDir()), StartShutdown();
return;
}
void CorruptParamsShutdown(void)
{
fprintf(stderr,"%s: corrupt params!\n", __FUNCTION__);
LogPrintf("We detected corrupt Sapling params! Exiting...");
uiInterface.ThreadSafeMessageBox(strprintf(
_("Corrupt Sapling network parameters were detected! Something is very wrong.\n"
"Please join our Discord for help: https://myhush.org/discord/")),
"", CClientUIInterface::MSG_ERROR); "", CClientUIInterface::MSG_ERROR);
StartShutdown(); StartShutdown();
return; return;
@@ -803,7 +812,10 @@ static void ZC_LoadParams(
bool found = false; bool found = false;
// Some people have previous partial downloads of zcash params, so check that last // Some people have previous partial downloads of zcash params, so check that last
// Sapling Param Search path: . /usr/share/hush .. ../hush3 ~/.zcash-params // Sapling Param Search path: . /usr/share/hush .. ../hush3 ./Contents/MacOS/ ~/.zcash-params
LogPrintf("Looking for sapling params...");
gettimeofday(&tv_start, 0);
// PWD // PWD
boost::filesystem::path sapling_spend = "sapling-spend.params"; boost::filesystem::path sapling_spend = "sapling-spend.params";
@@ -843,6 +855,16 @@ static void ZC_LoadParams(
} }
} }
if (!found) {
// DMG Support: Apple just has to do things differently...
sapling_spend = boost::filesystem::path("Contents/MacOS") / "hush3" / "sapling-spend.params";
sapling_output = boost::filesystem::path("Contents/MacOS") / "hush3" / "sapling-output.params";
if (files_exist(sapling_spend, sapling_output)) {
fprintf(stderr,"Found sapling params in ../Contents/MacOS\n");
found = true;
}
}
if (!found) { if (!found) {
// The traditional place Zcash params are stored, should not hit this case in normal circumstances, // The traditional place Zcash params are stored, should not hit this case in normal circumstances,
// as Hush packages sapling params now // as Hush packages sapling params now
@@ -860,16 +882,32 @@ static void ZC_LoadParams(
return; return;
} }
boost::system::error_code ec1, ec2;
boost::uintmax_t spend_size = file_size(sapling_spend, ec1);
boost::uintmax_t output_size = file_size(sapling_output, ec2);
fprintf(stderr,"Sapling spend: %d bytes, output: %d bytes\n", spend_size, output_size);
// We could check sha hashes, but we mostly want to detect on-disk file corruption
// or people having a full harddrive. Full validation happens in librustzcash_init_zksnark_params
// This prevents users seeing very low-level errors from that routine
boost::uintmax_t spend_valid = 47958396;
boost::uintmax_t output_valid = 3592860;
//TODO: passing the exact reason for corruption to GUI
if (spend_size != spend_valid) {
fprintf(stderr,"Sapling spend %d bytes != %d is invalid!\n", spend_size, spend_valid);
CorruptParamsShutdown();
return;
}
//LogPrintf("Loading verifying key from %s\n", vk_path.string().c_str()); if (output_size != output_valid) {
gettimeofday(&tv_start, 0); fprintf(stderr,"Sapling ouput %d bytes != %d is invalid!\n", output_size, output_valid);
CorruptParamsShutdown();
//pzcashParams = ZCJoinSplit::Prepared(vk_path.string(), pk_path.string()); return;
}
gettimeofday(&tv_end, 0); gettimeofday(&tv_end, 0);
elapsed = float(tv_end.tv_sec-tv_start.tv_sec) + (tv_end.tv_usec-tv_start.tv_usec)/float(1000000); elapsed = float(tv_end.tv_sec-tv_start.tv_sec) + (tv_end.tv_usec-tv_start.tv_usec)/float(1000000);
LogPrintf("Loaded verifying key in %fs seconds.\n", elapsed); LogPrintf("Found sapling param in %fs seconds.\n", elapsed);
static_assert( sizeof(boost::filesystem::path::value_type) == sizeof(codeunit), "librustzcash not configured correctly"); static_assert( sizeof(boost::filesystem::path::value_type) == sizeof(codeunit), "librustzcash not configured correctly");