forked from lthn/blockchain
atomic: bugfixes
This commit is contained in:
parent
b4a3a404b4
commit
7b30823774
3 changed files with 31 additions and 8 deletions
|
|
@ -657,6 +657,14 @@ namespace currency
|
||||||
bool r = derive_public_key_from_target_address(self.account_address, tx_sec_key, output_index, out_eph_public_key, derivation);
|
bool r = derive_public_key_from_target_address(self.account_address, tx_sec_key, output_index, out_eph_public_key, derivation);
|
||||||
CHECK_AND_ASSERT_MES(r, false, "failed to derive_public_key_from_target_address");
|
CHECK_AND_ASSERT_MES(r, false, "failed to derive_public_key_from_target_address");
|
||||||
htlc.pkey_refund = out_eph_public_key;
|
htlc.pkey_refund = out_eph_public_key;
|
||||||
|
//add derivation hint for refund address
|
||||||
|
uint16_t hint = get_derivation_hint(derivation);
|
||||||
|
if (deriv_cache.count(hint) == 0)
|
||||||
|
{
|
||||||
|
tx.extra.push_back(make_tx_derivation_hint_from_uint16(hint));
|
||||||
|
deriv_cache.insert(hint);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (htlc_dest.htlc_hash == null_hash)
|
if (htlc_dest.htlc_hash == null_hash)
|
||||||
{
|
{
|
||||||
|
|
@ -2594,6 +2602,12 @@ namespace currency
|
||||||
}
|
}
|
||||||
tei.outs.back().minimum_sigs = otm.minimum_sigs;
|
tei.outs.back().minimum_sigs = otm.minimum_sigs;
|
||||||
}
|
}
|
||||||
|
else if (out.target.type() == typeid(txout_htlc))
|
||||||
|
{
|
||||||
|
const txout_htlc& otk = boost::get<txout_htlc>(out.target);
|
||||||
|
tei.outs.back().pub_keys.push_back(epee::string_tools::pod_to_hex(otk.pkey_redeem) + "(htlc_pkey_redeem)");
|
||||||
|
tei.outs.back().pub_keys.push_back(epee::string_tools::pod_to_hex(otk.pkey_refund) + "(htlc_pkey_refund)");
|
||||||
|
}
|
||||||
|
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
@ -2697,7 +2711,7 @@ namespace currency
|
||||||
{
|
{
|
||||||
for (size_t n = 0; n < tx.vout.size(); ++n)
|
for (size_t n = 0; n < tx.vout.size(); ++n)
|
||||||
{
|
{
|
||||||
if (tx.vout[n].target.type() == typeid(txout_to_key))
|
if (tx.vout[n].target.type() == typeid(txout_to_key) || tx.vout[n].target.type() == typeid(txout_htlc))
|
||||||
{
|
{
|
||||||
uint64_t amount = tx.vout[n].amount;
|
uint64_t amount = tx.vout[n].amount;
|
||||||
gindices[amount] += 1;
|
gindices[amount] += 1;
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,12 @@ namespace currency
|
||||||
if (!ki.insert(tokey_in.k_image).second)
|
if (!ki.insert(tokey_in.k_image).second)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
else if (in.type() == typeid(txin_htlc))
|
||||||
|
{
|
||||||
|
CHECKED_GET_SPECIFIC_VARIANT(in, const txin_htlc, htlc_in, false);
|
||||||
|
if (!ki.insert(htlc_in.k_image).second)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -461,7 +461,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t
|
||||||
}
|
}
|
||||||
else if (tx.vout[o].target.type() == typeid(txout_htlc))
|
else if (tx.vout[o].target.type() == typeid(txout_htlc))
|
||||||
{
|
{
|
||||||
THROW_IF_TRUE_WALLET_INT_ERR_EX(htlc_info_list.size() > 0, "Found txout_htlc out but htlc_info_list is empty");
|
THROW_IF_FALSE_WALLET_INT_ERR_EX(htlc_info_list.size() > 0, "Found txout_htlc out but htlc_info_list is empty");
|
||||||
if (htlc_info_list.front().hltc_our_out_is_before_expiration)
|
if (htlc_info_list.front().hltc_our_out_is_before_expiration)
|
||||||
{
|
{
|
||||||
out_key = boost::get<currency::txout_htlc>(tx.vout[o].target).pkey_redeem;
|
out_key = boost::get<currency::txout_htlc>(tx.vout[o].target).pkey_redeem;
|
||||||
|
|
@ -502,7 +502,7 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// normal wallet, calculate and store key images for own outs
|
// normal wallet, calculate and store key images for own outs
|
||||||
currency::keypair in_ephemeral;
|
currency::keypair in_ephemeral = AUTO_VAL_INIT(in_ephemeral);
|
||||||
currency::generate_key_image_helper(m_account.get_keys(), tx_pub_key, o, in_ephemeral, ki);
|
currency::generate_key_image_helper(m_account.get_keys(), tx_pub_key, o, in_ephemeral, ki);
|
||||||
WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(in_ephemeral.pub == out_key, "key_image generated ephemeral public key that does not match with output_key");
|
WLT_THROW_IF_FALSE_WALLET_INT_ERR_EX(in_ephemeral.pub == out_key, "key_image generated ephemeral public key that does not match with output_key");
|
||||||
}
|
}
|
||||||
|
|
@ -609,7 +609,14 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t
|
||||||
if (max_out_unlock_time < get_tx_unlock_time(tx, o))
|
if (max_out_unlock_time < get_tx_unlock_time(tx, o))
|
||||||
max_out_unlock_time = get_tx_unlock_time(tx, o);
|
max_out_unlock_time = get_tx_unlock_time(tx, o);
|
||||||
|
|
||||||
WLT_LOG_L0("Received money, transfer #" << transfer_index << ", amount: " << print_money(td.amount()) << ", with tx: " << get_transaction_hash(tx) << ", at height " << height);
|
if (tx.vout[o].target.type() == typeid(txout_to_key))
|
||||||
|
{
|
||||||
|
WLT_LOG_L0("Received money, transfer #" << transfer_index << ", amount: " << print_money(td.amount()) << ", with tx: " << get_transaction_hash(tx) << ", at height " << height);
|
||||||
|
}
|
||||||
|
else if (tx.vout[o].target.type() == typeid(txout_htlc))
|
||||||
|
{
|
||||||
|
WLT_LOG_L0("Detected HTLC[" << (td.m_flags&WALLET_TRANSFER_DETAIL_FLAG_HTLC_REDEEM ? "REDEEM":"REFUND") << "], transfer #" << transfer_index << ", amount: " << print_money(td.amount()) << ", with tx: " << get_transaction_hash(tx) << ", at height " << height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (tx.vout[o].target.type() == typeid(txout_multisig))
|
else if (tx.vout[o].target.type() == typeid(txout_multisig))
|
||||||
{
|
{
|
||||||
|
|
@ -620,10 +627,6 @@ void wallet2::process_new_transaction(const currency::transaction& tx, uint64_t
|
||||||
tdb.m_internal_output_index = o;
|
tdb.m_internal_output_index = o;
|
||||||
WLT_LOG_L0("Received multisig, multisig out id: " << multisig_id << ", amount: " << tdb.amount() << ", with tx: " << get_transaction_hash(tx));
|
WLT_LOG_L0("Received multisig, multisig out id: " << multisig_id << ", amount: " << tdb.amount() << ", with tx: " << get_transaction_hash(tx));
|
||||||
}
|
}
|
||||||
else if (tx.vout[o].target.type() == typeid(txout_htlc))
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue