diff --git a/CHANGELOG.md b/CHANGELOG.md index ab3f30642c..417dc24b03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,8 @@ ## Current ### Features +- [#1726](https://github.com/poanetwork/blockscout/pull/2071) - Updated styles for the new smart contract page. +- [#2081](https://github.com/poanetwork/blockscout/pull/2081) - Tooltip for 'more' button, explorers logos added - [#1963](https://github.com/poanetwork/blockscout/pull/1963), [#1959](https://github.com/poanetwork/blockscout/pull/1959), [#1948](https://github.com/poanetwork/blockscout/pull/1948), [#1936](https://github.com/poanetwork/blockscout/pull/1936), [#1925](https://github.com/poanetwork/blockscout/pull/1925), [#1922](https://github.com/poanetwork/blockscout/pull/1922), [#1903](https://github.com/poanetwork/blockscout/pull/1903), [#1874](https://github.com/poanetwork/blockscout/pull/1874), [#1895](https://github.com/poanetwork/blockscout/pull/1895), [#2031](https://github.com/poanetwork/blockscout/pull/2031), [#2073](https://github.com/poanetwork/blockscout/pull/2073), [#2074](https://github.com/poanetwork/blockscout/pull/2074), - added new themes and logos for poa, eth, rinkeby, goerli, ropsten, kovan, sokol, xdai, etc, rsk and default theme - [#2010](https://github.com/poanetwork/blockscout/pull/2010) - added "block not found" and "tx not found pages" - [#1928](https://github.com/poanetwork/blockscout/pull/1928) - pagination styles were updated @@ -19,8 +21,10 @@ - [#2040](https://github.com/poanetwork/blockscout/pull/2040) - Verification links to other explorers for ETH - [#2037](https://github.com/poanetwork/blockscout/pull/2037) - add address logs search functionality - [#2012](https://github.com/poanetwork/blockscout/pull/2012) - make all pages pagination async +- [#2064](https://github.com/poanetwork/blockscout/pull/2064) - feat: add fields to tx apis, small cleanups ### Fixes +- [#2082](https://github.com/poanetwork/blockscout/pull/2082) - dropdown styles, tooltip gap fix, 404 page added - [#2077](https://github.com/poanetwork/blockscout/pull/2077) - ui issues - [#2072](https://github.com/poanetwork/blockscout/pull/2072) - Fixed checkmarks not showing correctly in tabs. - [#2066](https://github.com/poanetwork/blockscout/pull/2066) - fixed length of logs search input diff --git a/apps/block_scout_web/assets/css/_mixins.scss b/apps/block_scout_web/assets/css/_mixins.scss index ce91137876..a5c3836095 100644 --- a/apps/block_scout_web/assets/css/_mixins.scss +++ b/apps/block_scout_web/assets/css/_mixins.scss @@ -88,6 +88,7 @@ padding: 0 15px; text-decoration: none; transition: all 0.15s; + white-space: nowrap; width: fit-content; &:hover { @@ -135,6 +136,7 @@ padding: 0 15px; text-decoration: none; transition: all 0.15s; + white-space: nowrap; width: fit-content; &:hover { diff --git a/apps/block_scout_web/assets/css/app.scss b/apps/block_scout_web/assets/css/app.scss index 9a71ee173f..aaa234a5b3 100644 --- a/apps/block_scout_web/assets/css/app.scss +++ b/apps/block_scout_web/assets/css/app.scss @@ -123,6 +123,12 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; @import "components/verify_other_explorers"; @import "components/errors"; @import "components/log-search"; + + +@import "components/new_smart_contract"; +@import "components/radio_big"; +@import "components/btn_no_border"; + :export { dashboardBannerChartAxisFontColor: $dashboard-banner-chart-axis-font-color; dashboardLineColorMarket: $dashboard-line-color-market; diff --git a/apps/block_scout_web/assets/css/components/_btn_no_border.scss b/apps/block_scout_web/assets/css/components/_btn_no_border.scss new file mode 100644 index 0000000000..1876bc845f --- /dev/null +++ b/apps/block_scout_web/assets/css/components/_btn_no_border.scss @@ -0,0 +1,12 @@ +$btn-no-border-bg: #fff !default; +$btn-no-border-color: $primary !default; + +.btn-no-border { + @include btn-line($btn-no-border-bg, $btn-no-border-color); + + border-color: $btn-no-border-bg; + + &:hover { + border-color: $btn-no-border-color; + } +} diff --git a/apps/block_scout_web/assets/css/components/_dropdown.scss b/apps/block_scout_web/assets/css/components/_dropdown.scss index 998f779ec5..f0a7e33661 100644 --- a/apps/block_scout_web/assets/css/components/_dropdown.scss +++ b/apps/block_scout_web/assets/css/components/_dropdown.scss @@ -5,6 +5,9 @@ box-shadow: $box-shadow; padding: 0; width: 100%; + border-left: 1px solid #e2e5ec; + border-right: 1px solid #e2e5ec; + border-bottom: 1px solid #e2e5ec; &.right { left: auto; diff --git a/apps/block_scout_web/assets/css/components/_filter.scss b/apps/block_scout_web/assets/css/components/_filter.scss index 9beefde20b..0d99d48031 100644 --- a/apps/block_scout_web/assets/css/components/_filter.scss +++ b/apps/block_scout_web/assets/css/components/_filter.scss @@ -1,4 +1,4 @@ .filter { min-width: 100%; - transform: translate3d(1px, 26px, 0px) !important; + transform: translate3d(0, 34px, 0px) !important; } diff --git a/apps/block_scout_web/assets/css/components/_form.scss b/apps/block_scout_web/assets/css/components/_form.scss index 6eae0badb6..5346afcb7c 100644 --- a/apps/block_scout_web/assets/css/components/_form.scss +++ b/apps/block_scout_web/assets/css/components/_form.scss @@ -5,6 +5,10 @@ $form-control-border-color: #e2e5ec !default; border-radius: 0; font-size: 14px; + &.border-rounded { + border-radius: 4px; + } + &.n-b-r { border-right: none; } diff --git a/apps/block_scout_web/assets/css/components/_new_smart_contract.scss b/apps/block_scout_web/assets/css/components/_new_smart_contract.scss new file mode 100644 index 0000000000..a07d9db86e --- /dev/null +++ b/apps/block_scout_web/assets/css/components/_new_smart_contract.scss @@ -0,0 +1,204 @@ +$new-smart-contract-container-tooltips-background-color: #fbfafc !default; +$new-smart-contract-tooltips-width: 300px; +$smart-contract-form-group-tooltip-color: #adb5bd !default; +$new-smart-contract-center-column-margin-right: 30px; + +.new-smart-contract-container { + background-color: #fff; + background-image: linear-gradient( + to bottom right, + #{$new-smart-contract-container-tooltips-background-color} 100%, + #{$new-smart-contract-container-tooltips-background-color} 100% + ); + background-position: 100% 0; + background-repeat: repeat-y; + background-size: #{$new-smart-contract-tooltips-width} 1px; + box-shadow: 0 0 25px 0 rgba(0, 0, 0, 0.15); + margin-bottom: 3rem; + padding: 50px 0 50px 22px; + + @include media-breakpoint-down(md) { + background-image: none; + padding-right: 22px; + } +} + +.smart-contract-title { + color: #333; + font-size: 18px; + font-weight: normal; + line-height: 1.2; + margin: 0 0 70px 0; + padding: 0; + text-align: left; + + @include media-breakpoint-down(md) { + margin-bottom: 30px; + } + + &.margin-bottom-md { + margin-bottom: 50px; + + @include media-breakpoint-down(md) { + margin-bottom: 15px; + } + } +} + +.smart-contract-form-group { + margin-bottom: 30px; + + @include media-breakpoint-down(md) { + margin-bottom: 20px; + } +} + +.form-radios-group { + display: flex; + justify-content: flex-start; + + .radio-big { + margin-right: 20px; + + &:last-child { + margin-right: 0; + } + } +} + +.smart-contract-form-group-inner-wrapper { + display: flex; + justify-content: space-between; + + @include media-breakpoint-down(md) { + flex-direction: column; + } + + > label { + color: #333; + flex-grow: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.7; + margin: 0; + padding-right: 15px; + text-align: left; + width: 200px; + + @include media-breakpoint-down(md) { + margin-bottom: 10px; + padding-right: 0; + width: auto; + } + } + + .center-column { + flex-grow: 1; + margin-right: $new-smart-contract-center-column-margin-right; + + @include media-breakpoint-down(md) { + margin: 0; + } + } + + textarea.form-control { + min-height: 98px; + } + + .form-error { + display: block; + font-size: 13px; + line-height: 1.2; + padding-top: 10px; + } + + .smart-contract-form-group-tooltip { + color: $smart-contract-form-group-tooltip-color; + flex-grow: 0; + flex-shrink: 0; + font-size: 12px; + font-weight: normal; + line-height: 1.5; + padding: 0 30px; + text-align: left; + width: #{$new-smart-contract-tooltips-width}; + + @include media-breakpoint-down(md) { + padding: 10px 0 0 0; + width: auto; + } + + &:empty { + @include media-breakpoint-down(md) { + display: none; + } + } + + a { + color: $smart-contract-form-group-tooltip-color; + text-decoration: underline; + + &:hover { + text-decoration: none; + } + } + } +} + +.tooltip-quote { + background: rgba(0, 0, 0, 0.08); + border-radius: 2px; + padding: 0 5px; +} + + +.add-contract-libraries-wrapper { + border-bottom: 1px solid $base-border-color; + margin-right: $new-smart-contract-center-column-margin-right + $new-smart-contract-tooltips-width; + padding-bottom: 30px; + + @include media-breakpoint-down(md) { + margin-right: 0; + } +} + +.smart-contract-form-buttons { + align-items: center; + border-top: 1px solid $base-border-color; + display: flex; + margin-right: $new-smart-contract-center-column-margin-right + $new-smart-contract-tooltips-width; + margin-top: -1px; + padding-top: 30px; + position: relative; + + @include media-breakpoint-down(md) { + margin-right: 0; + } + + [class*="btn-"] { + position: relative; + z-index: 1; + } + + .position-absolute { + &, + &:hover { + opacity: 1; + z-index: 12; + } + } +} + +.smart-contract-libraries-wrapper { + display: none; + padding-bottom: 30px; + padding-top: 30px; +} + +.contract-library-form-group { + display: none; + + &.active { + display: block; + } +} \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/components/_radio_big.scss b/apps/block_scout_web/assets/css/components/_radio_big.scss new file mode 100644 index 0000000000..8ce71e6d5e --- /dev/null +++ b/apps/block_scout_web/assets/css/components/_radio_big.scss @@ -0,0 +1,55 @@ +$radio-big-color: $primary !default; +$radio-big-dimensions: 30px !default; + +.radio-big { + align-items: center; + display: flex; + position: relative; + + input[type="radio"] { + height: 100%; + opacity: 0; + position: absolute; + width: 100%; + z-index: 5; + + &:checked + .radio-icon::before { + background-color: $radio-big-color; + border-radius: 50%; + content: ""; + height: 12px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 12px; + } + + &:checked + .radio-icon { + border-color: $radio-big-color; + } + } + + .radio-icon { + border: 1px solid $base-border-color; + border-radius: 50%; + flex-grow: 0; + flex-shrink: 0; + height: $radio-big-dimensions; + margin: 0 10px 0 0; + position: relative; + width: $radio-big-dimensions; + z-index: 1; + } + + .radio-text { + color: #333; + font-size: 14px; + font-weight: normal; + line-height: 1.2; + margin: 0; + position: relative; + white-space: nowrap; + z-index: 1; + } +} \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/components/_tooltip.scss b/apps/block_scout_web/assets/css/components/_tooltip.scss index 4c845a7c1c..ecb334b84e 100644 --- a/apps/block_scout_web/assets/css/components/_tooltip.scss +++ b/apps/block_scout_web/assets/css/components/_tooltip.scss @@ -17,3 +17,8 @@ $tooltip-color: #fff !default; border-bottom-color: $tooltip-background-color; } } + +.bs-tooltip-top { top: -10px !important; } +.bs-tooltip-bottom { top: 10px !important; } +.bs-tooltip-left { left: -10px !important; } +.bs-tooltip-right { left: 10px !important; } diff --git a/apps/block_scout_web/assets/css/components/_verify_other_explorers.scss b/apps/block_scout_web/assets/css/components/_verify_other_explorers.scss index 134b4e5fb4..a3ea681eda 100644 --- a/apps/block_scout_web/assets/css/components/_verify_other_explorers.scss +++ b/apps/block_scout_web/assets/css/components/_verify_other_explorers.scss @@ -121,6 +121,7 @@ border-radius: 2px; margin-top: 10px; transition: .1s ease-in; + position: relative; @media (min-width: 768px) { margin-left: 10px; margin-top: 0; @@ -134,6 +135,13 @@ fill: #fff; } } + span { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + } } .verify-other-explorers-dialog { @@ -147,6 +155,40 @@ .verify-other-explorers-modal-row { display: table-row; height: 29px; + &:first-child { + .verify-other-explorers-cell.left { + .exp-logo { + @include image-2x('/images/icons/etherscan@2x.png', 15px, 16px); + background-image: url("/images/icons/etherscan.png"); + background-repeat: no-repeat; + padding-left: 25px; + background-size: 15px 16px; + } + } + } + &:nth-child(2) { + .verify-other-explorers-cell.left { + .exp-logo { + @include image-2x('/images/icons/blockchair@2x.png', 10px, 16px); + background-image: url("/images/icons/blockchair.png"); + background-repeat: no-repeat; + padding-left: 25px; + background-size: 10px 16px; + background-position: left 3px center; + } + } + } + &:nth-child(3) { + .verify-other-explorers-cell.left { + .exp-logo { + @include image-2x('/images/icons/etherchain@2x.png', 16px, 16px); + background-image: url("/images/icons/etherchain.png"); + background-repeat: no-repeat; + padding-left: 25px; + background-size: 16px 16px; + } + } + } } .verify-other-explorers-cell { @@ -162,28 +204,3 @@ padding-left: 15px; background-size: 12px 12px; } - -.etherscan-logo { - @include image-2x('/images/icons/etherscan@2x.png', 15px, 16px); - background-image: url("/images/icons/etherscan.png"); - background-repeat: no-repeat; - padding-left: 25px; - background-size: 15px 16px; -} - -.blockchair-logo { - @include image-2x('/images/icons/blockchair@2x.png', 10px, 16px); - background-image: url("/images/icons/blockchair.png"); - background-repeat: no-repeat; - padding-left: 25px; - background-size: 10px 16px; - background-position: left 3px center; -} - -.etherchain-logo { - @include image-2x('/images/icons/etherchain@2x.png', 16px, 16px); - background-image: url("/images/icons/etherchain.png"); - background-repeat: no-repeat; - padding-left: 25px; - background-size: 16px 16px; -} diff --git a/apps/block_scout_web/assets/js/app.js b/apps/block_scout_web/assets/js/app.js index 0893b8b4ae..f486eb2111 100644 --- a/apps/block_scout_web/assets/js/app.js +++ b/apps/block_scout_web/assets/js/app.js @@ -43,6 +43,7 @@ import './lib/market_history_chart' import './lib/pending_transactions_toggle' import './lib/pretty_json' import './lib/reload_button' +import './lib/smart_contract/new_smart_contract_form' import './lib/smart_contract/read_only_functions' import './lib/smart_contract/wei_ether_converter' import './lib/stop_propagation' diff --git a/apps/block_scout_web/assets/js/lib/smart_contract/new_smart_contract_form.js b/apps/block_scout_web/assets/js/lib/smart_contract/new_smart_contract_form.js new file mode 100644 index 0000000000..43419aeb9b --- /dev/null +++ b/apps/block_scout_web/assets/js/lib/smart_contract/new_smart_contract_form.js @@ -0,0 +1,28 @@ +import $ from 'jquery' + +$(function () { + $('.js-btn-add-contract-libraries').on('click', function () { + $('.js-smart-contract-libraries-wrapper').show() + $(this).hide() + }) + + $('.js-smart-contract-form-reset').on('click', function () { + $('.js-contract-library-form-group').removeClass('active') + $('.js-contract-library-form-group').first().addClass('active') + $('.js-smart-contract-libraries-wrapper').hide() + $('.js-btn-add-contract-libraries').show() + $('.js-add-contract-library-wrapper').show() + }) + + $('.js-btn-add-contract-library').on('click', function () { + let nextContractLibrary = $('.js-contract-library-form-group.active').next('.js-contract-library-form-group') + + if (nextContractLibrary) { + nextContractLibrary.addClass('active') + } + + if ($('.js-contract-library-form-group.active').length === $('.js-contract-library-form-group').length) { + $('.js-add-contract-library-wrapper').hide() + } + }) +}) diff --git a/apps/block_scout_web/assets/static/images/errors-img/etc-page-not-found.png b/apps/block_scout_web/assets/static/images/errors-img/etc-page-not-found.png new file mode 100644 index 0000000000..70b99cf13b Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/etc-page-not-found.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/etc-page-not-found@2x.png b/apps/block_scout_web/assets/static/images/errors-img/etc-page-not-found@2x.png new file mode 100644 index 0000000000..7e3851555d Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/etc-page-not-found@2x.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/eth-page-not-found.png b/apps/block_scout_web/assets/static/images/errors-img/eth-page-not-found.png new file mode 100644 index 0000000000..6dd0112d54 Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/eth-page-not-found.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/eth-page-not-found@2x.png b/apps/block_scout_web/assets/static/images/errors-img/eth-page-not-found@2x.png new file mode 100644 index 0000000000..868d682b3a Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/eth-page-not-found@2x.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/kovan-page-not-found.png b/apps/block_scout_web/assets/static/images/errors-img/kovan-page-not-found.png new file mode 100644 index 0000000000..a4e31fb68d Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/kovan-page-not-found.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/kovan-page-not-found@2x.png b/apps/block_scout_web/assets/static/images/errors-img/kovan-page-not-found@2x.png new file mode 100644 index 0000000000..195ccfe9f5 Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/kovan-page-not-found@2x.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/poa-page-not-found.png b/apps/block_scout_web/assets/static/images/errors-img/poa-page-not-found.png new file mode 100644 index 0000000000..fdb8e0c4f5 Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/poa-page-not-found.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/poa-page-not-found@2x.png b/apps/block_scout_web/assets/static/images/errors-img/poa-page-not-found@2x.png new file mode 100644 index 0000000000..16f1be6e93 Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/poa-page-not-found@2x.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/rinkeby-page-not-found.png b/apps/block_scout_web/assets/static/images/errors-img/rinkeby-page-not-found.png new file mode 100644 index 0000000000..f57ba7ac7a Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/rinkeby-page-not-found.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/rinkeby-page-not-found@2x.png b/apps/block_scout_web/assets/static/images/errors-img/rinkeby-page-not-found@2x.png new file mode 100644 index 0000000000..096ec0b3bf Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/rinkeby-page-not-found@2x.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/ropsten-page-not-found.png b/apps/block_scout_web/assets/static/images/errors-img/ropsten-page-not-found.png new file mode 100644 index 0000000000..f26e557d7c Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/ropsten-page-not-found.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/ropsten-page-not-found@2x.png b/apps/block_scout_web/assets/static/images/errors-img/ropsten-page-not-found@2x.png new file mode 100644 index 0000000000..f9829cda11 Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/ropsten-page-not-found@2x.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/rsk-page-not-found.png b/apps/block_scout_web/assets/static/images/errors-img/rsk-page-not-found.png new file mode 100644 index 0000000000..5056766f3c Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/rsk-page-not-found.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/rsk-page-not-found@2x.png b/apps/block_scout_web/assets/static/images/errors-img/rsk-page-not-found@2x.png new file mode 100644 index 0000000000..233e078642 Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/rsk-page-not-found@2x.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/sokol-page-not-found.png b/apps/block_scout_web/assets/static/images/errors-img/sokol-page-not-found.png new file mode 100644 index 0000000000..5056766f3c Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/sokol-page-not-found.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/sokol-page-not-found@2x.png b/apps/block_scout_web/assets/static/images/errors-img/sokol-page-not-found@2x.png new file mode 100644 index 0000000000..233e078642 Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/sokol-page-not-found@2x.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/xdai-page-not-found.png b/apps/block_scout_web/assets/static/images/errors-img/xdai-page-not-found.png new file mode 100644 index 0000000000..af2e436dec Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/xdai-page-not-found.png differ diff --git a/apps/block_scout_web/assets/static/images/errors-img/xdai-page-not-found@2x.png b/apps/block_scout_web/assets/static/images/errors-img/xdai-page-not-found@2x.png new file mode 100644 index 0000000000..7792882524 Binary files /dev/null and b/apps/block_scout_web/assets/static/images/errors-img/xdai-page-not-found@2x.png differ diff --git a/apps/block_scout_web/lib/block_scout_web/etherscan.ex b/apps/block_scout_web/lib/block_scout_web/etherscan.ex index 670d0787bf..74a9fa761c 100644 --- a/apps/block_scout_web/lib/block_scout_web/etherscan.ex +++ b/apps/block_scout_web/lib/block_scout_web/etherscan.ex @@ -82,6 +82,8 @@ defmodule BlockScoutWeb.Etherscan do "to" => "", "value" => "5488334153118633", "contractAddress" => "0x883103875d905c11f9ac7dacbfc16deb39655361", + "transactionHash" => "0xd65b788c610949704a5f9aac2228c7c777434dfe11c863a12306f57fcbd8cdbb", + "index" => "0", "input" => "", "type" => "create", "gas" => "814937", @@ -110,6 +112,7 @@ defmodule BlockScoutWeb.Etherscan do "blockHash" => "0x6169c5dc05d0051564ba3eae8ebfbdefda640c5f5ffc095846b8aed0b44f64ea", "from" => "0x4e83362442b8d1bec281594cea3050c8eb01311c", "contractAddress" => "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2", + "logIndex" => "0", "to" => "0x21e21ba085289f81a86921de890eed30f1ad2375", "value" => "10000000000000000000", "tokenName" => "Maker", diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address/_verify_other_explorer_modal.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address/_verify_other_explorer_modal.html.eex index cbbd548336..69ffb705e3 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address/_verify_other_explorer_modal.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address/_verify_other_explorer_modal.html.eex @@ -1,6 +1,6 @@
-
-
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification/new.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification/new.html.eex index e2969905cc..212264d445 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification/new.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification/new.html.eex @@ -1,141 +1,256 @@ -
-
-
- -

