forked from monero-project/monero
-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
18 changed files
with
548 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
**/.git* | ||
.dockerignore | ||
build |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
// Copyright (c) 2017-2018, The Monero Project | ||
// | ||
// All rights reserved. | ||
// | ||
// Redistribution and use in source and binary forms, with or without modification, are | ||
// permitted provided that the following conditions are met: | ||
// | ||
// 1. Redistributions of source code must retain the above copyright notice, this list of | ||
// conditions and the following disclaimer. | ||
// | ||
// 2. Redistributions in binary form must reproduce the above copyright notice, this list | ||
// of conditions and the following disclaimer in the documentation and/or other | ||
// materials provided with the distribution. | ||
// | ||
// 3. Neither the name of the copyright holder nor the names of its contributors may be | ||
// used to endorse or promote products derived from this software without specific | ||
// prior written permission. | ||
// | ||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY | ||
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL | ||
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | ||
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF | ||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
// | ||
|
||
#if defined(HAVE_MONERUJO) | ||
|
||
#ifdef __cplusplus | ||
extern "C" | ||
{ | ||
#endif | ||
|
||
/** | ||
* @brief LedgerFind - find Ledger Device and return it's name | ||
* @param buffer - buffer for name of found device | ||
* @param len - length of buffer | ||
* @return 0 - success | ||
* -1 - no device connected / found | ||
* -2 - JVM not found | ||
*/ | ||
int LedgerFind(char *buffer, size_t len); | ||
|
||
/** | ||
* @brief LedgerExchange - exchange data with Ledger Device | ||
* @param command - buffer for data to send | ||
* @param cmd_len - length of send to send | ||
* @param response - buffer for received data | ||
* @param max_resp_len - size of receive buffer | ||
* | ||
* @return length of received data in response or -1 if error | ||
*/ | ||
int LedgerExchange(unsigned char *command, unsigned int cmd_len, unsigned char *response, unsigned int max_resp_len); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif | ||
|
||
#include "device_io.hpp" | ||
|
||
#pragma once | ||
|
||
namespace hw { | ||
namespace io { | ||
class device_io_monerujo: device_io { | ||
public: | ||
device_io_monerujo() {}; | ||
~device_io_monerujo() {}; | ||
|
||
void init() {}; | ||
void release() {}; | ||
|
||
void connect(void *params) {}; | ||
void disconnect() {}; | ||
bool connected() const {return true;}; // monerujo is always connected before it gets here | ||
|
||
// returns number of bytes read or -1 on error | ||
int exchange(unsigned char *command, unsigned int cmd_len, unsigned char *response, unsigned int max_resp_len, bool user_input) { | ||
return LedgerExchange(command, cmd_len, response, max_resp_len); | ||
} | ||
}; | ||
}; | ||
}; | ||
|
||
#endif //#if defined(HAVE_MONERUJO) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
#include "coins.h" | ||
#include "coins_info.h" | ||
#include "wallet.h" | ||
#include "crypto/hash.h" | ||
#include "wallet/wallet2.h" | ||
#include "common_defines.h" | ||
|
||
#include <string> | ||
#include <vector> | ||
|
||
using namespace epee; | ||
|
||
namespace Monero { | ||
|
||
Coins::~Coins() = default; | ||
|
||
CoinsImpl::CoinsImpl(WalletImpl *wallet) | ||
: m_wallet(wallet) {} | ||
|
||
CoinsImpl::~CoinsImpl() | ||
{ | ||
for (auto t : m_rows) | ||
delete t; | ||
} | ||
|
||
int CoinsImpl::count() const | ||
{ | ||
boost::shared_lock<boost::shared_mutex> lock(m_rowsMutex); | ||
int result = m_rows.size(); | ||
return result; | ||
} | ||
|
||
CoinsInfo *CoinsImpl::coin(int index) const | ||
{ | ||
boost::shared_lock<boost::shared_mutex> lock(m_rowsMutex); | ||
// sanity check | ||
if (index < 0) | ||
return nullptr; | ||
auto index_ = static_cast<unsigned>(index); | ||
return index_ < m_rows.size() ? m_rows[index_] : nullptr; | ||
} | ||
|
||
std::vector<CoinsInfo *> CoinsImpl::getAll() const | ||
{ | ||
boost::shared_lock<boost::shared_mutex> lock(m_rowsMutex); | ||
return m_rows; | ||
} | ||
|
||
|
||
void CoinsImpl::refresh() | ||
{ | ||
LOG_PRINT_L2("Refreshing coins"); | ||
|
||
boost::unique_lock<boost::shared_mutex> lock(m_rowsMutex); | ||
boost::shared_lock<boost::shared_mutex> transfers_lock(m_wallet->m_wallet->m_transfers_mutex); | ||
|
||
// delete old outputs; | ||
for (auto t : m_rows) | ||
delete t; | ||
m_rows.clear(); | ||
|
||
for (size_t i = 0; i < m_wallet->m_wallet->get_num_transfer_details(); ++i) | ||
{ | ||
const tools::wallet2::transfer_details &td = m_wallet->m_wallet->get_transfer_details(i); | ||
|
||
auto ci = new CoinsInfoImpl(); | ||
ci->m_blockHeight = td.m_block_height; | ||
ci->m_hash = string_tools::pod_to_hex(td.m_txid); | ||
ci->m_internalOutputIndex = td.m_internal_output_index; | ||
ci->m_globalOutputIndex = td.m_global_output_index; | ||
ci->m_spent = td.m_spent; | ||
ci->m_frozen = td.m_frozen; | ||
ci->m_spentHeight = td.m_spent_height; | ||
ci->m_amount = td.m_amount; | ||
ci->m_rct = td.m_rct; | ||
ci->m_keyImageKnown = td.m_key_image_known; | ||
ci->m_pkIndex = td.m_pk_index; | ||
ci->m_subaddrIndex = td.m_subaddr_index.minor; | ||
ci->m_subaddrAccount = td.m_subaddr_index.major; | ||
ci->m_address = m_wallet->m_wallet->get_subaddress_as_str(td.m_subaddr_index); // todo: this is expensive, cache maybe? | ||
ci->m_addressLabel = m_wallet->m_wallet->get_subaddress_label(td.m_subaddr_index); | ||
ci->m_keyImage = string_tools::pod_to_hex(td.m_key_image); | ||
ci->m_unlockTime = td.m_tx.unlock_time; | ||
ci->m_unlocked = m_wallet->m_wallet->is_transfer_unlocked(td); | ||
ci->m_pubKey = string_tools::pod_to_hex(td.get_public_key()); | ||
ci->m_coinbase = td.m_tx.vin.size() == 1 && td.m_tx.vin[0].type() == typeid(cryptonote::txin_gen); | ||
|
||
m_rows.push_back(ci); | ||
} | ||
} | ||
|
||
void CoinsImpl::setFrozen(int index) | ||
{ | ||
try | ||
{ | ||
m_wallet->m_wallet->freeze(index); | ||
refresh(); | ||
} | ||
catch (const std::exception& e) | ||
{ | ||
LOG_ERROR("setLabel: " << e.what()); | ||
} | ||
} | ||
|
||
void CoinsImpl::thaw(int index) | ||
{ | ||
try | ||
{ | ||
m_wallet->m_wallet->thaw(index); | ||
refresh(); | ||
} | ||
catch (const std::exception& e) | ||
{ | ||
LOG_ERROR("thaw: " << e.what()); | ||
} | ||
} | ||
|
||
bool CoinsImpl::isTransferUnlocked(uint64_t unlockTime, uint64_t blockHeight) { | ||
return m_wallet->m_wallet->is_transfer_unlocked(unlockTime, blockHeight); | ||
} | ||
|
||
} // namespace |
Oops, something went wrong.