Use CKeyID and CScriptID instead of new P2PKH/P2SHAddress classes.
This commit is contained in:
parent
d65200c860
commit
a2f8e3b56c
|
@ -78,11 +78,11 @@ namespace libzcash {
|
|||
return tfm::format("Sapling(%s)", HexStr(ss.begin(), ss.end()));
|
||||
}
|
||||
|
||||
std::string operator()(const P2SHAddress &p2sh) const {
|
||||
std::string operator()(const CScriptID &p2sh) const {
|
||||
return tfm::format("P2SH(%s)", p2sh.GetHex());
|
||||
}
|
||||
|
||||
std::string operator()(const P2PKHAddress &p2pkh) const {
|
||||
std::string operator()(const CKeyID &p2pkh) const {
|
||||
return tfm::format("P2PKH(%s)", p2pkh.GetHex());
|
||||
}
|
||||
|
||||
|
@ -140,11 +140,11 @@ TEST(Keys, EncodeAndDecodeUnified)
|
|||
ua.AddReceiver(r);
|
||||
}
|
||||
if (!test[1].isNull()) {
|
||||
libzcash::P2SHAddress r(ParseHex(test[1].get_str()));
|
||||
CScriptID r(ParseHex(test[1].get_str()));
|
||||
ua.AddReceiver(r);
|
||||
}
|
||||
if (!test[0].isNull()) {
|
||||
libzcash::P2PKHAddress r(ParseHex(test[0].get_str()));
|
||||
CKeyID r(ParseHex(test[0].get_str()));
|
||||
ua.AddReceiver(r);
|
||||
}
|
||||
|
||||
|
|
|
@ -56,8 +56,8 @@ public:
|
|||
DataLenForReceiver() {}
|
||||
|
||||
size_t operator()(const libzcash::SaplingPaymentAddress &zaddr) const { return 43; }
|
||||
size_t operator()(const libzcash::P2SHAddress &p2sh) const { return 20; }
|
||||
size_t operator()(const libzcash::P2PKHAddress &p2pkh) const { return 20; }
|
||||
size_t operator()(const CScriptID &p2sh) const { return 20; }
|
||||
size_t operator()(const CKeyID &p2pkh) const { return 20; }
|
||||
size_t operator()(const libzcash::UnknownReceiver &unknown) const { return unknown.data.size(); }
|
||||
};
|
||||
|
||||
|
@ -82,11 +82,11 @@ public:
|
|||
memcpy(data, ss.data(), ss.size());
|
||||
}
|
||||
|
||||
void operator()(const libzcash::P2SHAddress &p2sh) const {
|
||||
void operator()(const CScriptID &p2sh) const {
|
||||
memcpy(data, p2sh.begin(), p2sh.size());
|
||||
}
|
||||
|
||||
void operator()(const libzcash::P2PKHAddress &p2pkh) const {
|
||||
void operator()(const CKeyID &p2pkh) const {
|
||||
memcpy(data, p2pkh.begin(), p2pkh.size());
|
||||
}
|
||||
|
||||
|
@ -421,7 +421,7 @@ static bool AddP2SHReceiver(void* ua, const unsigned char* raw)
|
|||
reinterpret_cast<const char*>(raw + 20),
|
||||
SER_NETWORK,
|
||||
PROTOCOL_VERSION);
|
||||
libzcash::P2SHAddress receiver;
|
||||
CScriptID receiver;
|
||||
ss >> receiver;
|
||||
return reinterpret_cast<libzcash::UnifiedAddress*>(ua)->AddReceiver(receiver);
|
||||
}
|
||||
|
@ -436,7 +436,7 @@ static bool AddP2PKHReceiver(void* ua, const unsigned char* raw)
|
|||
reinterpret_cast<const char*>(raw + 20),
|
||||
SER_NETWORK,
|
||||
PROTOCOL_VERSION);
|
||||
libzcash::P2PKHAddress receiver;
|
||||
CKeyID receiver;
|
||||
ss >> receiver;
|
||||
return reinterpret_cast<libzcash::UnifiedAddress*>(ua)->AddReceiver(receiver);
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ class CKeyID : public uint160
|
|||
public:
|
||||
CKeyID() : uint160() {}
|
||||
CKeyID(const uint160& in) : uint160(in) {}
|
||||
explicit CKeyID(const std::vector<unsigned char>& vch) : uint160(vch) {}
|
||||
};
|
||||
|
||||
typedef uint256 ChainCode;
|
||||
|
|
|
@ -625,6 +625,16 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
/** A reference to a CScript: the Hash160 of its serialization */
|
||||
class CScriptID : public uint160
|
||||
{
|
||||
public:
|
||||
CScriptID() : uint160() {}
|
||||
explicit CScriptID(const CScript& in);
|
||||
CScriptID(const uint160& in) : uint160(in) {}
|
||||
explicit CScriptID(const std::vector<unsigned char>& vch) : uint160(vch) {}
|
||||
};
|
||||
|
||||
class CReserveScript
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -18,15 +18,6 @@ static const bool DEFAULT_ACCEPT_DATACARRIER = true;
|
|||
class CKeyID;
|
||||
class CScript;
|
||||
|
||||
/** A reference to a CScript: the Hash160 of its serialization (see script.h) */
|
||||
class CScriptID : public uint160
|
||||
{
|
||||
public:
|
||||
CScriptID() : uint160() {}
|
||||
explicit CScriptID(const CScript& in);
|
||||
CScriptID(const uint160& in) : uint160(in) {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Default setting for nMaxDatacarrierBytes. 80 bytes of data, +1 for OP_RETURN,
|
||||
* +2 for the pushdata opcodes.
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include "wallet/walletdb.h"
|
||||
#include "wallet/rpcwallet.h"
|
||||
#include "zcash/address/bip44.h"
|
||||
#include "zcash/address/unified.h"
|
||||
#include "zcash/address/mnemonic.h"
|
||||
#include "zcash/Address.hpp"
|
||||
#include "zcash/Note.hpp"
|
||||
|
|
|
@ -24,8 +24,8 @@ bool UnifiedAddress::AddReceiver(Receiver receiver) {
|
|||
auto t = std::visit(TypecodeForReceiver(), r);
|
||||
if (
|
||||
(t == typecode) ||
|
||||
(std::holds_alternative<P2PKHAddress>(r) && std::holds_alternative<P2SHAddress>(receiver)) ||
|
||||
(std::holds_alternative<P2SHAddress>(r) && std::holds_alternative<P2PKHAddress>(receiver))
|
||||
(std::holds_alternative<CKeyID>(r) && std::holds_alternative<CScriptID>(receiver)) ||
|
||||
(std::holds_alternative<CScriptID>(r) && std::holds_alternative<CKeyID>(receiver))
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
@ -76,13 +76,13 @@ uint32_t TypecodeForReceiver::operator()(
|
|||
}
|
||||
|
||||
uint32_t TypecodeForReceiver::operator()(
|
||||
const libzcash::P2SHAddress &p2sh) const
|
||||
const CScriptID &p2sh) const
|
||||
{
|
||||
return ZCASH_UA_TYPECODE_P2SH;
|
||||
}
|
||||
|
||||
uint32_t TypecodeForReceiver::operator()(
|
||||
const libzcash::P2PKHAddress &p2sh) const
|
||||
const CKeyID &p2sh) const
|
||||
{
|
||||
return ZCASH_UA_TYPECODE_P2PKH;
|
||||
}
|
||||
|
@ -100,13 +100,13 @@ std::optional<libzcash::RawAddress> ReceiverToRawAddress::operator()(
|
|||
}
|
||||
|
||||
std::optional<libzcash::RawAddress> ReceiverToRawAddress::operator()(
|
||||
const libzcash::P2SHAddress &p2sh) const
|
||||
const CScriptID &p2sh) const
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
std::optional<libzcash::RawAddress> ReceiverToRawAddress::operator()(
|
||||
const libzcash::P2PKHAddress &p2sh) const
|
||||
const CKeyID &p2sh) const
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
|
|
|
@ -2,26 +2,16 @@
|
|||
#define ZC_ADDRESS_H_
|
||||
|
||||
#include "uint256.h"
|
||||
#include "pubkey.h"
|
||||
#include "script/script.h"
|
||||
#include "zcash/address/orchard.hpp"
|
||||
#include "zcash/address/sapling.hpp"
|
||||
#include "zcash/address/sprout.hpp"
|
||||
#include "zcash/address/unified.h"
|
||||
#include "zcash/address/zip32.h"
|
||||
|
||||
#include <variant>
|
||||
|
||||
namespace libzcash {
|
||||
// We use new classes here instead of CKeyID and CScriptID to prevent a cyclic dependency.
|
||||
class P2PKHAddress: public uint160 {
|
||||
public:
|
||||
P2PKHAddress() {}
|
||||
explicit P2PKHAddress(const std::vector<unsigned char>& vch) : uint160(vch) {}
|
||||
};
|
||||
class P2SHAddress: public uint160 {
|
||||
public:
|
||||
P2SHAddress() {}
|
||||
explicit P2SHAddress(const std::vector<unsigned char>& vch) : uint160(vch) {}
|
||||
};
|
||||
|
||||
/** Protocol addresses that can receive funds in a transaction. */
|
||||
typedef std::variant<SproutPaymentAddress, SaplingPaymentAddress> RawAddress;
|
||||
|
@ -61,8 +51,8 @@ public:
|
|||
*/
|
||||
typedef std::variant<
|
||||
SaplingPaymentAddress,
|
||||
P2SHAddress,
|
||||
P2PKHAddress,
|
||||
CScriptID,
|
||||
CKeyID,
|
||||
UnknownReceiver> Receiver;
|
||||
|
||||
struct ReceiverIterator {
|
||||
|
@ -179,8 +169,8 @@ public:
|
|||
TypecodeForReceiver() {}
|
||||
|
||||
uint32_t operator()(const libzcash::SaplingPaymentAddress &zaddr) const;
|
||||
uint32_t operator()(const libzcash::P2SHAddress &p2sh) const;
|
||||
uint32_t operator()(const libzcash::P2PKHAddress &p2pkh) const;
|
||||
uint32_t operator()(const CScriptID &p2sh) const;
|
||||
uint32_t operator()(const CKeyID &p2pkh) const;
|
||||
uint32_t operator()(const libzcash::UnknownReceiver &p2pkh) const;
|
||||
};
|
||||
|
||||
|
@ -192,8 +182,8 @@ public:
|
|||
ReceiverToRawAddress() {}
|
||||
|
||||
std::optional<libzcash::RawAddress> operator()(const libzcash::SaplingPaymentAddress &zaddr) const;
|
||||
std::optional<libzcash::RawAddress> operator()(const libzcash::P2SHAddress &p2sh) const;
|
||||
std::optional<libzcash::RawAddress> operator()(const libzcash::P2PKHAddress &p2pkh) const;
|
||||
std::optional<libzcash::RawAddress> operator()(const CScriptID &p2sh) const;
|
||||
std::optional<libzcash::RawAddress> operator()(const CKeyID &p2pkh) const;
|
||||
std::optional<libzcash::RawAddress> operator()(const libzcash::UnknownReceiver &p2pkh) const;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue