Hush Full Node software. We were censored from Github, this is where all development happens now.
https://hush.is
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.4 KiB
52 lines
1.4 KiB
// Copyright (c) 2016-2024 The Hush developers
|
|
// Distributed under the GPLv3 software license, see the accompanying
|
|
// file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
|
|
#include "cc/eval.h"
|
|
#include "crosschain.h"
|
|
#include "notarizationdb.h"
|
|
|
|
int GetSymbolAuthority(const char* symbol)
|
|
{
|
|
return CROSSCHAIN_HUSH;
|
|
}
|
|
|
|
|
|
bool CheckTxAuthority(const CTransaction &tx, CrosschainAuthority auth)
|
|
{
|
|
EvalRef eval;
|
|
|
|
if (tx.vin.size() < auth.requiredSigs) return false;
|
|
|
|
uint8_t seen[64] = {0};
|
|
|
|
BOOST_FOREACH(const CTxIn &txIn, tx.vin)
|
|
{
|
|
// Get notary pubkey
|
|
CTransaction tx;
|
|
uint256 hashBlock;
|
|
if (!eval->GetTxUnconfirmed(txIn.prevout.hash, tx, hashBlock)) return false;
|
|
if (tx.vout.size() < txIn.prevout.n) return false;
|
|
CScript spk = tx.vout[txIn.prevout.n].scriptPubKey;
|
|
if (spk.size() != 35) return false;
|
|
const unsigned char *pk = &spk[0];
|
|
if (pk++[0] != 33) return false;
|
|
if (pk[33] != OP_CHECKSIG) return false;
|
|
|
|
// Check it's a notary
|
|
for (int i=0; i<auth.size; i++) {
|
|
if (!seen[i]) {
|
|
if (memcmp(pk, auth.notaries[i], 33) == 0) {
|
|
seen[i] = 1;
|
|
goto found;
|
|
} else {
|
|
//printf("notary.%i is not valid!\n",i);
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
found:;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|