Merge branch 'master' into dark-theme-ui-issues

pull/2524/head
maxgrapps 5 years ago committed by GitHub
commit e4a7a49692
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      CHANGELOG.md
  2. 1
      ISSUE_TEMPLATE.md
  3. 4
      apps/block_scout_web/assets/css/components/_api.scss
  4. 1
      apps/block_scout_web/assets/css/components/_button.scss
  5. 5
      apps/block_scout_web/assets/css/components/_form.scss
  6. 2
      apps/block_scout_web/assets/css/theme/_base_variables.scss
  7. 1
      apps/block_scout_web/assets/js/app.js
  8. 70
      apps/block_scout_web/assets/js/lib/try_eth_api.js
  9. 182
      apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex
  10. 14
      apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex
  11. 17
      apps/block_scout_web/lib/block_scout_web/templates/transaction/overview.html.eex
  12. 4
      apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex
  13. 32
      apps/block_scout_web/priv/gettext/default.pot
  14. 32
      apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po
  15. 42
      apps/explorer/lib/explorer/eth_rpc.ex
  16. 17
      apps/explorer/priv/repo/migrations/20190807111216_remove_duplicate_indexes.exs

@ -1,6 +1,8 @@
## Current
### Features
- [#2433](https://github.com/poanetwork/blockscout/pull/2433) - Add a functionality to try Eth RPC methods in the documentation
- [#2529](https://github.com/poanetwork/blockscout/pull/2529) - show both eth value and token transfers on transaction overview page
- [#2376](https://github.com/poanetwork/blockscout/pull/2376) - Split API and WebApp routes
- [#2477](https://github.com/poanetwork/blockscout/pull/2477) - aggregate token transfers on transaction page
- [#2458](https://github.com/poanetwork/blockscout/pull/2458) - Add LAST_BLOCK var to add ability indexing in the range of blocks
@ -9,10 +11,12 @@
### Fixes
- [#2524](https://github.com/poanetwork/blockscout/pull/2524) - fix dark theme validator data styles
- [#2532](https://github.com/poanetwork/blockscout/pull/2532) - don't show empty token transfers on the transaction overview page
- [#2528](https://github.com/poanetwork/blockscout/pull/2528) - fix coin history chart data
- [#2520](https://github.com/poanetwork/blockscout/pull/2520) - Hide loading message when fetching is failed
- [#2523](https://github.com/poanetwork/blockscout/pull/2523) - Avoid importing internal_transactions of pending transactions
- [#2519](https://github.com/poanetwork/blockscout/pull/2519) - enable `First` page button in pagination
- [#2517](https://github.com/poanetwork/blockscout/pull/2517) - remove duplicate indexes
- [#2515](https://github.com/poanetwork/blockscout/pull/2515) - do not aggregate NFT token transfers
- [#2512](https://github.com/poanetwork/blockscout/pull/2512) - alert link fix
- [#2508](https://github.com/poanetwork/blockscout/pull/2508) - logs view columns fix

@ -4,6 +4,7 @@
* Elixir & Erlang/OTP versions (`elixir -version`):
* Operating System:
* Blockscout Version/branch:
### Steps to reproduce

@ -116,6 +116,10 @@ $api-doc-list-item-view-more-color: $api-doc-list-item-title-color !default;
margin: 0;
}
.api-doc-list-item-description {
width: 100%
}
.api-doc-list-item-controls {
display: flex;
flex-direction: column;

@ -23,6 +23,7 @@ $button-secondary-color: $secondary !default;
background-color: darken($button-primary-color, 10%);
border-color: darken($button-primary-color, 10%);
color: #fff;
outline: none !important;
text-decoration: none;
}

@ -9,6 +9,11 @@ $form-control-border-color: #e2e5ec !default;
border-radius: 4px;
}
&:focus {
border-color: $secondary;
box-shadow: none;
}
&.n-b-r {
border-right: none;
}

@ -359,7 +359,7 @@ $input-btn-padding-y: 0.375rem !default;
$input-btn-padding-x: 0.75rem !default;
$input-btn-line-height: $line-height-base !default;
$input-btn-focus-width: 0.2rem !default;
$input-btn-focus-width: 1px !default;
$input-btn-focus-color: rgba($component-active-bg, 0.25) !default;
$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;

@ -59,5 +59,6 @@ import './lib/async_listing_load'
import './lib/tooltip'
import './lib/modals'
import './lib/try_api'
import './lib/try_eth_api'
import './lib/card_tabs'
import './lib/network_selector'

@ -0,0 +1,70 @@
import $ from 'jquery'
function composeCurlCommand (data) {
return `curl -H "content-type: application/json" -X POST --data '${JSON.stringify(data)}'`
}
function handleResponse (data, xhr, clickedButton) {
const module = clickedButton.attr('data-module')
const action = clickedButton.attr('data-action')
const curl = $(`[data-selector="${module}-${action}-curl"]`)[0]
const code = $(`[data-selector="${module}-${action}-server-response-code"]`)[0]
const body = $(`[data-selector="${module}-${action}-server-response-body"]`)[0]
curl.innerHTML = composeCurlCommand(data)
code.innerHTML = xhr.status
body.innerHTML = JSON.stringify(xhr.responseJSON, undefined, 2)
$(`[data-selector="${module}-${action}-try-api-ui-result"]`).show()
$(`[data-selector="${module}-${action}-btn-try-api-clear"]`).show()
clickedButton.html(clickedButton.data('original-text'))
clickedButton.prop('disabled', false)
}
function wrapJsonRpc (method, params) {
return {
id: 0,
jsonrpc: '2.0',
method: method,
params: params
}
}
function parseInput (input) {
const type = $(input).attr('data-parameter-type')
const value = $(input).val()
switch (type) {
case 'string':
return value
case 'json':
return JSON.parse(value)
default:
return value
}
}
$('button[data-try-eth-api-ui-button-type="execute"]').click(event => {
const clickedButton = $(event.target)
const module = clickedButton.attr('data-module')
const action = clickedButton.attr('data-action')
const inputs = $(`input[data-selector="${module}-${action}-try-api-ui"]`)
const params = $.map(inputs, parseInput)
const formData = wrapJsonRpc(action, params)
console.log(formData)
const loadingText = '<span class="loading-spinner-small mr-2"><span class="loading-spinner-block-1"></span><span class="loading-spinner-block-2"></span></span> Loading...'
clickedButton.prop('disabled', true)
clickedButton.data('original-text', clickedButton.html())
if (clickedButton.html() !== loadingText) {
clickedButton.html(loadingText)
}
$.ajax({
url: '/api/eth_rpc',
type: 'POST',
data: JSON.stringify(formData),
dataType: 'json',
contentType: 'application/json; charset=utf-8'
}).then((_data, _status, xhr) => handleResponse(formData, xhr, clickedButton))
})

@ -0,0 +1,182 @@
<div class="api-doc-list-item" >
<div class="api-doc-list-item-contents" href="#<%= @action %>">
<div class="api-doc-list-item-description">
<h3 class="api-doc-list-item-title"><%= @action %></h3>
<p class="api-doc-list-item-contents"><%= raw @info.notes %></p>
<span class="api-doc-list-item-query api-text-monospace api-text-monospace-background btn"
data-clipboard-text="curl -X POST --data '{&quot;id&quot;:0,&quot;jsonrpc&quot;:&quot;2.0&quot;,&quot;method&quot;: &quot;<%= @action %>&quot;, params: []}'"
>
curl -X POST --data '{"id":0,"jsonrpc":"2.0","method": "<%= @action %>", params: []}'
</span>
<p class="api-doc-list-item-text">
<div class="tile tile-muted p-1">
<pre
class="m-2"
data-json='<%= @info.example %>'
></pre>
</div>
</p>
</div>
<div class="api-doc-list-item-controls"
aria-controls="<%= @action %>"
aria-expanded="false"
data-toggle="collapse"
href="#<%= @action %>">
<div class="api-doc-list-item-controls-badges">
<span class="badge badge-neutral api-badge"><%= gettext "POST" %></span>
</div>
<span class="api-doc-list-item-controls-view-more">
<span class="api-doc-list-item-controls-view-more-open">More Details <span class="fa fa-chevron-down"></span></span>
<span class="api-doc-list-item-controls-view-more-close">Hide Details <span class="fa fa-chevron-up"></span></span>
</span>
</div>
</div>
<!-- Parameters -->
<div
class="collapse multi-collapse api-doc-parameters-container"
id="<%= @action %>"
>
<h3 class="card-title margin-bottom-md">
<%= gettext "Parameters" %>
<button
class="btn-full-primary float-right"
data-action="<%= @action %>"
data-module="eth"
data-selector='<%= "eth-#{@action}-btn-try-api" %>'
role="button"
><%= gettext "Try it out" %></button>
<button
class="collapse btn-line float-right"
data-action="<%= @action %>"
data-module="eth"
data-selector='<%= "eth-#{@action}-btn-try-api-cancel" %>'
role="button"
><%= gettext "Cancel" %></button>
</h3>
<!-- Parameters description list -->
<div class="api-doc-parameters-list">
<div class="row d-none d-md-flex">
<h4 class="col-2 api-doc-parameters-list-title"><%= gettext "Name" %></h4>
<h3 class="col-10 api-doc-parameters-list-title"><%= gettext "Description" %></h3>
</div>
<!-- Params -->
<%= for param <- @info.params do %>
<div class="row api-doc-parameters-list-item">
<div class="col-sm-4 col-md-2">
<h5 class="api-doc-parameters-list-item-title">
<%= param.name %>
<%= if param.required do %>
<span class="align-text-bottom text-danger">
*<small><%= gettext "required" %></small>
</span>
<% end %>
</h5>
</div>
<div class="col-sm-8 col-md-10">
<p class="api-doc-parameters-list-item-description"><%= param.description %></p>
<input
class="collapse form-control border-rounded <%= if param.required && !param.default, do: "form-control-danger is-invalid" %>"
data-parameter-type='<%= param.type %>'
data-required='<%= if param.required, do: "true", else: "false" %>'
data-selector='<%= "eth-#{@action}-try-api-ui" %>'
type="text",
value='<%= param.default %>'
/>
</div>
</div>
<% end %>
<!-- Buttons for Other / Extra -->
<div class="row">
<div class="offset-sm-4 offset-md-2 col-10">
<button
class="collapse button button-primary"
data-action="<%= @action %>"
data-module="eth"
data-selector='<%= "eth-#{@action}-try-api-ui" %>'
data-try-eth-api-ui-button-type="execute"
role="button"
><%= gettext "Execute" %></button>
<button
class="collapse button button-secondary"
data-action="<%= @action %>"
data-module="eth"
data-selector='<%= "eth-#{@action}-btn-try-api-clear" %>'
role="button"
><%= gettext "Clear" %></button>
</div>
</div>
<!-- CURL / Request URL / Server Response -->
<div
class="tile text-dark mt-5 collapse"
data-selector='<%= "eth-#{@action}-try-api-ui-result" %>'
>
<div class="mb-3">
<h5 class="api-doc-parameters-list-item-title"><%= gettext "Curl" %></h5>
<div class="tile tile-muted p-1">
<pre
class="m-2"
data-selector='<%= "eth-#{@action}-curl" %>'
></pre>
</div>
</div>
<h5 class="api-doc-parameters-list-item-title"><%= gettext "Server Response" %></h5>
<div class="row">
<h4 class="col-2 api-doc-parameters-list-title"><%= gettext "Code" %></h4>
<h4 class="col-10 api-doc-parameters-list-title"><%= gettext "Details" %></h4>
</div>
<div class="row">
<div
class="col-2 pr-0 pr-md-2 col-md-2"
><strong data-selector='<%= "eth-#{@action}-server-response-code" %>'></strong></div>
<div class="col-10 col-md-10">
<p class="api-doc-parameters-list-item-description"><%= gettext "Response Body" %></p>
<div class="tile tile-muted p-1 card-server-response-body">
<pre
class="m-2"
data-selector='<%= "eth-#{@action}-server-response-body" %>'
></pre>
</div>
</div>
</div>
</div>
</div>
<!-- Responses -->
<h3 class="card-title margin-bottom-md"><%= gettext "Responses" %></h3>
<div class="row api-doc-parameters-list-item mb-0">
<h4 class="col-2 api-doc-parameters-list-title"><%= gettext "Code" %></h4>
<h5 class="col-10 api-doc-parameters-list-title"><%= gettext "Description" %></h5>
</div>
<div class="row api-doc-parameters-list-item">
<div class="col-2 pr-0 pr-md-2"><strong>200</strong></div>
<div class="col-10">
<div class="tile tile-muted p-1 mb-3">
<pre class="m-2"><strong>successful operation</strong></pre>
</div>
<!-- Tabs -->
<ul
class="nav nav-pills mb-3"
role="tablist"
>
<li class="nav-item">
<a class="nav-link api-doc-tab active"><%= gettext "Example Value" %></a>
</li>
</ul>
<!-- Tab Content -->
<div class="tab-content">
<!-- Example Value Tab -->
<div class="tab-pane fade show active">
<div class="tile tile-muted p-1">
<pre
class="m-2"
data-json='<%= @info.result %>'
></pre>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

@ -17,20 +17,8 @@
</div>
</div>
<div class="card">
<div class="card-body">
<table class="table">
<tr>
<th>Supported Method</th>
<th>Notes</th>
<th>Parameters example</th>
</tr>
<%= for {method, info} <- Map.to_list(@documentation) do %>
<tr>
<td> <a href="https://github.com/ethereum/wiki/wiki/JSON-RPC#<%= method %>"> <%= method %> </a> </td>
<td> <%= Map.get(info, :notes, "N/A") %> </td>
<td> <%= Map.get(info, :example, "N/A") %> </td>
</tr>
<%= render "_eth_rpc_item.html", action: method, info: info %>
<% end %>
</table>
</div>
</section>

@ -170,17 +170,32 @@
</div>
<%= case token_transfer_type(@transaction) do %>
<% {type, transaction_with_transfers} when is_atom(type) -> %>
<% {type, %{token_transfers: token_transfers} = transaction_with_transfers} when is_list(token_transfers) and token_transfers != [] -> %>
<div class="col-md-12 col-lg-4 d-flex flex-column flex-md-row flex-lg-column pl-0">
<!-- Value -->
<div class="card card-background-1 flex-grow-1">
<div class="card-body card-body-flex-column-space-between">
<%= if @transaction.value.value != 0 do %>
<h2 class="card-title balance-card-title"><%= gettext "Ether" %> <%= gettext "Value" %></h2>
<div class="text-right">
<h3 class="address-balance-text">
<%= value(@transaction) %>
</h3>
<%= if !empty_exchange_rate?(@exchange_rate) do %>
<p class="address-current-balance"
data-wei-value=<%= @transaction.value.value %>
data-usd-exchange-rate=<%= @exchange_rate.usd_value %>>
</p>
<% end %>
</div>
<% end %>
<h2 class="card-title balance-card-title"><%= token_type_name(type)%><%= gettext " Token Transfer" %></h2>
<div class="text-right">
<%= for transfer <- aggregate_token_transfers(transaction_with_transfers.token_transfers) do %>
<h3 class="address-balance-text">
<%= token_transfer_amount(transfer) %>
<%= " "%>
<%= link(token_symbol(transfer.token), to: token_path(BlockScoutWeb.Endpoint, :show, transfer.token.contract_address_hash)) %>
</h3>

@ -36,7 +36,7 @@ defmodule BlockScoutWeb.TransactionView do
transaction_with_transfers = Repo.preload(transaction, token_transfers: :token)
type = Chain.transaction_token_transfer_type(transaction)
if type, do: {type, transaction_with_transfers}
if type, do: {type, transaction_with_transfers}, else: {nil, transaction_with_transfers}
end
def aggregate_token_transfers(token_transfers) do
@ -83,7 +83,7 @@ defmodule BlockScoutWeb.TransactionView do
case type do
:erc20 -> gettext("ERC-20 ")
:erc721 -> gettext("ERC-721 ")
:token_transfer -> ""
_ -> ""
end
end

@ -199,11 +199,13 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:253
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:47
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:54
msgid "Cancel"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:137
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:106
msgid "Clear"
msgstr ""
@ -220,6 +222,8 @@ msgstr ""
#: lib/block_scout_web/templates/address/_tabs.html.eex:42
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:165
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:187
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:126
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:149
#: lib/block_scout_web/views/address_view.ex:307
msgid "Code"
msgstr ""
@ -325,18 +329,22 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:146
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:116
msgid "Curl"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:53
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:188
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:60
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:150
msgid "Description"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/overview.html.eex:8
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:166
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:127
msgid "Details"
msgstr ""
@ -371,18 +379,21 @@ msgstr ""
#: lib/block_scout_web/templates/layout/app.html.eex:56
#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:20
#: lib/block_scout_web/templates/transaction/_tile.html.eex:30
#: lib/block_scout_web/templates/transaction/overview.html.eex:196
#: lib/block_scout_web/templates/transaction/overview.html.eex:179
#: lib/block_scout_web/templates/transaction/overview.html.eex:211
#: lib/block_scout_web/views/wei_helpers.ex:78
msgid "Ether"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:211
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:164
msgid "Example Value"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:128
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:99
msgid "Execute"
msgstr ""
@ -483,7 +494,7 @@ msgid "Less than"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:224
#: lib/block_scout_web/templates/transaction/overview.html.eex:239
msgid "Limit"
msgstr ""
@ -549,6 +560,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:59
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:19
#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:52
msgid "Name"
@ -583,11 +595,13 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:19
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:26
msgid "POST"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:33
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:40
msgid "Parameters"
msgstr ""
@ -652,11 +666,13 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:173
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:134
msgid "Response Body"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:185
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:147
msgid "Responses"
msgstr ""
@ -675,6 +691,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:163
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:124
msgid "Server Response"
msgstr ""
@ -877,6 +894,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:40
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:47
msgid "Try it out"
msgstr ""
@ -897,7 +915,7 @@ msgid "Unique Token"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:218
#: lib/block_scout_web/templates/transaction/overview.html.eex:233
msgid "Used"
msgstr ""
@ -917,7 +935,8 @@ msgid "Validations"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:196
#: lib/block_scout_web/templates/transaction/overview.html.eex:179
#: lib/block_scout_web/templates/transaction/overview.html.eex:211
msgid "Value"
msgstr ""
@ -996,6 +1015,7 @@ msgstr ""
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:81
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:70
msgid "required"
msgstr ""
@ -1492,7 +1512,7 @@ msgid "View All Transactions"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:214
#: lib/block_scout_web/templates/transaction/overview.html.eex:229
msgid "Gas"
msgstr ""
@ -1641,7 +1661,7 @@ msgid "New Smart Contract Verification"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:178
#: lib/block_scout_web/templates/transaction/overview.html.eex:192
msgid " Token Transfer"
msgstr ""

@ -199,11 +199,13 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:253
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:47
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:54
msgid "Cancel"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:137
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:106
msgid "Clear"
msgstr ""
@ -220,6 +222,8 @@ msgstr ""
#: lib/block_scout_web/templates/address/_tabs.html.eex:42
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:165
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:187
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:126
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:149
#: lib/block_scout_web/views/address_view.ex:307
msgid "Code"
msgstr ""
@ -325,18 +329,22 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:146
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:116
msgid "Curl"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:53
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:188
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:60
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:150
msgid "Description"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/overview.html.eex:8
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:166
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:127
msgid "Details"
msgstr ""
@ -371,18 +379,21 @@ msgstr ""
#: lib/block_scout_web/templates/layout/app.html.eex:56
#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:20
#: lib/block_scout_web/templates/transaction/_tile.html.eex:30
#: lib/block_scout_web/templates/transaction/overview.html.eex:196
#: lib/block_scout_web/templates/transaction/overview.html.eex:179
#: lib/block_scout_web/templates/transaction/overview.html.eex:211
#: lib/block_scout_web/views/wei_helpers.ex:78
msgid "Ether"
msgstr "POA"
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:211
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:164
msgid "Example Value"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:128
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:99
msgid "Execute"
msgstr ""
@ -483,7 +494,7 @@ msgid "Less than"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:224
#: lib/block_scout_web/templates/transaction/overview.html.eex:239
msgid "Limit"
msgstr ""
@ -549,6 +560,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:59
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:19
#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:52
msgid "Name"
@ -583,11 +595,13 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:19
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:26
msgid "POST"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:33
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:40
msgid "Parameters"
msgstr ""
@ -652,11 +666,13 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:173
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:134
msgid "Response Body"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:185
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:147
msgid "Responses"
msgstr ""
@ -675,6 +691,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:163
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:124
msgid "Server Response"
msgstr ""
@ -877,6 +894,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:40
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:47
msgid "Try it out"
msgstr ""
@ -897,7 +915,7 @@ msgid "Unique Token"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:218
#: lib/block_scout_web/templates/transaction/overview.html.eex:233
msgid "Used"
msgstr ""
@ -917,7 +935,8 @@ msgid "Validations"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:196
#: lib/block_scout_web/templates/transaction/overview.html.eex:179
#: lib/block_scout_web/templates/transaction/overview.html.eex:211
msgid "Value"
msgstr ""
@ -996,6 +1015,7 @@ msgstr ""
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:81
#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:70
msgid "required"
msgstr ""
@ -1493,7 +1513,7 @@ msgid "View All Transactions"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:214
#: lib/block_scout_web/templates/transaction/overview.html.eex:229
msgid "Gas"
msgstr ""
@ -1642,7 +1662,7 @@ msgid "New Smart Contract Verification"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:178
#: lib/block_scout_web/templates/transaction/overview.html.eex:192
msgid " Token Transfer"
msgstr ""

@ -12,11 +12,30 @@ defmodule Explorer.EthRPC do
"eth_getBalance" => %{
action: :eth_get_balance,
notes: """
the `earliest` parameter will not work as expected currently, because genesis block balances
The `earliest` parameter will not work as expected currently, because genesis block balances
are not currently imported
""",
example: """
{"id": 0, "jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0x0000000000000000000000000000000000000007", "2"]}
{"id": 0, "jsonrpc": "2.0", "method": "eth_getBalance", "params": ["0x0000000000000000000000000000000000000007", "latest"]}
""",
params: [
%{
name: "Data",
description: "20 Bytes - address to check for balance",
type: "string",
default: nil,
required: true
},
%{
name: "Quantity|Tag",
description: "Integer block number, or the string \"latest\", \"earliest\" or \"pending\"",
type: "string",
default: "latest",
required: true
}
],
result: """
{"id": 0, "jsonrpc": "2.0", "result": "0x0234c8a3397aab58"}
"""
},
"eth_getLogs" => %{
@ -33,6 +52,25 @@ defmodule Explorer.EthRPC do
"fromBlock": "earliest",
"toBlock": "latest",
"topics": ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"]}]}
""",
params: [
%{name: "Object", description: "The filter options", type: "json", default: nil, required: true}
],
result: """
{
"id":0,
"jsonrpc":"2.0",
"result": [{
"logIndex": "0x1",
"blockNumber":"0x1b4",
"blockHash": "0x8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcfdf829c5a142f1fccd7d",
"transactionHash": "0xdf829c5a142f1fccd7d8216c5785ac562ff41e2dcfdf5785ac562ff41e2dcf",
"transactionIndex": "0x0",
"address": "0x16c5785ac562ff41e2dcfdf829c5a142f1fccd7d",
"data":"0x0000000000000000000000000000000000000000000000000000000000000000",
"topics": ["0x59ebeb90bc63057b6515673c3ecf9438e5058bca0f92585014eced636878c9a5"]
}]
}
"""
}
}

@ -0,0 +1,17 @@
defmodule Explorer.Repo.Migrations.RemoveDuplicateIndexes do
use Ecto.Migration
def change do
drop_if_exists(
index(:decompiled_smart_contracts, [:address_hash], name: "decompiled_smart_contracts_address_hash_index")
)
drop_if_exists(
index(:staking_pools_delegators, [:delegator_address_hash],
name: "staking_pools_delegators_delegator_address_hash_index"
)
)
drop_if_exists(index(:transactions, [:to_address_hash], name: "transactions_to_address_hash_index"))
end
end
Loading…
Cancel
Save