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