// 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