<%= gettext "New Smart Contract" %>

+
+
+

<%= gettext "New Smart Contract Verification" %>

<%= form_for @changeset, address_verify_contract_path(@conn, :create, @conn.params["address_id"]), [], fn f -> %> -
- <%= label f, :address_hash, gettext("Contract Address") %> - <%= text_input f, :address_hash, class: "form-control", "aria-describedby": "contract-address-help-block", readonly: true %> - <%= error_tag f, :address_hash, id: "contract-address-help-block", class: "text-danger" %> +
+
+ <%= label f, :address_hash, gettext("Contract Address") %> +
+ <%= text_input f, :address_hash, class: "form-control border-rounded", "aria-describedby": "contract-address-help-block", readonly: true %> + <%= error_tag f, :address_hash, id: "contract-address-help-block", class: "text-danger form-error" %> +
+
The 0x address supplied on contract creation.
+
-
- <%= label f, :name, gettext("Contract Name") %> - <%= text_input f, :name, class: "form-control", "aria-describedby": "contract-name-help-block", "data-test": "contract_name" %> - <%= error_tag f, :name, id: "contract-name-help-block", class: "text-danger" %> +
+
+ <%= label f, :name, gettext("Contract Name") %> +
+ <%= text_input f, :name, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block", "data-test": "contract_name" %> + <%= error_tag f, :name, id: "contract-name-help-block", class: "text-danger form-error" %> +
+
Must match the name specified in the code. For example, in contract MyContract {..} MyContract is the contract name.
+
-
- <%= label f, :compiler_version, gettext("Compiler") %> - <%= select f, :compiler_version, @compiler_versions, class: "form-control", selected: "latest", "aria-describedby": "compiler-help-block" %> - <%= error_tag f, :compiler_version, id: "compiler-help-block", class: "text-danger" %> +
+
+ <%= label f, :compiler_version, gettext("Compiler") %> +
+ <%= select f, :compiler_version, @compiler_versions, class: "form-control border-rounded", selected: "latest", "aria-describedby": "compiler-help-block" %> + <%= error_tag f, :compiler_version, id: "compiler-help-block", class: "text-danger form-error" %> +
+
The compiler version is specified in pragma solidity X.X.X. Use the compiler version rather than the nightly build. If using the Solidity compiler, run solc —version to check.
+
-
- <%= label :evm_version, :evm_version, gettext("EVM Version") %> - <%= select :evm_version, :evm_version, @evm_versions, class: "form-control", selected: "petersburg", "aria-describedby": "evm-version-help-block" %> +
+
+ <%= label :evm_version, :evm_version, gettext("EVM Version") %> +
+ <%= select :evm_version, :evm_version, @evm_versions, class: "form-control border-rounded", selected: "petersburg", "aria-describedby": "evm-version-help-block" %> +
+
The EVM version the contract is written for. If the bytecode does not match the version, we try to verify using the latest EVM version. EVM version details.
+
-
- <%= label f, "Optimization" %> - -
- <%= radio_button f, :optimization, false, checked: true, class: "form-check-input", "aria-describedby": "optimization-help-block" %> - <%= label :smart_contract_optimization, :false, gettext("No"), class: "form-check-label" %> +
+
+ <%= label f, "Optimization" %> +
+
+
+ <%= radio_button f, :optimization, false, checked: true, class: "form-check-input" %> +
+ <%= label :smart_contract_optimization, :false, gettext("No"), class: "radio-text" %> +
+
+ <%= radio_button f, :optimization, true, class: "form-check-input", "aria-describedby": "optimization-help-block" %> +
+ <%= label :smart_contract_optimization, :true, gettext("Yes"), class: "radio-text" %> +
+
+ <%= error_tag f, :optimization, id: "optimization-help-block", class: "text-danger form-error" %> +
+
If you enabled optimization during compilation, select yes.
+
-
- <%= radio_button f, :optimization, true, class: "form-check-input", "aria-describedby": "optimization-help-block" %> - <%= label :smart_contract_optimization, :true, gettext("Yes"), class: "form-check-label" %> +
+
+ <%= label f, :name, gettext("Optimization runs") %> +
+ <%= text_input :optimization, :runs, value: 200, class: "form-control border-rounded", "aria-describedby": "optimization-runs-help-block", "data-test": "optimization-runs" %> +
+
- - <%= error_tag f, :optimization, id: "optimization-help-block", class: "text-danger" %>
-
- <%= label f, :name, gettext("Optimization runs") %> - <%= text_input :optimization, :runs, value: 200, class: "form-control", "aria-describedby": "optimization-runs-help-block", "data-test": "optimization-runs" %> +
+
+ <%= label f, :contract_source_code, gettext("Enter the Solidity Contract Code") %> +
+ <%= textarea f, :contract_source_code, class: "form-control border-rounded monospace", rows: 3, "aria-describedby": "contract-source-code-help-block" %> + <%= error_tag f, :contract_source_code, id: "contract-source-code-help-block", class: "text-danger form-error", "data-test": "contract-source-code-error" %> +
+
We recommend using flattened code. This is necessary if your code utilizes a library or inherits dependencies. Use the POA solidity flattener or the truffle flattener.
+
-
- <%= label f, :contract_source_code, gettext("Enter the Solidity Contract Code below") %> - <%= textarea f, :contract_source_code, class: "form-control monospace", rows: 3, "aria-describedby": "contract-source-code-help-block" %> - <%= error_tag f, :contract_source_code, id: "contract-source-code-help-block", class: "text-danger", "data-test": "contract-source-code-error" %> +
+
+ <%= label f, :contructor_arguments, gettext("ABI-encoded Constructor Arguments (if required by the contract)") %> +
+ <%= textarea f, :constructor_arguments, class: "form-control border-rounded monospace", rows: 3, "aria-describedby": "contract-constructor-arguments-help-block" %> + <%= error_tag f, :constructor_arguments, id: "contract-constructor-arguments-help-block", class: "text-danger form-error", "data-test": "contract-constructor-arguments-error" %> +
+
Add arguments in ABI hex encoded form. Constructor arguments are written right to left, and will be found at the end of the input created bytecode. They may also be parsed here.
+
-
- <%= label f, :contructor_arguments, gettext("Enter constructor arguments if the contract had any") %> - <%= textarea f, :constructor_arguments, class: "form-control monospace", rows: 3, "aria-describedby": "contract-constructor-arguments-help-block" %> - <%= error_tag f, :constructor_arguments, id: "contract-constructor-arguments-help-block", class: "text-danger", "data-test": "contract-constructor-arguments-error" %> +
+ Add Contract Libraries
-

