// Copyright (c) 2012-2015, The CryptoNote developers, The Bytecoin developers
//
// This file is part of Bytecoin.
//
// Bytecoin is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Bytecoin is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with Bytecoin. If not, see .
#pragma once
#include
#include
#include "CryptoTypes.h"
namespace CryptoNote {
struct BaseInput {
uint32_t blockIndex;
};
struct KeyInput {
uint64_t amount;
std::vector outputIndexes;
Crypto::KeyImage keyImage;
};
struct MultisignatureInput {
uint64_t amount;
uint8_t signatureCount;
uint32_t outputIndex;
};
struct KeyOutput {
Crypto::PublicKey key;
};
struct MultisignatureOutput {
std::vector keys;
uint8_t requiredSignatureCount;
};
typedef boost::variant TransactionInput;
typedef boost::variant TransactionOutputTarget;
struct TransactionOutput {
uint64_t amount;
TransactionOutputTarget target;
};
struct TransactionPrefix {
uint8_t version;
uint64_t unlockTime;
std::vector inputs;
std::vector outputs;
std::vector extra;
};
struct Transaction : public TransactionPrefix {
std::vector> signatures;
};
struct ParentBlock {
uint8_t majorVersion;
uint8_t minorVersion;
Crypto::Hash previousBlockHash;
uint16_t transactionCount;
std::vector baseTransactionBranch;
Transaction baseTransaction;
std::vector blockchainBranch;
};
struct BlockHeader {
uint8_t majorVersion;
uint8_t minorVersion;
uint32_t nonce;
uint64_t timestamp;
Crypto::Hash previousBlockHash;
};
struct Block : public BlockHeader {
ParentBlock parentBlock;
Transaction baseTransaction;
std::vector transactionHashes;
};
struct AccountPublicAddress {
Crypto::PublicKey spendPublicKey;
Crypto::PublicKey viewPublicKey;
};
struct AccountKeys {
AccountPublicAddress address;
Crypto::SecretKey spendSecretKey;
Crypto::SecretKey viewSecretKey;
};
struct KeyPair {
Crypto::PublicKey publicKey;
Crypto::SecretKey secretKey;
};
using BinaryArray = std::vector;
}