Add filter by contract to get address API #379

This commit is contained in:
Martin Boehm 2020-03-04 00:37:16 +01:00
parent f761dbec2a
commit a6c01534f2
4 changed files with 13 additions and 7 deletions

View File

@ -290,7 +290,7 @@ Example response:
Returns balances and transactions of an address. The returned transactions are sorted by block height, newest blocks first. Returns balances and transactions of an address. The returned transactions are sorted by block height, newest blocks first.
``` ```
GET /api/v2/address/<address>[?page=<page>&pageSize=<size>&from=<block height>&to=<block height>&details=<basic|tokens|tokenBalances|txids|txs>] GET /api/v2/address/<address>[?page=<page>&pageSize=<size>&from=<block height>&to=<block height>&details=<basic|tokens|tokenBalances|txids|txs>&contract=<contract address>]
``` ```
The optional query parameters: The optional query parameters:
@ -303,6 +303,7 @@ The optional query parameters:
- *tokenBalances*: *basic* + tokens with balances + belonging to the address (applicable only to some coins) - *tokenBalances*: *basic* + tokens with balances + belonging to the address (applicable only to some coins)
- *txids*: *tokenBalances* + list of txids, subject to *from*, *to* filter and paging - *txids*: *tokenBalances* + list of txids, subject to *from*, *to* filter and paging
- *txs*: *tokenBalances* + list of transaction with details, subject to *from*, *to* filter and paging - *txs*: *tokenBalances* + list of transaction with details, subject to *from*, *to* filter and paging
- *contract*: return only transactions which affect specified contract (applicable only to coins which support contracts)
Response: Response:

View File

@ -641,11 +641,13 @@ func (s *PublicServer) getAddressQueryParams(r *http.Request, accountDetails api
if ec != nil { if ec != nil {
gap = 0 gap = 0
} }
contract := r.URL.Query().Get("contract")
return page, pageSize, accountDetails, &api.AddressFilter{ return page, pageSize, accountDetails, &api.AddressFilter{
Vout: voutFilter, Vout: voutFilter,
TokensToReturn: tokensToReturn, TokensToReturn: tokensToReturn,
FromHeight: uint32(from), FromHeight: uint32(from),
ToHeight: uint32(to), ToHeight: uint32(to),
Contract: contract,
}, filterParam, gap }, filterParam, gap
} }
@ -670,6 +672,9 @@ func (s *PublicServer) explorerAddress(w http.ResponseWriter, r *http.Request) (
data.Address = address data.Address = address
data.Page = address.Page data.Page = address.Page
data.PagingRange, data.PrevPage, data.NextPage = getPagingRange(address.Page, address.TotalPages) data.PagingRange, data.PrevPage, data.NextPage = getPagingRange(address.Page, address.TotalPages)
if filterParam == "" && filter.Vout > -1 {
filterParam = strconv.Itoa(filter.Vout)
}
if filterParam != "" { if filterParam != "" {
data.PageParams = template.URL("&filter=" + filterParam) data.PageParams = template.URL("&filter=" + filterParam)
data.Address.Filter = filterParam data.Address.Filter = filterParam

View File

@ -100,8 +100,8 @@
<h3 class="col-md-3">Transactions</h3> <h3 class="col-md-3">Transactions</h3>
<select class="col-md-2" style="background-color: #eaeaea;" onchange="self.location='?filter='+options[selectedIndex].value"> <select class="col-md-2" style="background-color: #eaeaea;" onchange="self.location='?filter='+options[selectedIndex].value">
<option>All</option> <option>All</option>
<option {{if eq $addr.Filter "inputs" -}} selected{{end}} value="inputs">Inputs</option> <option {{if eq $addr.Filter "inputs" -}} selected{{end}} value="inputs">Address on input side</option>
<option {{if eq $addr.Filter "outputs" -}} selected{{end}} value="outputs">Outputs</option> <option {{if eq $addr.Filter "outputs" -}} selected{{end}} value="outputs">Address on output side</option>
{{- if $addr.Tokens -}} {{- if $addr.Tokens -}}
<option {{if eq $addr.Filter "0" -}} selected{{end}} value="0">Non-contract</option> <option {{if eq $addr.Filter "0" -}} selected{{end}} value="0">Non-contract</option>
{{- range $t := $addr.Tokens -}} {{- range $t := $addr.Tokens -}}

View File

@ -91,12 +91,12 @@
{{- end}}{{if or $addr.Transactions $addr.Filter -}} {{- end}}{{if or $addr.Transactions $addr.Filter -}}
<div class="row h-container"> <div class="row h-container">
<h3 class="col-md-3">Transactions</h3> <h3 class="col-md-3">Transactions</h3>
<select class="col-md-2" style="background-color: #eaeaea;" onchange="self.location='?filter='+options[selectedIndex].value"> <select class="col-md-3" style="background-color: #eaeaea;" onchange="self.location='?filter='+options[selectedIndex].value">
<option>All</option> <option>All</option>
<option {{if eq $addr.Filter "inputs" -}} selected{{end}} value="inputs">Inputs</option> <option {{if eq $addr.Filter "inputs" -}} selected{{end}} value="inputs">XPUB addresses on input side</option>
<option {{if eq $addr.Filter "outputs" -}} selected{{end}} value="outputs">Outputs</option> <option {{if eq $addr.Filter "outputs" -}} selected{{end}} value="outputs">XPUB addresses on output side</option>
</select> </select>
<div class="col-md-7"> <div class="col-md-6">
<nav>{{template "paging" $data}}</nav> <nav>{{template "paging" $data}}</nav>
</div> </div>
</div> </div>