New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

listreceivedbyaddress Filter Address #9991

Merged
merged 2 commits into from Mar 7, 2018

Conversation

Projects
None yet
@NicolasDorier
Member

NicolasDorier commented Mar 14, 2017

Supersede #9503 created by @JeremyRubin , I will maintain it.

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 14, 2017

Member
  1. Rebased and fixed conflicts
  2. Addressed @kallewoof nits
  3. Add the new parameter to client.cpp
Member

NicolasDorier commented Mar 14, 2017

  1. Rebased and fixed conflicts
  2. Addressed @kallewoof nits
  3. Add the new parameter to client.cpp
@kallewoof

utACK 8c373d5

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 16, 2017

Member

@luke-jr @jnewbery @JeremyRubin nit addressed, can you re-ACK?

Member

NicolasDorier commented Mar 16, 2017

@luke-jr @jnewbery @JeremyRubin nit addressed, can you re-ACK?

Show outdated Hide outdated qa/rpc-tests/receivedby.py
#Test Address filtering
#Only on addr
expected = {"address":addr, "account":"", "amount":Decimal("0.1"), "confirmations":10, "txids":[txid,]}
res = self.nodes[1].listreceivedbyaddress(0, True, True, addr)

This comment has been minimized.

@jnewbery

jnewbery Mar 16, 2017

Member

Nit: Consider using named arguments here, instead of positional arguments (since the meaning of the arguments is not clear without having to go back to the definition of listreceivedbyaddress).

@jnewbery

jnewbery Mar 16, 2017

Member

Nit: Consider using named arguments here, instead of positional arguments (since the meaning of the arguments is not clear without having to go back to the definition of listreceivedbyaddress).

This comment has been minimized.

@NicolasDorier

NicolasDorier Mar 17, 2017

Member

Listreceivedbyaddress is not known at compile time, and thus has no definition in python. This is interpreted at runtime. So I can't really use named argument. Would inline comment be good ?

EDIT: No mid line comments in python

@NicolasDorier

NicolasDorier Mar 17, 2017

Member

Listreceivedbyaddress is not known at compile time, and thus has no definition in python. This is interpreted at runtime. So I can't really use named argument. Would inline comment be good ?

EDIT: No mid line comments in python

This comment has been minimized.

@jnewbery

jnewbery Mar 17, 2017

Member

You can use named arguments in the RPC calls. See #9983 for example.

@jnewbery

jnewbery Mar 17, 2017

Member

You can use named arguments in the RPC calls. See #9983 for example.

Show outdated Hide outdated qa/rpc-tests/receivedby.py
{"address":empty_addr},
{"address":empty_addr, "account":"", "amount":0, "confirmations":0, "txids":[]})
#Test Address filtering

This comment has been minimized.

@jnewbery

jnewbery Mar 16, 2017

Member

I'd prefer this test if other_addr (currently declared on line 78) received some funds before you did your tests on listreceivedbyaddress() with a filter address. This isn't currently testing the case where the wallet contains multiple addresses with funds and you want to see the transactions received by one of those addresses. Ideally the test case would be:

  • define addr and send funds to it (already done for you in lines 42-43)
  • define other_addr and send funds to it
  • call listreceivedbyaddress() filtering on addr. Assert only one transaction is returned.
  • call listreceivedbyaddress() filtering on other_addr. Assert only one transaction is returned.
  • call listreceivedbyaddress() with no filtering. Assert both transactions are returned.
@jnewbery

jnewbery Mar 16, 2017

Member

I'd prefer this test if other_addr (currently declared on line 78) received some funds before you did your tests on listreceivedbyaddress() with a filter address. This isn't currently testing the case where the wallet contains multiple addresses with funds and you want to see the transactions received by one of those addresses. Ideally the test case would be:

  • define addr and send funds to it (already done for you in lines 42-43)
  • define other_addr and send funds to it
  • call listreceivedbyaddress() filtering on addr. Assert only one transaction is returned.
  • call listreceivedbyaddress() filtering on other_addr. Assert only one transaction is returned.
  • call listreceivedbyaddress() with no filtering. Assert both transactions are returned.
