bool BlockchainExplorerDataBuilder::getPaymentId(const Transaction& transaction, Crypto::Hash& paymentId) { std::vector<TransactionExtraField> txExtraFields; parseTransactionExtra(transaction.extra, txExtraFields); TransactionExtraNonce extraNonce; if (!findTransactionExtraFieldByType(txExtraFields, extraNonce)) { return false; } return getPaymentIdFromTransactionExtraNonce(extraNonce.nonce, paymentId); }
PublicKey getTransactionPublicKeyFromExtra(const std::vector<uint8_t>& tx_extra) { std::vector<TransactionExtraField> tx_extra_fields; parseTransactionExtra(tx_extra, tx_extra_fields); TransactionExtraPublicKey pub_key_field; if (!findTransactionExtraFieldByType(tx_extra_fields, pub_key_field)) return boost::value_initialized<PublicKey>(); return pub_key_field.publicKey; }
bool getPaymentIdFromTxExtra(const std::vector<uint8_t>& extra, Hash& paymentId) { std::vector<TransactionExtraField> tx_extra_fields; if (!parseTransactionExtra(extra, tx_extra_fields)) { return false; } TransactionExtraNonce extra_nonce; if (findTransactionExtraFieldByType(tx_extra_fields, extra_nonce)) { if (!getPaymentIdFromTransactionExtraNonce(extra_nonce.nonce, paymentId)) { return false; } } else { return false; } return true; }
bool getMergeMiningTagFromExtra(const std::vector<uint8_t>& tx_extra, TransactionExtraMergeMiningTag& mm_tag) { std::vector<TransactionExtraField> tx_extra_fields; parseTransactionExtra(tx_extra, tx_extra_fields); return findTransactionExtraFieldByType(tx_extra_fields, mm_tag); }