<%= gettext "Contract Libraries" %>

+
+

<%= gettext "Contract Libraries" %>

-
- <%= label :external_libraries, :library1, gettext("1 Library Name") %> - <%= text_input :external_libraries, :library1_name, class: "form-control", "aria-describedby": "contract-name-help-block" %> -
+
+
+
+ <%= label :external_libraries, :library1, gettext("Library Name") %> +
+ <%= text_input :external_libraries, :library1_name, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
A library name called in the .sol file. Multiple libraries (up to 5) may be added for each contract. Click the Add Library button to add an additional one.
+
+
-
- <%= label :external_libraries, :library1, gettext("1 Library Address") %> - <%= text_input :external_libraries, :library1_address, class: "form-control", "aria-describedby": "contract-name-help-block" %> -
+
+
+ <%= label :external_libraries, :library1, gettext("Library Address") %> +
+ <%= text_input :external_libraries, :library1_address, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
The 0x library address. This can be found in the generated json file or Truffle output (if using truffle).
+
+
+
-
- <%= label :external_libraries, :library2, gettext("2 Library Name") %> - <%= text_input :external_libraries, :library2_name, class: "form-control", "aria-describedby": "contract-name-help-block" %> -
+
+
+
+ <%= label :external_libraries, :library2, gettext("Library Name") %> +
+ <%= text_input :external_libraries, :library2_name, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
+
+
-
- <%= label :external_libraries, :library2, gettext("2 Library Address") %> - <%= text_input :external_libraries, :library2_address, class: "form-control", "aria-describedby": "contract-name-help-block" %> -
+
+
+ <%= label :external_libraries, :library2, gettext("Library Address") %> +
+ <%= text_input :external_libraries, :library2_address, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
+
+
+
-
- <%= label :external_libraries, :library3, gettext("3 Library Name") %> - <%= text_input :external_libraries, :library3_name, class: "form-control", "aria-describedby": "contract-name-help-block" %> -
+
+
+
+ <%= label :external_libraries, :library3, gettext("Library Name") %> +
+ <%= text_input :external_libraries, :library3_name, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
+
+
-
- <%= label :external_libraries, :library3, gettext("3 Library Address") %> - <%= text_input :external_libraries, :library3_address, class: "form-control", "aria-describedby": "contract-name-help-block" %> -
+
+
+ <%= label :external_libraries, :library3, gettext("Library Address") %> +
+ <%= text_input :external_libraries, :library3_address, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
+
+
+
-
- <%= label :external_libraries, :library4, gettext("4 Library Name") %> - <%= text_input :external_libraries, :library4_name, class: "form-control", "aria-describedby": "contract-name-help-block" %> -
+
+
+
+ <%= label :external_libraries, :library4, gettext("Library Name") %> +
+ <%= text_input :external_libraries, :library4_name, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
+
+
-
- <%= label :external_libraries, :library4, gettext("4 Library Address") %> - <%= text_input :external_libraries, :library4_address, class: "form-control", "aria-describedby": "contract-name-help-block" %> -
+
+
+ <%= label :external_libraries, :library4, gettext("Library Address") %> +
+ <%= text_input :external_libraries, :library4_address, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
+
+
+
-
- <%= label :external_libraries, :library5, gettext("5 Library Name") %> - <%= text_input :external_libraries, :library5_name, class: "form-control", "aria-describedby": "contract-name-help-block" %> -
+
+
+
+ <%= label :external_libraries, :library5, gettext("Library Name") %> +
+ <%= text_input :external_libraries, :library5_name, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
+
+
+ +
+
+ <%= label f, :library5, gettext("Library Address") %> +
+ <%= text_input f, :library5_address, class: "form-control border-rounded", "aria-describedby": "contract-name-help-block" %> +
+
+
+
+
-
- <%= label f, :library5, gettext("5 Library Address") %> - <%= text_input f, :library5_address, class: "form-control", "aria-describedby": "contract-name-help-block" %> +
+ Add Library +
- - <%= submit gettext("Verify & publish"), class: "button button-primary button-sm mr-2", "data-loading": "animation" %> - <%= reset gettext("Reset"), class: "button button-secondary button-sm mr-2" %> - <%= link( - gettext("Cancel"), - to: address_contract_path(@conn, :index, @conn.params["address_id"]), - class: "button button-sm") %> +
+ + <%= submit gettext("Verify & publish"), class: "btn-full-primary mr-2", "data-loading": "animation" %> + <%= reset gettext("Reset"), class: "btn-line mr-2 js-smart-contract-form-reset" %> + <%= + link( + gettext("Cancel"), + class: "btn-no-border", + to: address_contract_path(@conn, :index, @conn.params["address_id"]) + ) + %> +
<% end %>
-
+
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/block_transaction/404.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/block_transaction/404.html.eex index ce9f49ad7a..4db03be12d 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/block_transaction/404.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/block_transaction/404.html.eex @@ -1,7 +1,7 @@
- Block Not Found + Block Not Found

<%= gettext("Block Details") %>

diff --git a/apps/block_scout_web/lib/block_scout_web/templates/page_not_found/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/page_not_found/index.html.eex new file mode 100644 index 0000000000..6850c2deb2 --- /dev/null +++ b/apps/block_scout_web/lib/block_scout_web/templates/page_not_found/index.html.eex @@ -0,0 +1,12 @@ +
+
+
+ Page Not Found +
+
+

Lorem Ipsum Dolor

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua

+ Back Home +
+
+
\ No newline at end of file diff --git a/apps/block_scout_web/lib/block_scout_web/views/address_view.ex b/apps/block_scout_web/lib/block_scout_web/views/address_view.ex index 4c49c3624d..a3abe03cf4 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/address_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/address_view.ex @@ -253,9 +253,7 @@ defmodule BlockScoutWeb.AddressView do address.contracts_creation_transaction.from_address_hash end - def from_address_hash(address) do - Logger.error(fn -> ["Found a contract with no creator: ", to_string(address)] end) - + def from_address_hash(_address) do nil end diff --git a/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex b/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex index 9c403a4201..7aaf26dba0 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex @@ -102,6 +102,8 @@ defmodule BlockScoutWeb.API.RPC.AddressView do "to" => "#{internal_transaction.to_address_hash}", "value" => "#{internal_transaction.value.value}", "contractAddress" => "#{internal_transaction.created_contract_address_hash}", + "transactionHash" => to_string(internal_transaction.transaction_hash), + "index" => to_string(internal_transaction.index), "input" => "#{internal_transaction.input}", "type" => "#{internal_transaction.type}", "gas" => "#{internal_transaction.gas}", @@ -121,6 +123,7 @@ defmodule BlockScoutWeb.API.RPC.AddressView do "from" => to_string(token_transfer.from_address_hash), "contractAddress" => to_string(token_transfer.token_contract_address_hash), "to" => to_string(token_transfer.to_address_hash), + "logIndex" => to_string(token_transfer.token_log_index), "value" => get_token_value(token_transfer), "tokenName" => token_transfer.token_name, "tokenSymbol" => token_transfer.token_symbol, diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index 2caf439866..c6d41cb84a 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -190,12 +190,12 @@ msgstr "" #: lib/block_scout_web/templates/address/_tabs.html.eex:32 #: lib/block_scout_web/templates/address/overview.html.eex:95 #: lib/block_scout_web/templates/address_validation/index.html.eex:13 -#: lib/block_scout_web/views/address_view.ex:313 +#: lib/block_scout_web/views/address_view.ex:311 msgid "Blocks Validated" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:135 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:247 #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:47 msgid "Cancel" msgstr "" @@ -218,12 +218,12 @@ 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/views/address_view.ex:309 +#: lib/block_scout_web/views/address_view.ex:307 msgid "Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:25 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:34 msgid "Compiler" msgstr "" @@ -261,7 +261,7 @@ msgid "Contract ABI" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:13 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:12 #: lib/block_scout_web/views/address_view.ex:97 msgid "Contract Address" msgstr "" @@ -284,7 +284,7 @@ msgid "Contract Creation" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:19 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:23 msgid "Contract Name" msgstr "" @@ -356,11 +356,6 @@ msgstr "" msgid "ETH" msgstr "" -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:57 -msgid "Enter the Solidity Contract Code below" -msgstr "" - #, elixir-format #: lib/block_scout_web/templates/address/_balance_card.html.eex:32 msgid "Error trying to fetch balances." @@ -476,7 +471,7 @@ msgstr "" #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:19 #: lib/block_scout_web/templates/transaction/_tabs.html.eex:11 #: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6 -#: lib/block_scout_web/views/address_view.ex:308 +#: lib/block_scout_web/views/address_view.ex:306 #: lib/block_scout_web/views/transaction_view.ex:339 msgid "Internal Transactions" msgstr "" @@ -503,7 +498,7 @@ msgstr "" #: lib/block_scout_web/templates/address_logs/index.html.eex:8 #: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: lib/block_scout_web/templates/transaction_log/index.html.eex:8 -#: lib/block_scout_web/views/address_view.ex:314 +#: lib/block_scout_web/views/address_view.ex:312 #: lib/block_scout_web/views/transaction_view.ex:340 msgid "Logs" msgstr "" @@ -563,12 +558,7 @@ msgid "Name" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:5 -msgid "New Smart Contract" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:40 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:61 msgid "No" msgstr "" @@ -648,7 +638,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address/_tabs.html.eex:58 #: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:25 -#: lib/block_scout_web/views/address_view.ex:311 +#: lib/block_scout_web/views/address_view.ex:309 #: lib/block_scout_web/views/tokens/overview_view.ex:37 msgid "Read Contract" msgstr "" @@ -659,7 +649,7 @@ msgid "Request URL" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:133 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:244 msgid "Reset" msgstr "" @@ -824,7 +814,7 @@ msgstr "" #: lib/block_scout_web/templates/address/_tabs.html.eex:8 #: lib/block_scout_web/templates/address_token/index.html.eex:8 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:9 -#: lib/block_scout_web/views/address_view.ex:306 +#: lib/block_scout_web/views/address_view.ex:304 msgid "Tokens" msgstr "" @@ -882,7 +872,7 @@ msgstr "" #: lib/block_scout_web/templates/block_transaction/index.html.eex:18 #: lib/block_scout_web/templates/chain/show.html.eex:108 #: lib/block_scout_web/templates/layout/_topnav.html.eex:35 -#: lib/block_scout_web/views/address_view.ex:307 +#: lib/block_scout_web/views/address_view.ex:305 msgid "Transactions" msgstr "" @@ -949,7 +939,7 @@ msgid "Verify & Publish" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:132 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:243 msgid "Verify & publish" msgstr "" @@ -999,7 +989,7 @@ msgid "Wei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:45 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:66 msgid "Yes" msgstr "" @@ -1072,7 +1062,7 @@ msgid "Loading..." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:130 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:241 msgid "Loading...." msgstr "" @@ -1258,7 +1248,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address/_tabs.html.eex:20 -#: lib/block_scout_web/views/address_view.ex:312 +#: lib/block_scout_web/views/address_view.ex:310 msgid "Coin Balance History" msgstr "" @@ -1435,57 +1425,7 @@ msgid "Genesis Block" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:76 -msgid "1 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:71 -msgid "1 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:86 -msgid "2 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:81 -msgid "2 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:96 -msgid "3 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:91 -msgid "3 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:106 -msgid "4 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:101 -msgid "4 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:116 -msgid "5 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:111 -msgid "5 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:68 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:112 msgid "Contract Libraries" msgstr "" @@ -1547,22 +1487,17 @@ msgid "Search by address, token symbol name, transaction hash, or block number" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:31 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:45 msgid "EVM Version" msgstr "" -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:63 -msgid "Enter constructor arguments if the contract had any" -msgstr "" - #, elixir-format #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:16 msgid "Copy Decompiled Contract Code" msgstr "" #, elixir-format -#: lib/block_scout_web/views/address_view.ex:310 +#: lib/block_scout_web/views/address_view.ex:308 msgid "Decompiled Code" msgstr "" @@ -1582,7 +1517,7 @@ msgid "Decompiler version" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:52 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:77 msgid "Optimization runs" msgstr "" @@ -1726,3 +1661,36 @@ msgstr "" #: lib/block_scout_web/templates/address_logs/index.html.eex:12 msgid "Topic" msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:98 +msgid "ABI-encoded Constructor Arguments (if required by the contract)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:87 +msgid "Enter the Solidity Contract Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:127 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:149 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:171 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:193 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:215 +msgid "Library Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:117 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:139 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:161 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:183 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:205 +msgid "Library Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:3 +msgid "New Smart Contract Verification" +msgstr "" diff --git a/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po b/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po index 6bbaa0f4b7..59a612407d 100644 --- a/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po +++ b/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po @@ -190,12 +190,12 @@ msgstr "" #: lib/block_scout_web/templates/address/_tabs.html.eex:32 #: lib/block_scout_web/templates/address/overview.html.eex:95 #: lib/block_scout_web/templates/address_validation/index.html.eex:13 -#: lib/block_scout_web/views/address_view.ex:313 +#: lib/block_scout_web/views/address_view.ex:311 msgid "Blocks Validated" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:135 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:247 #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:47 msgid "Cancel" msgstr "" @@ -207,8 +207,8 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:37 -#: lib/block_scout_web/templates/address/overview.html.eex:144 -#: lib/block_scout_web/templates/address/overview.html.eex:152 +#: lib/block_scout_web/templates/address/overview.html.eex:142 +#: lib/block_scout_web/templates/address/overview.html.eex:150 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:106 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:114 msgid "Close" @@ -218,12 +218,12 @@ 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/views/address_view.ex:309 +#: lib/block_scout_web/views/address_view.ex:307 msgid "Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:25 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:34 msgid "Compiler" msgstr "" @@ -261,7 +261,7 @@ msgid "Contract ABI" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:13 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:12 #: lib/block_scout_web/views/address_view.ex:97 msgid "Contract Address" msgstr "" @@ -284,7 +284,7 @@ msgid "Contract Creation" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:19 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:23 msgid "Contract Name" msgstr "" @@ -356,11 +356,6 @@ msgstr "" msgid "ETH" msgstr "" -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:57 -msgid "Enter the Solidity Contract Code below" -msgstr "" - #, elixir-format #: lib/block_scout_web/templates/address/_balance_card.html.eex:32 msgid "Error trying to fetch balances." @@ -476,7 +471,7 @@ msgstr "" #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:19 #: lib/block_scout_web/templates/transaction/_tabs.html.eex:11 #: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6 -#: lib/block_scout_web/views/address_view.ex:308 +#: lib/block_scout_web/views/address_view.ex:306 #: lib/block_scout_web/views/transaction_view.ex:339 msgid "Internal Transactions" msgstr "" @@ -503,7 +498,7 @@ msgstr "" #: lib/block_scout_web/templates/address_logs/index.html.eex:8 #: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: lib/block_scout_web/templates/transaction_log/index.html.eex:8 -#: lib/block_scout_web/views/address_view.ex:314 +#: lib/block_scout_web/views/address_view.ex:312 #: lib/block_scout_web/views/transaction_view.ex:340 msgid "Logs" msgstr "" @@ -563,12 +558,7 @@ msgid "Name" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:5 -msgid "New Smart Contract" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:40 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:61 msgid "No" msgstr "" @@ -634,7 +624,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address/overview.html.eex:33 -#: lib/block_scout_web/templates/address/overview.html.eex:143 +#: lib/block_scout_web/templates/address/overview.html.eex:141 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:35 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:105 msgid "QR Code" @@ -648,7 +638,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address/_tabs.html.eex:58 #: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:25 -#: lib/block_scout_web/views/address_view.ex:311 +#: lib/block_scout_web/views/address_view.ex:309 #: lib/block_scout_web/views/tokens/overview_view.ex:37 msgid "Read Contract" msgstr "" @@ -659,7 +649,7 @@ msgid "Request URL" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:133 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:244 msgid "Reset" msgstr "" @@ -824,7 +814,7 @@ msgstr "" #: lib/block_scout_web/templates/address/_tabs.html.eex:8 #: lib/block_scout_web/templates/address_token/index.html.eex:8 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:9 -#: lib/block_scout_web/views/address_view.ex:306 +#: lib/block_scout_web/views/address_view.ex:304 msgid "Tokens" msgstr "" @@ -882,7 +872,7 @@ msgstr "" #: lib/block_scout_web/templates/block_transaction/index.html.eex:18 #: lib/block_scout_web/templates/chain/show.html.eex:108 #: lib/block_scout_web/templates/layout/_topnav.html.eex:35 -#: lib/block_scout_web/views/address_view.ex:307 +#: lib/block_scout_web/views/address_view.ex:305 msgid "Transactions" msgstr "" @@ -949,7 +939,7 @@ msgid "Verify & Publish" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:132 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:243 msgid "Verify & publish" msgstr "" @@ -999,7 +989,7 @@ msgid "Wei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:45 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:66 msgid "Yes" msgstr "" @@ -1072,7 +1062,7 @@ msgid "Loading..." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:130 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:241 msgid "Loading...." msgstr "" @@ -1258,7 +1248,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address/_tabs.html.eex:20 -#: lib/block_scout_web/views/address_view.ex:312 +#: lib/block_scout_web/views/address_view.ex:310 msgid "Coin Balance History" msgstr "" @@ -1435,57 +1425,7 @@ msgid "Genesis Block" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:76 -msgid "1 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:71 -msgid "1 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:86 -msgid "2 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:81 -msgid "2 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:96 -msgid "3 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:91 -msgid "3 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:106 -msgid "4 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:101 -msgid "4 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:116 -msgid "5 Library Address" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:111 -msgid "5 Library Name" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:68 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:112 msgid "Contract Libraries" msgstr "" @@ -1547,22 +1487,17 @@ msgid "Search by address, token symbol name, transaction hash, or block number" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:31 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:45 msgid "EVM Version" msgstr "" -#, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:63 -msgid "Enter constructor arguments if the contract had any" -msgstr "" - #, elixir-format #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:16 msgid "Copy Decompiled Contract Code" msgstr "" #, elixir-format -#: lib/block_scout_web/views/address_view.ex:310 +#: lib/block_scout_web/views/address_view.ex:308 msgid "Decompiled Code" msgstr "" @@ -1582,7 +1517,7 @@ msgid "Decompiler version" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:52 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:77 msgid "Optimization runs" msgstr "" @@ -1726,3 +1661,36 @@ msgstr "" #: lib/block_scout_web/templates/address_logs/index.html.eex:12 msgid "Topic" msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:98 +msgid "ABI-encoded Constructor Arguments (if required by the contract)" +msgstr "" + +#, elixir-format, fuzzy +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:87 +msgid "Enter the Solidity Contract Code" +msgstr "" + +#, elixir-format, fuzzy +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:127 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:149 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:171 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:193 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:215 +msgid "Library Address" +msgstr "" + +#, elixir-format, fuzzy +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:117 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:139 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:161 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:183 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:205 +msgid "Library Name" +msgstr "" + +#, elixir-format, fuzzy +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:3 +msgid "New Smart Contract Verification" +msgstr "" diff --git a/apps/block_scout_web/test/block_scout_web/controllers/address_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/address_controller_test.exs index 8f64abafa6..7eb0545188 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/address_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/address_controller_test.exs @@ -23,7 +23,7 @@ defmodule BlockScoutWeb.AddressControllerTest do test "returns an address's primary name when present", %{conn: conn} do address = insert(:address, fetched_coin_balance: 1) - address_name = insert(:address_name, address: address, primary: true, name: "POA Wallet") + insert(:address_name, address: address, primary: true, name: "POA Wallet") start_supervised!(AddressesWithBalanceCounter) AddressesWithBalanceCounter.consolidate() diff --git a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs index e6a0e7e702..d0fb01c1ff 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs @@ -1412,6 +1412,8 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do "type" => "#{internal_transaction.type}", "gas" => "#{internal_transaction.gas}", "gasUsed" => "#{internal_transaction.gas_used}", + "index" => "#{internal_transaction.index}", + "transactionHash" => "#{transaction.hash}", "isError" => "0", "errCode" => "#{internal_transaction.error}" } @@ -1559,6 +1561,8 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do "gas" => "#{internal_transaction.gas}", "gasUsed" => "#{internal_transaction.gas_used}", "isError" => "0", + "index" => "#{internal_transaction.index}", + "transactionHash" => "#{transaction.hash}", "errCode" => "#{internal_transaction.error}" } ] @@ -1767,6 +1771,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do "gasPrice" => to_string(transaction.gas_price.value), "gasUsed" => to_string(transaction.gas_used), "cumulativeGasUsed" => to_string(transaction.cumulative_gas_used), + "logIndex" => to_string(token_transfer.log_index), "input" => to_string(transaction.input), "confirmations" => "0" } diff --git a/apps/block_scout_web/test/block_scout_web/controllers/block_transaction_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/block_transaction_controller_test.exs index 5b1ae46705..da159b6e6e 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/block_transaction_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/block_transaction_controller_test.exs @@ -1,7 +1,6 @@ defmodule BlockScoutWeb.BlockTransactionControllerTest do use BlockScoutWeb.ConnCase - alias Explorer.Chain.Block import BlockScoutWeb.Router.Helpers, only: [block_transaction_path: 3] describe "GET index/2" do @@ -153,7 +152,7 @@ defmodule BlockScoutWeb.BlockTransactionControllerTest do end test "next_page_path exists if not on last page", %{conn: conn} do - block = %Block{number: number} = insert(:block) + block = insert(:block) 60 |> insert_list(:transaction) diff --git a/apps/block_scout_web/test/block_scout_web/features/pages/contract_verify_page.ex b/apps/block_scout_web/test/block_scout_web/features/pages/contract_verify_page.ex index 1b99acc47f..56c2621920 100644 --- a/apps/block_scout_web/test/block_scout_web/features/pages/contract_verify_page.ex +++ b/apps/block_scout_web/test/block_scout_web/features/pages/contract_verify_page.ex @@ -18,7 +18,7 @@ defmodule BlockScoutWeb.ContractVerifyPage do }) do session |> fill_in(css("[data-test='contract_name']"), with: contract_name) - |> fill_in(text_field("Enter the Solidity Contract Code below"), with: source_code) + |> fill_in(text_field("Enter the Solidity Contract Code"), with: source_code) case version do nil -> nil diff --git a/apps/explorer/lib/explorer/etherscan.ex b/apps/explorer/lib/explorer/etherscan.ex index 0df941271e..3b943b37be 100644 --- a/apps/explorer/lib/explorer/etherscan.ex +++ b/apps/explorer/lib/explorer/etherscan.ex @@ -56,6 +56,8 @@ defmodule Explorer.Etherscan do @internal_transaction_fields ~w( from_address_hash to_address_hash + transaction_hash + index value created_contract_address_hash input @@ -348,7 +350,8 @@ defmodule Explorer.Etherscan do token_name: tkn.name, token_symbol: tkn.symbol, token_decimals: tkn.decimals, - token_type: tkn.type + token_type: tkn.type, + token_log_index: tt.log_index }) ) diff --git a/apps/explorer/test/explorer/etherscan_test.exs b/apps/explorer/test/explorer/etherscan_test.exs index 8153ccc25c..5cd560bdf4 100644 --- a/apps/explorer/test/explorer/etherscan_test.exs +++ b/apps/explorer/test/explorer/etherscan_test.exs @@ -631,6 +631,8 @@ defmodule Explorer.EtherscanTest do value: internal_transaction.value, created_contract_address_hash: internal_transaction.created_contract_address_hash, input: internal_transaction.input, + index: internal_transaction.index, + transaction_hash: internal_transaction.transaction_hash, type: internal_transaction.type, gas: internal_transaction.gas, gas_used: internal_transaction.gas_used,