Show outdated Hide outdated src/wallet/rpcwallet.cpp
"\nList balances by receiving address.\n"
"\nArguments:\n"
"1. minconf (numeric, optional, default=1) The minimum number of confirmations before payments are included.\n"
"2. include_empty (bool, optional, default=false) Whether to include addresses that haven't received any payments.\n"
"3. include_watchonly (bool, optional, default=false) Whether to include watch-only addresses (see 'importaddress').\n"
"4. only_address (string, optional) If present, only return information on this address. Otherwise, return all information.\n"

This comment has been minimized.

@jnewbery

jnewbery Mar 16, 2017

Member

minor nit: align parentheses with line above.

@jnewbery

jnewbery Mar 16, 2017

Member

minor nit: align parentheses with line above.

@jnewbery

This comment has been minimized.

Show comment
Hide comment
@jnewbery

jnewbery Mar 16, 2017

Member

Looks good. A couple of nits and a suggestion on improving the test case.

Member

jnewbery commented Mar 16, 2017

Looks good. A couple of nits and a suggestion on improving the test case.

@JeremyRubin

This comment has been minimized.

Show comment
Hide comment
@JeremyRubin

JeremyRubin Mar 16, 2017

Contributor

utAck

Contributor

JeremyRubin commented Mar 16, 2017

utAck

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 17, 2017

Member

@jnewbery I improved the tests, and fixed the alignement. I can't use named parameter in the test though.

Member

NicolasDorier commented Mar 17, 2017

@jnewbery I improved the tests, and fixed the alignement. I can't use named parameter in the test though.

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 17, 2017

Member

added named parameters to one call to listreceivedbyaddress in the tests for better readability.

Member

NicolasDorier commented Mar 17, 2017

added named parameters to one call to listreceivedbyaddress in the tests for better readability.

@jnewbery

This comment has been minimized.

Show comment
Hide comment
@jnewbery

jnewbery Mar 17, 2017

Member

line 73 minConf needs to be minconf.

with that change, tested ACK. Good stuff @NicolasDorier !

Member

jnewbery commented Mar 17, 2017

line 73 minConf needs to be minconf.

with that change, tested ACK. Good stuff @NicolasDorier !

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 18, 2017

Member

@jnewbery thanks done, @JeremyRubin did the hard work :)

Member

NicolasDorier commented Mar 18, 2017

@jnewbery thanks done, @JeremyRubin did the hard work :)

@EthanHeilman

This comment has been minimized.

Show comment
Hide comment
@EthanHeilman

EthanHeilman Mar 21, 2017

Contributor

utACK - the code looks good and this is very useful functionality.

Contributor

EthanHeilman commented Mar 21, 2017

utACK - the code looks good and this is very useful functionality.

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 22, 2017

Member

@TheBlueMatt I fixed nits and added tests, can you re-ACK ?

Member

NicolasDorier commented Mar 22, 2017

@TheBlueMatt I fixed nits and added tests, can you re-ACK ?

@nopara73

This comment has been minimized.

Show comment
Hide comment
@nopara73

nopara73 May 25, 2017

ACK - works fine.
This could be (not sure if should be) combined with fixing this issue for correct GUI experience: #9192

nopara73 commented May 25, 2017

ACK - works fine.
This could be (not sure if should be) combined with fixing this issue for correct GUI experience: #9192

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Jun 14, 2017

Member

Closing. I am using a workaround now, I am caching the whole listtransaction, at every block. This call would have been super useful though.

Member

NicolasDorier commented Jun 14, 2017

Closing. I am using a workaround now, I am caching the whole listtransaction, at every block. This call would have been super useful though.

@jnewbery

This comment has been minimized.

Show comment
Hide comment
@jnewbery

jnewbery Jun 14, 2017

Member

😞 I'm happy to reACK if you decide to reopen this!

Member

jnewbery commented Jun 14, 2017

😞 I'm happy to reACK if you decide to reopen this!

@NicolasDorier NicolasDorier reopened this Jun 15, 2017

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Jun 15, 2017

Member

@jnewbery, if you have interest, I am reopening, I guess it does not hurt to keep it opens, it is not high maintenance PR. I was thinking to allow multiple addresses to be passed in the filter, instead of only one.

For NTumbleBit, I changed the design, I have a method called GetTransactions(address) which should send back the inputs AND outputs transactions of this address. listreceivedbyaddress would only show input transactions.

The way I ended up implemeting my need is by caching listtransaction then for each transaction in it, caching gettransaction in a internal database. I now have good performance, and I am not sure this RPC method would suit my case now.


EDIT: Documenting why I need also all transaction spent from this address: (not only transactions received)

In TumbleBit, there is a chain of transaction.

[Escrow] -> [Offer] -> [Fulfill]

Escrow is confirmed.
The user knows one of the ScriptPubKey inside Offer, but not the transaction ID.
His goal is to fetch Fulfill on the blockchain. (When the ScriptPubKey of Offer get spent, then important preimages are revealed)

So the way I am doing it now is adding Offer's ScriptPubKey as WatchOnly. Then fetching all the transactions from the wallet, caching them in internal database, and going through all those transactions to see if there is one input which is spent by the ScriptPubKey of Offer. If yes, then we have [Fulfill].

Watching all transactions related to one address is very useful, not only the received transaction of the address.

In Core, however it is not possible, because knowing if a transaction is "from an address" is considered bad practice.
At the root, this is the same reason as to why #10007 could not make it..

Member

NicolasDorier commented Jun 15, 2017

@jnewbery, if you have interest, I am reopening, I guess it does not hurt to keep it opens, it is not high maintenance PR. I was thinking to allow multiple addresses to be passed in the filter, instead of only one.

For NTumbleBit, I changed the design, I have a method called GetTransactions(address) which should send back the inputs AND outputs transactions of this address. listreceivedbyaddress would only show input transactions.

The way I ended up implemeting my need is by caching listtransaction then for each transaction in it, caching gettransaction in a internal database. I now have good performance, and I am not sure this RPC method would suit my case now.


EDIT: Documenting why I need also all transaction spent from this address: (not only transactions received)

In TumbleBit, there is a chain of transaction.

[Escrow] -> [Offer] -> [Fulfill]

Escrow is confirmed.
The user knows one of the ScriptPubKey inside Offer, but not the transaction ID.
His goal is to fetch Fulfill on the blockchain. (When the ScriptPubKey of Offer get spent, then important preimages are revealed)

So the way I am doing it now is adding Offer's ScriptPubKey as WatchOnly. Then fetching all the transactions from the wallet, caching them in internal database, and going through all those transactions to see if there is one input which is spent by the ScriptPubKey of Offer. If yes, then we have [Fulfill].

Watching all transactions related to one address is very useful, not only the received transaction of the address.

In Core, however it is not possible, because knowing if a transaction is "from an address" is considered bad practice.
At the root, this is the same reason as to why #10007 could not make it..

@sipa

This comment has been minimized.

Show comment
Hide comment
@sipa

sipa Jun 16, 2017

Member

@NicolasDorier Do you actually need the wallet functionality (balance tracking, UTXO management, coin selection, ...), or just a means to be notified of certain transactions?

Member

sipa commented Jun 16, 2017

@NicolasDorier Do you actually need the wallet functionality (balance tracking, UTXO management, coin selection, ...), or just a means to be notified of certain transactions?

@nopara73

This comment has been minimized.

Show comment
Hide comment
@nopara73

nopara73 Jun 17, 2017

@sipa Need the wallet functionality for NTumbleBit.

nopara73 commented Jun 17, 2017

@sipa Need the wallet functionality for NTumbleBit.

@sipa

This comment has been minimized.

Show comment
Hide comment
@sipa

sipa Jun 17, 2017

Member

Can you clarify what functionality it relies on?

Member

sipa commented Jun 17, 2017

Can you clarify what functionality it relies on?

@nopara73

This comment has been minimized.

Show comment
Hide comment
@nopara73

nopara73 Jun 17, 2017

A lot, but I am not sure which are relevant to this discussion with the workaround. @NicolasDorier will have a better insight. https://github.com/NTumbleBit/NTumbleBit/tree/master/NTumbleBit.TumblerServer/Services/RPCServices

nopara73 commented Jun 17, 2017

A lot, but I am not sure which are relevant to this discussion with the workaround. @NicolasDorier will have a better insight. https://github.com/NTumbleBit/NTumbleBit/tree/master/NTumbleBit.TumblerServer/Services/RPCServices

Show outdated Hide outdated src/wallet/rpcwallet.cpp
@@ -1206,6 +1206,17 @@ UniValue ListReceived(CWallet * const pwallet, const UniValue& params, bool fByA
if(params[2].get_bool())
filter = filter | ISMINE_WATCH_ONLY;
bool fFilterAddress = false;
CTxDestination filterAddress = CNoDestination();
if (!fByAccounts && params.size() > 3) {

This comment has been minimized.

@jonasschnelli

jonasschnelli Aug 15, 2017

Member

Use a simpler check:

CBitcoinAddress address(request.params[3].get_str());
    if (!address.IsValid())
@jonasschnelli

jonasschnelli Aug 15, 2017

Member

Use a simpler check:

CBitcoinAddress address(request.params[3].get_str());
    if (!address.IsValid())

This comment has been minimized.

@NicolasDorier

NicolasDorier Mar 6, 2018

Member

This does not apply anymore.

@NicolasDorier

NicolasDorier Mar 6, 2018

Member

This does not apply anymore.

Show outdated Hide outdated src/wallet/rpcwallet.cpp
// Create mapAddressBook iterator
// If we aren't filtering, go from begin() to end()
auto start = pwallet->mapAddressBook.begin();

This comment has been minimized.

@jonasschnelli

jonasschnelli Aug 15, 2017

Member

This loop-or-find logic seems to be a bit wired.
I probably would have factored out the JSON object packing and either called the new function from within the range based loop or after the find().

@jonasschnelli

jonasschnelli Aug 15, 2017

Member

This loop-or-find logic seems to be a bit wired.
I probably would have factored out the JSON object packing and either called the new function from within the range based loop or after the find().

@jonasschnelli

This comment has been minimized.

Show comment
Hide comment
@jonasschnelli

jonasschnelli Aug 15, 2017

Member

Needs rebase.

Concept ACK. I think the by address filter is in general useful.

Member

jonasschnelli commented Aug 15, 2017

Needs rebase.

Concept ACK. I think the by address filter is in general useful.

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Aug 17, 2017

Member

@sipa just saw now your previous question.
As far as TB is concerned, I am using balance tracking, UTXO management, and coin selection management of Bitcoin Core for funding the escrow transactions.

I am also using Core as a block explorer: There is some well known address on which I would like to be notified is money is sent to it, or sent from. This PR allows me to know when something is sent to the address.
However, I still need a new rpc method for knowing if something is sent from an address.

Until I have the two features, my only way is to poll periodically listtransaction then fetch all transaction with gettransaction, and see if the relevant addresses are inside. This work well but is very cumbersome. It also does not scale well, if I do not cache the result of gettransaction.

We kind of talked about that in Tokyo, and you seemed to think that the best is that I develop my own wallet, unrelated to bitcoin RPC. I don't like it but I think this is the way I will go for future projects.

Member

NicolasDorier commented Aug 17, 2017

@sipa just saw now your previous question.
As far as TB is concerned, I am using balance tracking, UTXO management, and coin selection management of Bitcoin Core for funding the escrow transactions.

I am also using Core as a block explorer: There is some well known address on which I would like to be notified is money is sent to it, or sent from. This PR allows me to know when something is sent to the address.
However, I still need a new rpc method for knowing if something is sent from an address.

Until I have the two features, my only way is to poll periodically listtransaction then fetch all transaction with gettransaction, and see if the relevant addresses are inside. This work well but is very cumbersome. It also does not scale well, if I do not cache the result of gettransaction.

We kind of talked about that in Tokyo, and you seemed to think that the best is that I develop my own wallet, unrelated to bitcoin RPC. I don't like it but I think this is the way I will go for future projects.

Show outdated Hide outdated test/functional/receivedby.py
assert_equal(len(res), 1)
#Another address receive money
res = self.nodes[1].listreceivedbyaddress(0, True, True)
assert_equal(len(res), 3) #Right now 3 entries

This comment has been minimized.

@luke-jr

luke-jr Mar 5, 2018

Member

Note, this needs to be 2->3 (instead of 3->4) due to removal of the "default address".

@luke-jr

luke-jr Mar 5, 2018

Member

Note, this needs to be 2->3 (instead of 3->4) due to removal of the "default address".

@luke-jr

This comment has been minimized.

Show comment
Hide comment
@promag

Some minor comments, new code could use current convention, for instance, s/filterAddress/filter_address.

Show outdated Hide outdated src/wallet/rpcwallet.cpp
if (!fByAccounts && params.size() > 3) {
filterAddress = CBitcoinAddress(params[3].get_str()).Get();
CTxDestination nulladdress = CNoDestination();
if (filterAddress == nulladdress) {

This comment has been minimized.

@promag

promag Mar 5, 2018

Member

Just if (filterAddress == CNoDestination())?

@promag

promag Mar 5, 2018

Member

Just if (filterAddress == CNoDestination())?

Show outdated Hide outdated src/wallet/rpcwallet.cpp
bool fFilterAddress = false;
CTxDestination filterAddress = CNoDestination();
if (!fByAccounts && params.size() > 3) {
filterAddress = CBitcoinAddress(params[3].get_str()).Get();

This comment has been minimized.

@promag

promag Mar 5, 2018

Member

Remove extra space.

@promag

promag Mar 5, 2018

Member

Remove extra space.

Show outdated Hide outdated src/wallet/rpcwallet.cpp
@@ -1206,6 +1206,17 @@ UniValue ListReceived(CWallet * const pwallet, const UniValue& params, bool fByA
if(params[2].get_bool())
filter = filter | ISMINE_WATCH_ONLY;
bool fFilterAddress = false;
CTxDestination filterAddress = CNoDestination();

This comment has been minimized.

@promag

promag Mar 5, 2018

Member

Remove extra space.

@promag

promag Mar 5, 2018

Member

Remove extra space.

Show outdated Hide outdated src/rpc/client.cpp
@@ -44,6 +44,7 @@ static const CRPCConvertParam vRPCConvertParams[] =
{ "listreceivedbyaddress", 0, "minconf" },
{ "listreceivedbyaddress", 1, "include_empty" },
{ "listreceivedbyaddress", 2, "include_watchonly" },
{ "listreceivedbyaddress", 3, "only_address" },

This comment has been minimized.

@promag

promag Mar 5, 2018

Member

Not sure what others think, but I kind of prefer filter_address.

@promag

promag Mar 5, 2018

Member

Not sure what others think, but I kind of prefer filter_address.

Show outdated Hide outdated src/wallet/rpcwallet.cpp
filterAddress = CBitcoinAddress(params[3].get_str()).Get();
CTxDestination nulladdress = CNoDestination();
if (filterAddress == nulladdress) {
throw JSONRPCError(RPC_WALLET_ERROR, "only_address parameter was invalid");

This comment has been minimized.

@promag

promag Mar 5, 2018

Member

Missing test assert_raises_rpc_error.

@promag

promag Mar 5, 2018

Member

Missing test assert_raises_rpc_error.

Show outdated Hide outdated src/wallet/rpcwallet.cpp
"\nList balances by receiving address.\n"
"\nArguments:\n"
"1. minconf (numeric, optional, default=1) The minimum number of confirmations before payments are included.\n"
"2. include_empty (bool, optional, default=false) Whether to include addresses that haven't received any payments.\n"
"3. include_watchonly (bool, optional, default=false) Whether to include watch-only addresses (see 'importaddress').\n"
"4. only_address (string, optional) If present, only return information on this address. Otherwise, return all information.\n"

This comment has been minimized.

@promag

promag Mar 5, 2018

Member

Drop Otherwise, return all information?

@promag

promag Mar 5, 2018

Member

Drop Otherwise, return all information?

Show outdated Hide outdated src/wallet/rpcwallet.cpp
}
}
for(auto item_it = start; item_it != end; ++item_it)

This comment has been minimized.

@promag

promag Mar 5, 2018

Member

Nit, space after for, { on this line.

@promag

promag Mar 5, 2018

Member

Nit, space after for, { on this line.

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 6, 2018

Member

Closing this I workedaround the need of this

Member

NicolasDorier commented Mar 6, 2018

Closing this I workedaround the need of this

@JeremyRubin

This comment has been minimized.

Show comment
Hide comment
@JeremyRubin

JeremyRubin Mar 6, 2018

Contributor

@NicolasDorier I think this should reopen, AFAIK LN people would like this too... @cfromknecht @Roasbeef

Contributor

JeremyRubin commented Mar 6, 2018

@NicolasDorier I think this should reopen, AFAIK LN people would like this too... @cfromknecht @Roasbeef

@NicolasDorier NicolasDorier reopened this Mar 6, 2018

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 6, 2018

Member

ok rebasing

Member

NicolasDorier commented Mar 6, 2018

ok rebasing

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 6, 2018

Member

Rebased, fixed the nits of @luke-jr and @promag .

I renamed only_address to address_filter so that if later we decide it is also possible to pass an array of address instead of a single address, we don't need to rename anything. It is more generic.

Member

NicolasDorier commented Mar 6, 2018

Rebased, fixed the nits of @luke-jr and @promag .

I renamed only_address to address_filter so that if later we decide it is also possible to pass an array of address instead of a single address, we don't need to rename anything. It is more generic.

@kallewoof

utACK

Show outdated Hide outdated src/wallet/rpcwallet.cpp
@@ -1403,6 +1403,16 @@ UniValue ListReceived(CWallet * const pwallet, const UniValue& params, bool fByA
if(params[2].get_bool())
filter = filter | ISMINE_WATCH_ONLY;
bool fFilterAddress = false;

This comment has been minimized.

@kallewoof

kallewoof Mar 7, 2018

Member

The code convention has changed a bit recently. Now, we don't put the type as prefix, and we try to use snake case. I would rename this has_filter_address and the below to filter_address. You can leave existing vars as is, if you don't want the diff to grow for no reason though (like fByAccounts below).

@kallewoof

kallewoof Mar 7, 2018

Member

The code convention has changed a bit recently. Now, we don't put the type as prefix, and we try to use snake case. I would rename this has_filter_address and the below to filter_address. You can leave existing vars as is, if you don't want the diff to grow for no reason though (like fByAccounts below).

Show outdated Hide outdated src/wallet/rpcwallet.cpp
@@ -3837,7 +3866,7 @@ static const CRPCCommand commands[] =
{ "wallet", "listaddressgroupings", &listaddressgroupings, {} },
{ "wallet", "listlockunspent", &listlockunspent, {} },
{ "wallet", "listreceivedbyaccount", &listreceivedbyaccount, {"minconf","include_empty","include_watchonly"} },
{ "wallet", "listreceivedbyaddress", &listreceivedbyaddress, {"minconf","include_empty","include_watchonly"} },
{ "wallet", "listreceivedbyaddress", &listreceivedbyaddress, {"minconf","include_empty","include_watchonly","address_filter" } },

This comment has been minimized.

@kallewoof

kallewoof Mar 7, 2018

Member

No space after " (end of line) -- compare to other lines.

@kallewoof

kallewoof Mar 7, 2018

Member

No space after " (end of line) -- compare to other lines.

@NicolasDorier

This comment has been minimized.

Show comment
Hide comment
@NicolasDorier

NicolasDorier Mar 7, 2018

Member

Addressed @kallewoof nits

Member

NicolasDorier commented Mar 7, 2018

Addressed @kallewoof nits

@kallewoof

utACK f087613

@laanwj laanwj merged commit f087613 into bitcoin:master Mar 7, 2018

@laanwj

This comment has been minimized.

Show comment
Hide comment
@laanwj

laanwj Mar 7, 2018

Member

utACK f087613

Member

laanwj commented Mar 7, 2018

utACK f087613

laanwj added a commit that referenced this pull request Mar 7, 2018

Merge #9991: listreceivedbyaddress Filter Address
f087613 Add tests of listreceivedbyaddress address filtering (Jeremy Rubin)
8ee0812 Add address filtering to listreceivedbyaddress (Jeremy Rubin)

Pull request description:

  Supersede #9503 created by @JeremyRubin , I will maintain it.

Tree-SHA512: 2accaed493b7e1c2eb5cb5270180f100f8c718b6585b9574f294191c318dc622a79e42ac185300f291f82d3b2a6f1c00850b6b17e4ff2dbab94d71df695acbfe
{"address": empty_addr},
{"address": empty_addr, "account": "", "amount": 0, "confirmations": 0, "txids": []})
#Test Address filtering

This comment has been minimized.

@luke-jr

luke-jr Mar 7, 2018

Member

Space after # is expected now it seems.

@luke-jr

luke-jr Mar 7, 2018

Member

Space after # is expected now it seems.

#Test Address filtering
#Only on addr
expected = {"address":addr, "account":"", "amount":Decimal("0.1"), "confirmations":10, "txids":[txid,]}

This comment has been minimized.

@luke-jr

luke-jr Mar 7, 2018

Member

Space after : is expected now it seems.

@luke-jr

luke-jr Mar 7, 2018

Member

Space after : is expected now it seems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment