From 0cc79a09f01e661db5f5fa928c21a655d7d8f0ee Mon Sep 17 00:00:00 2001 From: FitzLu Date: Thu, 21 May 2020 12:07:51 +0800 Subject: [PATCH] Initial alpha release for Rialto Network --- .gitignore | 4 + CHANGELOG.md | 1 + README.md | 52 +--- .../theme/_bsc_variables-non-critical.scss | 15 + .../assets/css/theme/_bsc_variables.scss | 78 +++++ .../css/theme/_variables-non-critical.scss | 5 +- .../assets/css/theme/_variables.scss | 4 +- .../assets/static/android-chrome-192x192.png | Bin 9762 -> 3002 bytes .../assets/static/android-chrome-512x512.png | Bin 30191 -> 4439 bytes .../assets/static/apple-touch-icon.png | Bin 16647 -> 2551 bytes .../images/binance_smart_chain_logo.svg | 13 + .../assets/static/images/blockscout_logo.svg | 1 - .../assets/static/images/dex_logo.svg | 1 + .../assets/static/images/favicon-16x16.png | Bin 424 -> 589 bytes .../assets/static/images/favicon-32x32.png | Bin 794 -> 1411 bytes .../assets/static/images/favicon.ico | Bin 15086 -> 4286 bytes .../assets/static/mstile-150x150.png | Bin 7418 -> 1994 bytes .../assets/static/safari-pinned-tab.svg | 40 +-- apps/block_scout_web/config/config.exs | 15 +- .../lib/block_scout_web/api_router.ex | 3 +- ...ddress_contract_verification_controller.ex | 1 + .../controllers/address_controller.ex | 6 +- .../controllers/api/rpc/address_controller.ex | 270 +++++++++--------- .../api/rpc/transaction_controller.ex | 36 +-- .../lib/block_scout_web/endpoint.ex | 6 +- .../lib/block_scout_web/plug/url_redirect.ex | 24 ++ .../lib/block_scout_web/router.ex | 51 +--- .../templates/address/overview.html.eex | 6 +- .../new.html.eex | 2 +- .../templates/address_token/_tokens.html.eex | 2 +- .../address_token_balance/_tokens.html.eex | 4 +- .../templates/api_docs/eth_rpc.html.eex | 2 +- .../templates/chain/_metatags.html.eex | 4 +- .../templates/chain/show.html.eex | 33 +-- .../templates/layout/_footer.html.eex | 75 ----- .../templates/layout/_topnav.html.eex | 62 +--- .../templates/page_not_found/index.html.eex | 8 +- .../smart_contract/_functions.html.eex | 4 +- .../tokens/overview/_details.html.eex | 2 +- .../views/address_token_view.ex | 8 + .../lib/block_scout_web/views/address_view.ex | 29 ++ .../block_scout_web/views/api_docs_view.ex | 2 +- .../lib/block_scout_web/views/chain_view.ex | 26 +- .../lib/block_scout_web/views/layout_view.ex | 20 +- .../block_scout_web/views/page_not_found.ex | 5 + .../lib/block_scout_web/views/wei_helpers.ex | 6 +- .../lib/block_scout_web/web_router.ex | 4 +- apps/block_scout_web/priv/gettext/default.pot | 16 +- .../priv/gettext/en/LC_MESSAGES/default.po | 16 +- .../views/layout_view_test.exs | 2 +- .../lib/ethereum_jsonrpc/contract.ex | 12 +- apps/explorer/config/config.exs | 4 +- apps/explorer/lib/explorer/chain.ex | 11 + .../lib/explorer/chain/supply/token_bridge.ex | 48 +++- .../lib/explorer/chain_spec/geth/importer.ex | 75 +++++ .../explorer/chain_spec/parity/importer.ex | 59 ++-- docker/Dockerfile | 13 +- mix.lock | 222 +++++++------- rel/commands/manual_launch.sh | 20 ++ 59 files changed, 775 insertions(+), 653 deletions(-) create mode 100644 apps/block_scout_web/assets/css/theme/_bsc_variables-non-critical.scss create mode 100644 apps/block_scout_web/assets/css/theme/_bsc_variables.scss create mode 100644 apps/block_scout_web/assets/static/images/binance_smart_chain_logo.svg delete mode 100644 apps/block_scout_web/assets/static/images/blockscout_logo.svg create mode 100644 apps/block_scout_web/assets/static/images/dex_logo.svg create mode 100644 apps/block_scout_web/lib/block_scout_web/plug/url_redirect.ex create mode 100644 apps/explorer/lib/explorer/chain_spec/geth/importer.ex create mode 100644 rel/commands/manual_launch.sh diff --git a/.gitignore b/.gitignore index b4d6d0f79..8c43c7bd9 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,7 @@ screenshots/ # mix phx.gen.cert self-signed certs for dev /apps/block_scout_web/priv/cert + +# vscode and extensions +.vscode/ +.elixir_ls/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 94854664c..d902dc4ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ ### Fixes +- [#3064](https://github.com/poanetwork/blockscout/pull/3064) - Automatically define Block reward contract address in TokenBridge supply module - [#3061](https://github.com/poanetwork/blockscout/pull/3061) - Fix verification of contracts with error messages in require in parent contract ### Chore diff --git a/README.md b/README.md index a7d8d7a91..ec5ff7b5f 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,8 @@ -

- - - -

+# Explorer for Binance Smart Chain +This is a project fork from [Blockscout](https://github.com/poanetwork/blockscout). Use for [Binance Smart Chain Rialto Network](https://explorer.binance.org/smart-testnet). -

BlockScout

-

Blockchain Explorer for inspecting and analyzing EVM Chains.

-
- -[![CircleCI](https://circleci.com/gh/poanetwork/blockscout.svg?style=svg&circle-token=f8823a3d0090407c11f87028c73015a331dbf604)](https://circleci.com/gh/poanetwork/blockscout) [![Coverage Status](https://coveralls.io/repos/github/poanetwork/blockscout/badge.svg?branch=master)](https://coveralls.io/github/poanetwork/blockscout?branch=master) [![Join the chat at https://gitter.im/poanetwork/blockscout](https://badges.gitter.im/poanetwork/blockscout.svg)](https://gitter.im/poanetwork/blockscout?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -
- -BlockScout provides a comprehensive, easy-to-use interface for users to view, confirm, and inspect transactions on EVM (Ethereum Virtual Machine) blockchains. This includes the POA Network, xDai Chain, Ethereum Classic and other **Ethereum testnets, private networks and sidechains**. - -See our [project documentation](https://docs.blockscout.com/) for detailed information and setup instructions. - -Visit the [POA BlockScout forum](https://forum.poa.network/c/blockscout) for FAQs, troubleshooting, and other BlockScout related items. You can also post and answer questions here. - -You can also access the dev chatroom on our [Gitter Channel](https://gitter.im/poanetwork/blockscout). +## Disclaimer +**The software and related documentation are under active development, all subjected to potential future change without notification and not ready for production use. The code and security audit have not been fully completed and not ready for any bug bounty.** ## About BlockScout @@ -26,34 +10,8 @@ BlockScout is an Elixir application that allows users to search transactions, vi Currently available full-featured block explorers (Etherscan, Etherchain, Blockchair) are closed systems which are not independently verifiable. As Ethereum sidechains continue to proliferate in both private and public settings, transparent, open-source tools are needed to analyze and validate transactions. -## Supported Projects - -BlockScout supports a number of projects. Hosted instances include POA Network, xDai Chain, Ethereum Classic, Sokol & Kovan testnets, and other EVM chains. - -- [List of hosted mainnets, testnets, and additional chains using BlockScout](https://docs.blockscout.com/for-projects/supported-projects) -- [Hosted instance versions](https://docs.blockscout.com/about/use-cases/hosted-blockscout) - - -## Getting Started - -See the [project documentation](https://docs.blockscout.com/) for instructions: -- [Requirements](https://docs.blockscout.com/for-developers/information-and-settings/requirements) -- [Ansible deployment](https://docs.blockscout.com/for-developers/ansible-deployment) -- [Manual deployment](https://docs.blockscout.com/for-developers/manual-deployment) -- [ENV variables](https://docs.blockscout.com/for-developers/information-and-settings/env-variables) -- [Configuration options](https://docs.blockscout.com/for-developers/configuration-options) - - -## Acknowledgements - -We would like to thank the [EthPrize foundation](http://ethprize.io/) for their funding support. - -## Contributing - -See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution and pull request protocol. We expect contributors to follow our [code of conduct](CODE_OF_CONDUCT.md) when submitting code or comments. - ## License [![License: GPL v3.0](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) -This project is licensed under the GNU General Public License v3.0. See the [LICENSE](LICENSE) file for details. +This project is licensed under the GNU General Public License v3.0. See the [LICENSE](LICENSE) file for details. \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/theme/_bsc_variables-non-critical.scss b/apps/block_scout_web/assets/css/theme/_bsc_variables-non-critical.scss new file mode 100644 index 000000000..42c7bee8c --- /dev/null +++ b/apps/block_scout_web/assets/css/theme/_bsc_variables-non-critical.scss @@ -0,0 +1,15 @@ +// bsc +$primary: #FBDA3C; +$dark-primary: #F0B90B !default; +$dark-primary-alternate: #F0B90B !default; +$secondary: #FBDA3C; +$tertiary: #93d7ff; +$additional-font: #fff; +$header-background-color: #13161A; +$dashboard-banner-network-plain-container-background-color: #fff; +$dashboard-stats-item-label-color: #000; +$dashboard-stats-item-value-color: #000; +$header-links-color-active:$primary; + +// button border and font color && hover bg color +$btn-line-color: $primary; \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/theme/_bsc_variables.scss b/apps/block_scout_web/assets/css/theme/_bsc_variables.scss new file mode 100644 index 000000000..4ef198dff --- /dev/null +++ b/apps/block_scout_web/assets/css/theme/_bsc_variables.scss @@ -0,0 +1,78 @@ +// bsc +$primary: #FBDA3C; +$dark-primary: #F0B90B !default; +$dark-primary-alternate: #F0B90B !default; +$secondary: #FBDA3C; +$tertiary: #93d7ff; +$additional-font: #fff; +$header-background-color: #13161A; +$dashboard-banner-network-plain-container-background-color: #fff; +$dashboard-stats-item-label-color: #000; +$dashboard-stats-item-value-color: #000; +$header-links-color-active:$primary; + +// footer +$footer-background-color: #1C1E22; +$footer-title-color: #fff; +$footer-text-color: rgba(255, 255, 255, 0.6); +$footer-item-disc-color: $secondary; +.footer-logo { filter: brightness(0) invert(1); } + +// dashboard +$dashboard-line-color-price: $tertiary; // price left border + +$dashboard-banner-chart-legend-label-color: #dcc8ff; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end + + +// navigation +.navbar { box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); } // header shadow +$dropdown-menu-item-hover-color: $primary !default; +$dropdown-menu-item-hover-background: rgba($primary, .1) !default; +$header-icon-color-hover: $primary; +$header-icon-border-color-hover: $primary; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $primary; // button border and font color && hover bg color +$btn-copy-color: $primary; // btn copy +$btn-qr-color: $primary; // btn qr-code +$btn-address-card-icon-color: $primary; // btn address color + +//links & tile +$tile-body-a-color: $primary; +$tile-type-block-color: $primary; +$tile-type-progress-bar-color: $primary; +a.tile-title { color: $primary !important; } + +// card +$card-background-1: $primary; +$card-tab-active: $primary; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Badges +$badge-neutral-color: $primary; +$badge-neutral-background-color: rgba($primary, .1); +$api-text-monospace-color: $primary; + +// Tokens dropdown +.token-balance-dropdown[aria-labelledby="dropdown-tokens"] { + .dropdown-items .dropdown-item:hover { + color: $primary !important; + } +} \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/theme/_variables-non-critical.scss b/apps/block_scout_web/assets/css/theme/_variables-non-critical.scss index 24c9f7735..0d2dbd93a 100644 --- a/apps/block_scout_web/assets/css/theme/_variables-non-critical.scss +++ b/apps/block_scout_web/assets/css/theme/_variables-non-critical.scss @@ -1,5 +1,6 @@ @import "theme/base_variables"; -@import "neutral_variables-non-critical"; +@import "bsc_variables-non-critical"; +// @import "neutral_variables-non-critical"; // @import "xusdt_variables-non-critical"; // @import "dai_variables-non-critical"; // @import "ethereum_classic_variables-non-critical"; @@ -21,4 +22,4 @@ // @import "tobalaba_variables-non-critical"; // @import "tomochain_variables-non-critical"; // @import "rsk_variables-non-critical"; -// @import "ethercore_variables-non-critical"; +// @import "ethercore_variables-non-critical"; \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/theme/_variables.scss b/apps/block_scout_web/assets/css/theme/_variables.scss index d2108eb34..5cd37b302 100644 --- a/apps/block_scout_web/assets/css/theme/_variables.scss +++ b/apps/block_scout_web/assets/css/theme/_variables.scss @@ -1,5 +1,6 @@ @import "theme/base_variables"; -@import "neutral_variables"; +@import "bsc_variables"; +// @import "neutral_variables"; // @import "xusdt_variables"; // @import "dai_variables"; // @import "ethereum_classic_variables"; @@ -22,7 +23,6 @@ // @import "tomochain_variables"; // @import "rsk_variables"; // @import "ethercore_variables"; - // responsive breakpoints $breakpoint-xs: 320px; $breakpoint-sm: 480px; diff --git a/apps/block_scout_web/assets/static/android-chrome-192x192.png b/apps/block_scout_web/assets/static/android-chrome-192x192.png index 3ba6a1e5632222ec23b9f0c21850ddcaa87a2b84..713b6a6c481719f22c57e378dff8881adff810b7 100644 GIT binary patch literal 3002 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 P=2DVVmu-}O8~(ol$@)?o diff --git a/apps/block_scout_web/assets/static/android-chrome-512x512.png b/apps/block_scout_web/assets/static/android-chrome-512x512.png index 69a220507ddc9f7d547754538b620b72400c9b84..e935cda2b7bc376afca6ef8075cc22ebc6b45a87 100644 GIT binary patch literal 4439 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 diff --git a/apps/block_scout_web/assets/static/apple-touch-icon.png b/apps/block_scout_web/assets/static/apple-touch-icon.png index 70a5198240ab1a2fe4e7f22892ce242ff1e89c8c..203fd0e3d9f587be942fc9019ff35c55a6367985 100644 GIT binary patch literal 2551 zcmWkweLRzEAK%#Kb+k=rjO5Tco!Qx9I(aF}Smj`Ijx?{~G)&$twFpyQ4w>{|sTeyw zCd)aQDV!W4&hwbrdEC}xB^9B06d`%3o_l{>_xHYjFV}VbzW4RHf8P>%01at~HH1JQ z$YV#TK_Iqkhdu&)dX6CWgJ6()l$im67-6&n3aPzm2^ygpL9`=~R)zH&Z~}{?_){Q| zdwiqqXgHWqc8p5-=^S)%l9FsjGaFp4EkWBAptle+2)wk+-k~@moj2ns5T){pccxdo z!b=OR1`aIkhPHYA5Lfr|yJhGQHD7aQ_X+7IV5?KR7&)#CIRRWUal=J`8XKyI|Lp_q!l0&|LdloyVGIcuNw zxwNC8=Q)m&Vt@jde`-HpS3ydoPTEpZW}u+qzWuz+BU)9w$%1`4$Ol7v%7q0f;5NB; z&MV2_QM=NV-VIK;<1kGd;v(e;=2x1cz|!jkjZvW8ZK z3u!0>quJ-xA6s|%@px``s-;&8Ty{ZeL(H6uTw0QZDpmuMR&AdB6BLD$8~U zNBxZVp%7%Ey%V;$6D;OUx}Mq{tbc6AFw+UFrDGI1uhz1A!$>KMQF#dKik61%n@$}< zzUV7x#cAoL6eMeDA1i=QVzq3;4Z4E0B7{D+IxBWY<;8#i5ch(Km6j=))jxSv2bo-JYe6{{!H((X4A zq3kCD8B82uW056v@CJfUsf-!jo&*BL4J_ip)>K`c=-aCKEy~)%r11K!^fP$HXl~wz`io}$e|&I$sCk}~lfC+M&(qCW zXp`+};^i4Nyb_SV1+G!vO}Jjp!x~5n^RNghE1!#= z&%XfiYdi!SkW^70di6{EeQ-$bOrdIzxc~KQyRTVy^)*Y&(>f@rE1Y9C|JURMCu$4F zXAYOU#l?~m?}=#zb>FjvitdbMfovaRC`J`S=j$Z791yjxVa7;_!3}l4Fs(|t#Q14D zB1e)c?Uw}Ss|}^Dh_&6y5=ZPtWWgCeGvkUHD|Izni&T~jWo$fis5FtzqB;BI>K%YP zC9ak{muMTsmDhd?G?Nmy=qd19=TjSvfL)|S0)6h0Wbw$PQJ2z;9uL5YiAr%stg54- z2i~=GH0&q5_#O7a7Dzs?SP<;Te|+oGsa9QHIO(m6}I&X3{@;(z>8L>_QvP zgdN$jkbskBE^K!a*>bCIUo%z)j|bim+uVpD)PeAj-P*XUD(kotm)alXTY1 zv!hD$!$Y z7pnI2hfd;9;6LCZU?BN;(ItKR?f=-nmC#~T&!%21Z!K-U5h3n)d!nSXSec))FvIx{ zCFv3~qg0KXhk2iRCUPB=bW#@$Gar@sCNuUvl5~16A~Fk?!{5^Pf}SIbI+=sajAVKo z=%FA@yLw+x&jHu9chtLp@IBnjoMR`)dazF_A@)fx=@x?$il`8VbgAEkAnUV`=49*m z-stJajDl#@ZiaV0qV8stG5Kp2(uA{WE-`~1M!dTCb}=0NJ?jkx#4VoAq*L6ePBN3> z-kTk4!5XbN)Ud2*AldToMZO<1r3va!5)}9KSN75R#U0Is?2&u_P z6Y#RaQQo8&AIJGXpB^Z^E*P85A{6lhHT5UzfiG|Nl1WXY>oZ@`#ILPl0_qc$l@`Ez zo?vXwrhNt~OSPL_4TgrM=V3cSiGJgG)y3Rwa&+|_9VgV<61yKCtQWdR^J%=8c?aE2 z1)jF-l>X!tUm{Kkab`8Mm1ss(h&!v93%=aXXR>wLf&H2jM8A=|>QE}!DVx7h2KkA@ z`tfAFP&SlPD!A=P@gs|pcS-?#e6ug$6kA=3a2me^cAuaX;cYA(v(lu$nNi2UtZ-lt zt7*VMwlnYfUl?{w500`v10|EzY09u8ATwZV$JsSH&Q79M>ngxBu=jiEgOr{G)j=hQ z=U|?VXb?fQ&~_6Vyb+P*0qQi!F`ocx>ycBu{{vGwwo3p2 literal 16647 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 diff --git a/apps/block_scout_web/assets/static/images/binance_smart_chain_logo.svg b/apps/block_scout_web/assets/static/images/binance_smart_chain_logo.svg new file mode 100644 index 000000000..2dedc2cfe --- /dev/null +++ b/apps/block_scout_web/assets/static/images/binance_smart_chain_logo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/apps/block_scout_web/assets/static/images/blockscout_logo.svg b/apps/block_scout_web/assets/static/images/blockscout_logo.svg deleted file mode 100644 index 2ac7cff8c..000000000 --- a/apps/block_scout_web/assets/static/images/blockscout_logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/block_scout_web/assets/static/images/dex_logo.svg b/apps/block_scout_web/assets/static/images/dex_logo.svg new file mode 100644 index 000000000..bc5aacfe1 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/dex_logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apps/block_scout_web/assets/static/images/favicon-16x16.png b/apps/block_scout_web/assets/static/images/favicon-16x16.png index 6c6c9d2cda384f7edcc863d8524240d5428e2795..858e3621c30dc1c303dc5b31f7a4215a15c9b5d2 100644 GIT binary patch delta 565 zcmV-50?PfU1I+}GBYy%ENkl5JNK?`>hw#E>c2=3A1bP?zac8n zNdE-ghg~XlSM)*1f9j32796q20}5eMOm zlomu<6KNtlLF;nAD4yu#`6RoYO|Y0_M-Bp!oNLD-J2;cD^&fA=JxHnnp_+fjZb0lJ z;L>co@vbMLYJaP*c^|~i0$N=wKlA+R{(CvJmf>C4+QtmOUl?K6;oSN4C4c<+IUj)Y zWfb``#UH`B<6VkfE9GUv?EVApav` z$UJEU9S<_!gH?}BfbugF!Nx8efkmIUe19KDedM(sZ|UOEp1Ek> z297_DP9TrKQ3T%GfZE?wQ2m>-Bkw@kYGhEXRs%Jt4#h#iQu9$~o7sVFa~92dWcDneI{Q=?In-37^N`>&pUI4vQ&X9p t;39_=l#xMXhsL8HBNsYP<7c`Rhkg*AQ=S?HT>t<800>D%PDHLkV1nPXzl8t* diff --git a/apps/block_scout_web/assets/static/images/favicon-32x32.png b/apps/block_scout_web/assets/static/images/favicon-32x32.png index 509ffc1dac33e5fdd297e8582a221374e7d8de45..e65f230ad98f1de7c7014c99f659c35409c65507 100644 GIT binary patch delta 1393 zcmV-%1&;cf27?QbBYy=-NklE-Ld{XVWKVvQXjdAVAtpU;uc706y$&v({i-B2UihqYR6|ziz=hDZcYP;ReSup;v zEl75=aSdSgRb&qkvUi92J{#vj72Hyyau5q}=yd(kqqHVtdcwTm(geNa^O8n3W}9p^ zWu)n*1&KsVPmUaM95kH@*%c|-Q{Xr#|LZR0DOg|?T)P;mCSlfBXRKhB=E)oQW!Up0PsC^ zqzV^HBLMG{$CPKyE&#Wn>}%$LJC~<`gvcxU%C%v768njZ-4=PqO=n2o+K>Y0GWH!- zS{iCnHyjVlQGPm%ARKr%b<{Y4dZrxAk$=V)KixzEura^@aJNAc0^PXn;MTfw#`)&n z2EK?0zEa~D>WMqk+6*j$?K~L4=jiuT@I4tO)ywC!S(q~wQT9vmQ`!_Ffy<|zZ{dG0 z9(A4!+*nE#U?V?*6A|SZIT78S)Mj^v`FSswKm)>dgh=hJsCGe4M8iipiIkeCh<^uh z@`*@7NFoOt3un5NHmg(|pQPUe{iIet_h8TleO9S>ETTLo1!fVZWRZ+4({SGPQT08$ z%ji~=UaYSm^&%sN10-YxE-s_Fel>ywJQBD_$7?Pk9Xs>knAl&(^wRbq*$xKpcGoeK zXwqG<*#u6_x1k~_kqf2vU&FM^PJamo{4JQ>&ad>+kC|_)Y|1lHBNDkLkd<&_Jb11R z(UXr_lKs|8KVfr4tYoT+G8d!hvyz1Y+WoLa>942hr+7_^6C>9G8SBEdnh;e0)*h(s zz@O`t<(I#pJ&b(_161Sad9AbVosGU;>ts-lz>dx6 zYqj11@+I$lyh7$_XpnacS`mI)Ie%-Bi=^&%rhKL;>X%M> z`fNs}EHiJg9>XhuOky|6xBUapaN!y0Xw!Aoa}V7<`8x%WNp!Ny&7@$;o|+k5-zJG8 zbV)eM2deSfi=8BzQ-H=^23pU;srsOC{++siM~*bkzw4czsiqzu)cY)e)`wj36F}rk z)(OSa4iUQ6vwv^`oFmcf0qV6Vd>FNJt>T86g>soDSyak8i_ca=H50%M_4x1+)dK;P zhHH4Ue5T1Ln{mPyQLSOVt)8P(k58YIB#ITFR?ZbeOhd!gGthO%QVf2uT3FW&TFo#9 z9L+=&OEbvY2L)1e=cqgBY~7bgHyl2FOo)n+coUmb^nXqd+mD%t!B1A8$K~1Rd}@l& zwVtUK5a&zY1x3>gMD-j?gs!b;WipI|Umwjx^FjxADL@xurCamzFm~KOfzBtUpwo%T z1{zG2Sfi3S@N#`v2@}HjTzGpMkKQ~(zcX{(d_)fgI7F-|y7l@Y^f%z_+z_GA2-Krq zjnp2XRDb$WFg_37KE?YFA296PA~zp#L;+qA48Fe_LoY1Egi9-}#u4Y2VDQ-mLFuQc z#|YnlT7tz9qaP3B)BDUU3_Lr}(hWVg5DTwwbMko|5TX!N68lnq#z81Q`h3*hg zX=CUan3*KM?n$Pmq8~HR)00F}74^vfuY6R|ICoBe=H?u~-ScVZE<5M0s_KxtsmgdF zI(OxIs_B4pa!NVqbmj5)I8pj_O0y&KWUDE&8~+le&sZG-&a&doDE5W*ROvG|ZVn;# zMa4(qF>Vfd*mZCy!yYGx6gxhNw_%yz@qIW}RV>QRedlvS?yCCu#_Oycim*BJgD(x) zJM1P(ziL0M{cOplS7~nh=QHfxR{zeSpT_|k*cw&d?j6bEyGYKz?8i3?+w5j>U@tbX zbsE|H)8|lxZMJ<5hK-G3q|xrmi|s?%_Wa5|_TP9P$$gEn?{nrp{B0*n--I=+WlxBW zZ7{&{#cGWEoH&L!-~M-GCxh35`W6jwSj!$?%r{^xZ^b8fb=-SPsF$hUU7E$gw*{W% z#xQ<1Y+?uoSiD(a^M=BSIm>hU57iIR(V(B;fX_LzpO^F*V=feIU@No_<|D;MCy5{H z-wya%Q%oDoO>MDWgHB*Qc-+qQ|ZB^gj_J4p$wZ}p?WCj2L literal 15086 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 ABLDyZ literal 7418 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 ITleM}yKa1`vTDzvbfE;rX) z2J~6IeOZGb5~4+4CcO?^c4Bh)QiE=}5Vt4(L$hz|k9t=%Gqc5j&}CVmc0i#U8`QJ! z!0`8>86XcY0JdS5yD4?qVYKDty8`tw&3}oOiAttq*_d1HDI3df(PYPJBUOs5 z?|r0EjjoB&+pI0C*M-S1YP-V-v+_IqNc`2boNW#-jC3`nC_Q*n^T^rtrV z%d&9+5k0kwm_^F1M$v56qoAW-_Vt(mnr@VxuRpQ-G8J%0k?2nX&6cV-%{J@_U(l6Z z|LPui>*5VxXpnW5EO^e+rt;C^n*t$f@>Ydmm1S_>l7Aiggg0ogy=ED?x(x`y^3zQX z?^j$^GSW_aPAB$$p||h$kI0|2h%|c;#AbQa*C^;Q`xPOhU=e-!K^vZ zRse2e0V+M=N(r0G=Kk8ss|9f-aeR4V3kkU~{s3w?p$3 zTY+wT_j83VT4MlaWb~}*OHrOk;?%bvO4vgNdCcQ06g(ZuAjK95GiO5+K&ECu*99J< z!WZ$;44|+~|KDn~DG1jSO!%iN%r_xG*&W6NFQ&d*DsCJDf#v7qSc9Ea{tMQn0W87 zdjUknF8rL$@IFoa399`(>RrC>JW%e6(sjJ3MD;uGvHWzE4AuLy`7`foB`NP zvB+!QlD69PJoZzD3*Go;hrmGAv%#K@w_SS?zaK3du1xLn{P>lBjKbY1s3*u6$nEc(P5d&_Vxqa)Wv}= z31U7b7DC!>d0sX{Zcn_kyPW+7{>`Gr(RRi2bS21iLH@E8iEc7DX(`fCx#HLFNt0ux zz8^P!i!gZh0r6VVREK-VaA#|B?)AfXvUjgc2-fU|S}M*D3yi78LOeI~P1Cp|)Z-eV z_Ybuk50k1uMIG8(BSfOH|AQ4#0&ZSOr3k%5=4d3OcKvrt}sWRkoIjEi0;Xi(_=vGV9Z={6efh{QAsS{<0{vN~tK zium=KqMy=#Qr16L9!phFUUjed=-2IL2U-Oda6i|?UaAZ?J2jXP zR@5AL86Wn=Gb214wTp>AyWF;)_(-=P6kxVm)#VhJ=NiZS;Kt~dhn~H8ib2f3W?GSu zv0uek0OMJM3Bqm**_#C;Hk#YBIZ3j8;Ed;zW?u@zsmmz|FZOd2>%)5e+(!<@xNO6Z;C_M|4sN0(*FnSTTK5O?0&4g XG|Dv;S8ws314}(EqkC{o=Y; - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - + + diff --git a/apps/block_scout_web/config/config.exs b/apps/block_scout_web/config/config.exs index 315d1928e..0379d6f64 100644 --- a/apps/block_scout_web/config/config.exs +++ b/apps/block_scout_web/config/config.exs @@ -32,7 +32,11 @@ config :block_scout_web, }, other_networks: System.get_env("SUPPORTED_CHAINS"), webapp_url: System.get_env("WEBAPP_URL"), - api_url: System.get_env("API_URL") + api_url: System.get_env("API_URL"), + web_network_path: System.get_env("WEB_NETWORK_PATH") || "/", + static_network_path: System.get_env("STATIC_NETWORK_PATH") || "/", + api_path: System.get_env("API_PATH") || "/", + socket_root: System.get_env("SOCKET_ROOT") || "/" config :block_scout_web, BlockScoutWeb.Counters.BlocksIndexedCounter, enabled: true @@ -45,6 +49,12 @@ config :block_scout_web, BlockScoutWeb.Endpoint, path: System.get_env("NETWORK_PATH") || "/", api_path: System.get_env("API_PATH") || "/" ], + static_url: [ + scheme: System.get_env("STATIC_BLOCKSCOUT_PROTOCOL") || "https", + port: System.get_env("STATIC_PORT"), + host: System.get_env("STATIC_BLOCKSCOUT_HOST") || "localhost", + path: System.get_env("STATIC_NETWORK_PATH") || "/" + ], render_errors: [view: BlockScoutWeb.ErrorView, accepts: ~w(html json)], pubsub: [name: BlockScoutWeb.PubSub] @@ -95,7 +105,8 @@ config :block_scout_web, BlockScoutWeb.ApiRouter, writing_enabled: System.get_env("DISABLE_WRITE_API") != "true", reading_enabled: System.get_env("DISABLE_READ_API") != "true" -config :block_scout_web, BlockScoutWeb.WebRouter, enabled: System.get_env("DISABLE_WEBAPP") != "true" +config :block_scout_web, BlockScoutWeb.WebRouter, + enabled: System.get_env("DISABLE_WEBAPP") != "true" # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. diff --git a/apps/block_scout_web/lib/block_scout_web/api_router.ex b/apps/block_scout_web/lib/block_scout_web/api_router.ex index 944ea56fa..4202460f6 100644 --- a/apps/block_scout_web/lib/block_scout_web/api_router.ex +++ b/apps/block_scout_web/lib/block_scout_web/api_router.ex @@ -5,6 +5,7 @@ defmodule RPCTranslatorForwarder do """ alias BlockScoutWeb.API.RPC.RPCTranslator defdelegate init(opts), to: RPCTranslator + @spec call(Plug.Conn.t(), any) :: Plug.Conn.t() defdelegate call(conn, opts), to: RPCTranslator end @@ -56,7 +57,7 @@ defmodule BlockScoutWeb.ApiRouter do "stats" => {RPC.StatsController, []}, "contract" => {RPC.ContractController, [:verify]}, "transaction" => {RPC.TransactionController, []} - }) + }) end # For backward compatibility. Should be removed diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_controller.ex index cfffb85f3..000742bb7 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_controller.ex @@ -28,6 +28,7 @@ defmodule BlockScoutWeb.AddressContractVerificationController do "external_libraries" => external_libraries } ) do + Que.add(PublisherWorker, {smart_contract["address_hash"], smart_contract, external_libraries, conn}) send_resp(conn, 204, "") diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex index 212ee668e..ef198ea8e 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex @@ -30,7 +30,11 @@ defmodule BlockScoutWeb.AddressController do end exchange_rate = Market.get_exchange_rate(Explorer.coin()) || Token.null() - total_supply = Chain.total_supply() + # total_supply = Chain.total_supply() + + token_hub = Chain.fetch_token_hub_address() + token_hub_balance = Decimal.div(token_hub.fetched_coin_balance.value, Decimal.new("1000000000000000000")) + total_supply = Decimal.sub(Decimal.new("200000000"), token_hub_balance) items = addresses_page diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/address_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/address_controller.ex index 3150d3bd6..0243999c2 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/address_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/address_controller.ex @@ -6,19 +6,19 @@ defmodule BlockScoutWeb.API.RPC.AddressController do alias Explorer.Chain.{Address, Wei} alias Indexer.Fetcher.CoinBalanceOnDemand - def listaccounts(conn, params) do - options = - params - |> optional_params() - |> Map.put_new(:page_number, 0) - |> Map.put_new(:page_size, 10) - - accounts = list_accounts(options) - - conn - |> put_status(200) - |> render(:listaccounts, %{accounts: accounts}) - end + # def listaccounts(conn, params) do + # options = + # params + # |> optional_params() + # |> Map.put_new(:page_number, 0) + # |> Map.put_new(:page_size, 10) + + # accounts = list_accounts(options) + + # conn + # |> put_status(200) + # |> render(:listaccounts, %{accounts: accounts}) + # end def eth_get_balance(conn, params) do with {:address_param, {:ok, address_param}} <- fetch_address(params), @@ -67,9 +67,9 @@ defmodule BlockScoutWeb.API.RPC.AddressController do end end - def balancemulti(conn, params) do - balance(conn, params, :balancemulti) - end + # def balancemulti(conn, params) do + # balance(conn, params, :balancemulti) + # end def txlist(conn, params) do options = optional_params(params) @@ -94,69 +94,69 @@ defmodule BlockScoutWeb.API.RPC.AddressController do end end - def txlistinternal(conn, params) do - case {Map.fetch(params, "txhash"), Map.fetch(params, "address")} do - {:error, :error} -> - render(conn, :error, error: "Query parameter txhash or address is required") - - {{:ok, txhash_param}, :error} -> - txlistinternal(conn, txhash_param, :txhash) - - {:error, {:ok, address_param}} -> - txlistinternal(conn, params, address_param, :address) - end - end - - def txlistinternal(conn, txhash_param, :txhash) do - with {:format, {:ok, transaction_hash}} <- to_transaction_hash(txhash_param), - {:ok, internal_transactions} <- list_internal_transactions(transaction_hash) do - render(conn, :txlistinternal, %{internal_transactions: internal_transactions}) - else - {:format, :error} -> - render(conn, :error, error: "Invalid txhash format") - - {:error, :not_found} -> - render(conn, :error, error: "No internal transactions found", data: []) - end - end - - def txlistinternal(conn, params, address_param, :address) do - options = optional_params(params) - - with {:format, {:ok, address_hash}} <- to_address_hash(address_param), - {:ok, internal_transactions} <- list_internal_transactions(address_hash, options) do - render(conn, :txlistinternal, %{internal_transactions: internal_transactions}) - else - {:format, :error} -> - render(conn, :error, error: "Invalid address format") - - {:error, :not_found} -> - render(conn, :error, error: "No internal transactions found", data: []) - end - end - - def tokentx(conn, params) do - options = optional_params(params) - - with {:address_param, {:ok, address_param}} <- fetch_address(params), - {:format, {:ok, address_hash}} <- to_address_hash(address_param), - {:contract_address, {:ok, contract_address_hash}} <- to_contract_address_hash(params["contractaddress"]), - {:ok, token_transfers} <- list_token_transfers(address_hash, contract_address_hash, options) do - render(conn, :tokentx, %{token_transfers: token_transfers}) - else - {:address_param, :error} -> - render(conn, :error, error: "Query parameter address is required") - - {:format, :error} -> - render(conn, :error, error: "Invalid address format") - - {:contract_address, :error} -> - render(conn, :error, error: "Invalid contractaddress format") - - {:error, :not_found} -> - render(conn, :error, error: "No token transfers found", data: []) - end - end + # def txlistinternal(conn, params) do + # case {Map.fetch(params, "txhash"), Map.fetch(params, "address")} do + # {:error, :error} -> + # render(conn, :error, error: "Query parameter txhash or address is required") + + # {{:ok, txhash_param}, :error} -> + # txlistinternal(conn, txhash_param, :txhash) + + # {:error, {:ok, address_param}} -> + # txlistinternal(conn, params, address_param, :address) + # end + # end + + # def txlistinternal(conn, txhash_param, :txhash) do + # with {:format, {:ok, transaction_hash}} <- to_transaction_hash(txhash_param), + # {:ok, internal_transactions} <- list_internal_transactions(transaction_hash) do + # render(conn, :txlistinternal, %{internal_transactions: internal_transactions}) + # else + # {:format, :error} -> + # render(conn, :error, error: "Invalid txhash format") + + # {:error, :not_found} -> + # render(conn, :error, error: "No internal transactions found", data: []) + # end + # end + + # def txlistinternal(conn, params, address_param, :address) do + # options = optional_params(params) + + # with {:format, {:ok, address_hash}} <- to_address_hash(address_param), + # {:ok, internal_transactions} <- list_internal_transactions(address_hash, options) do + # render(conn, :txlistinternal, %{internal_transactions: internal_transactions}) + # else + # {:format, :error} -> + # render(conn, :error, error: "Invalid address format") + + # {:error, :not_found} -> + # render(conn, :error, error: "No internal transactions found", data: []) + # end + # end + + # def tokentx(conn, params) do + # options = optional_params(params) + + # with {:address_param, {:ok, address_param}} <- fetch_address(params), + # {:format, {:ok, address_hash}} <- to_address_hash(address_param), + # {:contract_address, {:ok, contract_address_hash}} <- to_contract_address_hash(params["contractaddress"]), + # {:ok, token_transfers} <- list_token_transfers(address_hash, contract_address_hash, options) do + # render(conn, :tokentx, %{token_transfers: token_transfers}) + # else + # {:address_param, :error} -> + # render(conn, :error, error: "Query parameter address is required") + + # {:format, :error} -> + # render(conn, :error, error: "Invalid address format") + + # {:contract_address, :error} -> + # render(conn, :error, error: "Invalid contractaddress format") + + # {:error, :not_found} -> + # render(conn, :error, error: "No token transfers found", data: []) + # end + # end @tokenbalance_required_params ~w(contractaddress address) @@ -192,24 +192,24 @@ defmodule BlockScoutWeb.API.RPC.AddressController do end end - def getminedblocks(conn, params) do - options = Helpers.put_pagination_options(%{}, params) + # def getminedblocks(conn, params) do + # options = Helpers.put_pagination_options(%{}, params) - with {:address_param, {:ok, address_param}} <- fetch_address(params), - {:format, {:ok, address_hash}} <- to_address_hash(address_param), - {:ok, blocks} <- list_blocks(address_hash, options) do - render(conn, :getminedblocks, %{blocks: blocks}) - else - {:address_param, :error} -> - render(conn, :error, error: "Query parameter 'address' is required") + # with {:address_param, {:ok, address_param}} <- fetch_address(params), + # {:format, {:ok, address_hash}} <- to_address_hash(address_param), + # {:ok, blocks} <- list_blocks(address_hash, options) do + # render(conn, :getminedblocks, %{blocks: blocks}) + # else + # {:address_param, :error} -> + # render(conn, :error, error: "Query parameter 'address' is required") - {:format, :error} -> - render(conn, :error, error: "Invalid address format") + # {:format, :error} -> + # render(conn, :error, error: "Invalid address format") - {:error, :not_found} -> - render(conn, :error, error: "No blocks found", data: []) - end - end + # {:error, :not_found} -> + # render(conn, :error, error: "No blocks found", data: []) + # end + # end @doc """ Sanitizes optional params. @@ -319,14 +319,14 @@ defmodule BlockScoutWeb.API.RPC.AddressController do Enum.any?(address_hashes, &(&1 == :error)) end - defp list_accounts(%{page_number: page_number, page_size: page_size}) do - offset = (max(page_number, 1) - 1) * page_size + # defp list_accounts(%{page_number: page_number, page_size: page_size}) do + # offset = (max(page_number, 1) - 1) * page_size - # limit is just page_size - offset - |> Chain.list_ordered_addresses(page_size) - |> trigger_balances_and_add_status() - end + # # limit is just page_size + # offset + # |> Chain.list_ordered_addresses(page_size) + # |> trigger_balances_and_add_status() + # end defp hashes_to_addresses(address_hashes) do address_hashes @@ -366,11 +366,11 @@ defmodule BlockScoutWeb.API.RPC.AddressController do end) end - defp to_contract_address_hash(nil), do: {:contract_address, {:ok, nil}} + # defp to_contract_address_hash(nil), do: {:contract_address, {:ok, nil}} - defp to_contract_address_hash(address_hash_string) do - {:contract_address, Chain.string_to_address_hash(address_hash_string)} - end + # defp to_contract_address_hash(address_hash_string) do + # {:contract_address, Chain.string_to_address_hash(address_hash_string)} + # end defp to_address_hash(address_hash_string) do {:format, Chain.string_to_address_hash(address_hash_string)} @@ -383,9 +383,9 @@ defmodule BlockScoutWeb.API.RPC.AddressController do end end - defp to_transaction_hash(transaction_hash_string) do - {:format, Chain.string_to_transaction_hash(transaction_hash_string)} - end + # defp to_transaction_hash(transaction_hash_string) do + # {:format, Chain.string_to_transaction_hash(transaction_hash_string)} + # end defp put_order_by_direction(options, params) do case params do @@ -457,33 +457,33 @@ defmodule BlockScoutWeb.API.RPC.AddressController do end end - defp list_internal_transactions(transaction_hash) do - case Etherscan.list_internal_transactions(transaction_hash) do - [] -> {:error, :not_found} - internal_transactions -> {:ok, internal_transactions} - end - end - - defp list_internal_transactions(transaction_hash, options) do - case Etherscan.list_internal_transactions(transaction_hash, options) do - [] -> {:error, :not_found} - internal_transactions -> {:ok, internal_transactions} - end - end - - defp list_token_transfers(address_hash, contract_address_hash, options) do - case Etherscan.list_token_transfers(address_hash, contract_address_hash, options) do - [] -> {:error, :not_found} - token_transfers -> {:ok, token_transfers} - end - end - - defp list_blocks(address_hash, options) do - case Etherscan.list_blocks(address_hash, options) do - [] -> {:error, :not_found} - blocks -> {:ok, blocks} - end - end + # defp list_internal_transactions(transaction_hash) do + # case Etherscan.list_internal_transactions(transaction_hash) do + # [] -> {:error, :not_found} + # internal_transactions -> {:ok, internal_transactions} + # end + # end + + # defp list_internal_transactions(transaction_hash, options) do + # case Etherscan.list_internal_transactions(transaction_hash, options) do + # [] -> {:error, :not_found} + # internal_transactions -> {:ok, internal_transactions} + # end + # end + + # defp list_token_transfers(address_hash, contract_address_hash, options) do + # case Etherscan.list_token_transfers(address_hash, contract_address_hash, options) do + # [] -> {:error, :not_found} + # token_transfers -> {:ok, token_transfers} + # end + # end + + # defp list_blocks(address_hash, options) do + # case Etherscan.list_blocks(address_hash, options) do + # [] -> {:error, :not_found} + # blocks -> {:ok, blocks} + # end + # end defp get_token_balance(%{contract_address_hash: contract_address_hash, address_hash: address_hash}) do case Etherscan.get_token_balance(contract_address_hash, address_hash) do diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/transaction_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/transaction_controller.ex index 565ea4b6a..794d79aef 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/transaction_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/transaction_controller.ex @@ -31,19 +31,19 @@ defmodule BlockScoutWeb.API.RPC.TransactionController do end end - def gettxreceiptstatus(conn, params) do - with {:txhash_param, {:ok, txhash_param}} <- fetch_txhash(params), - {:format, {:ok, transaction_hash}} <- to_transaction_hash(txhash_param) do - status = to_transaction_status(transaction_hash) - render(conn, :gettxreceiptstatus, %{status: status}) - else - {:txhash_param, :error} -> - render(conn, :error, error: "Query parameter txhash is required") + # def gettxreceiptstatus(conn, params) do + # with {:txhash_param, {:ok, txhash_param}} <- fetch_txhash(params), + # {:format, {:ok, transaction_hash}} <- to_transaction_hash(txhash_param) do + # status = to_transaction_status(transaction_hash) + # render(conn, :gettxreceiptstatus, %{status: status}) + # else + # {:txhash_param, :error} -> + # render(conn, :error, error: "Query parameter txhash is required") - {:format, :error} -> - render(conn, :error, error: "Invalid txhash format") - end - end + # {:format, :error} -> + # render(conn, :error, error: "Invalid txhash format") + # end + # end def getstatus(conn, params) do with {:txhash_param, {:ok, txhash_param}} <- fetch_txhash(params), @@ -74,12 +74,12 @@ defmodule BlockScoutWeb.API.RPC.TransactionController do {:format, Chain.string_to_transaction_hash(transaction_hash_string)} end - defp to_transaction_status(transaction_hash) do - case Chain.hash_to_transaction(transaction_hash) do - {:error, :not_found} -> "" - {:ok, transaction} -> transaction.status - end - end + # defp to_transaction_status(transaction_hash) do + # case Chain.hash_to_transaction(transaction_hash) do + # {:error, :not_found} -> "" + # {:ok, transaction} -> transaction.status + # end + # end defp to_transaction_error(transaction_hash) do with {:ok, transaction} <- Chain.hash_to_transaction(transaction_hash), diff --git a/apps/block_scout_web/lib/block_scout_web/endpoint.ex b/apps/block_scout_web/lib/block_scout_web/endpoint.ex index f293f83ec..2d785fe9a 100644 --- a/apps/block_scout_web/lib/block_scout_web/endpoint.ex +++ b/apps/block_scout_web/lib/block_scout_web/endpoint.ex @@ -6,8 +6,8 @@ defmodule BlockScoutWeb.Endpoint do plug(Phoenix.Ecto.SQL.Sandbox, repo: Explorer.Repo) end - socket("/socket", BlockScoutWeb.UserSocket, websocket: [timeout: 45_000]) - socket("/wobserver", Wobserver.Web.PhoenixSocket) + socket(Application.get_env(:block_scout_web, :socket_root, "") <> "/socket", BlockScoutWeb.UserSocket, websocket: [timeout: 45_000]) + socket(Application.get_env(:block_scout_web, :socket_root, "") <> "/wobserver", Wobserver.Web.PhoenixSocket) # Serve at "/" the static files from "priv/static" directory. # @@ -15,7 +15,7 @@ defmodule BlockScoutWeb.Endpoint do # when deploying your static files in production. plug( Plug.Static, - at: "/", + at: Application.get_env(:block_scout_web, :static_network_path, "/"), from: :block_scout_web, gzip: true, only: ~w( diff --git a/apps/block_scout_web/lib/block_scout_web/plug/url_redirect.ex b/apps/block_scout_web/lib/block_scout_web/plug/url_redirect.ex new file mode 100644 index 000000000..18d837130 --- /dev/null +++ b/apps/block_scout_web/lib/block_scout_web/plug/url_redirect.ex @@ -0,0 +1,24 @@ +defmodule BlockScoutWeb.Plug.URLRedirecter do + @mainnet "/smart" + @testnet "/smart-testnet" + + @spec init(any) :: any + def init(args), do: args + + def call(%Plug.Conn{request_path: @testnet <> path, path_info: path_info} = conn, _) do + replace_path(conn, path, path_info) + end + + def call(%Plug.Conn{request_path: @mainnet <> path, path_info: path_info} = conn, _) do + replace_path(conn, path, path_info) + end + + def call(conn, _), do: conn + + defp replace_path(conn, path, path_info) do + conn + |>Map.replace!(:request_path, path) + |>Map.replace!(:path_info, tl(path_info)) + end + +end diff --git a/apps/block_scout_web/lib/block_scout_web/router.ex b/apps/block_scout_web/lib/block_scout_web/router.ex index c8eb33f4e..b0c6d3c22 100644 --- a/apps/block_scout_web/lib/block_scout_web/router.ex +++ b/apps/block_scout_web/lib/block_scout_web/router.ex @@ -1,12 +1,6 @@ defmodule BlockScoutWeb.Router do use BlockScoutWeb, :router - alias BlockScoutWeb.Plug.GraphQL - alias BlockScoutWeb.{ApiRouter, WebRouter} - - forward("/wobserver", Wobserver.Web.Router) - forward("/admin", BlockScoutWeb.AdminRouter) - pipeline :browser do plug(:accepts, ["html"]) plug(:fetch_session) @@ -19,41 +13,6 @@ defmodule BlockScoutWeb.Router do plug(:accepts, ["json"]) end - forward("/api", ApiRouter) - - if Application.get_env(:block_scout_web, ApiRouter)[:reading_enabled] do - # Needs to be 200 to support the schema introspection for graphiql - @max_complexity 200 - - forward("/graphql", Absinthe.Plug, - schema: BlockScoutWeb.Schema, - analyze_complexity: true, - max_complexity: @max_complexity - ) - - forward("/graphiql", Absinthe.Plug.GraphiQL, - schema: BlockScoutWeb.Schema, - interface: :advanced, - default_query: GraphQL.default_query(), - socket: BlockScoutWeb.UserSocket, - analyze_complexity: true, - max_complexity: @max_complexity - ) - else - scope "/", BlockScoutWeb do - pipe_through(:browser) - get("/api_docs", PageNotFoundController, :index) - get("/eth_rpc_api_docs", PageNotFoundController, :index) - end - end - - scope "/", BlockScoutWeb do - pipe_through(:browser) - - get("/api_docs", APIDocsController, :index) - get("/eth_rpc_api_docs", APIDocsController, :eth_rpc) - end - url_params = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:url] api_path = url_params[:api_path] path = url_params[:path] @@ -72,13 +31,5 @@ defmodule BlockScoutWeb.Router do end end - if Application.get_env(:block_scout_web, WebRouter)[:enabled] do - forward("/", BlockScoutWeb.WebRouter) - else - scope "/", BlockScoutWeb do - pipe_through(:browser) - - forward("/", APIDocsController, :index) - end - end + forward("/", BlockScoutWeb.WebRouter) end diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address/overview.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address/overview.html.eex index 5b521a306..621c2460f 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address/overview.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address/overview.html.eex @@ -106,7 +106,11 @@ "data-test": "transaction_hash_link" ) %> <% else %> - + <%= if system_address?(@address.hash) do %> + <%= gettext "Created by system" %> + <% else %> + + <% end %> <% end %> <% end %> 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 0dd47f2f9..0ae675997 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 @@ -117,7 +117,7 @@ <%= 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 truffle flattener.
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address_token/_tokens.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address_token/_tokens.html.eex index 529651229..a57b2a03d 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address_token/_tokens.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address_token/_tokens.html.eex @@ -8,7 +8,7 @@ ) do %> <%= token_name(@token) %> <% end %> - <%= @token.type %> - <%= @token.contract_address_hash %> + <%= convertTokenType(@token.type) %> - <%= @token.contract_address_hash %> <%= if @token.usd_value do %> <% end %> diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address_token_balance/_tokens.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address_token_balance/_tokens.html.eex index 0fa96e73b..a90affdf2 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address_token_balance/_tokens.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address_token_balance/_tokens.html.eex @@ -1,7 +1,7 @@
+ <%= "BEP2E" %> ("><%= Enum.count(@token_balances)%>) + ` <%= for token_balance <- sort_by_name(@token_balances) do %>
<%= gettext "However, in general, the" %> <%= link( gettext("custom RPC"), - to: api_docs_path(@conn, :index) + to: "/" ) %> <%= gettext " is recommended." %> <%= gettext "Anything not in this list is not supported. Click on the method to be taken to the documentation for that method, and check the notes section for any potential differences." %>

diff --git a/apps/block_scout_web/lib/block_scout_web/templates/chain/_metatags.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/chain/_metatags.html.eex index a46a91b12..26ad8e57c 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/chain/_metatags.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/chain/_metatags.html.eex @@ -1,5 +1,5 @@ <%= gettext("%{subnetwork} %{network} Explorer", subnetwork: LayoutView.subnetwork_title(), network: LayoutView.network_title()) %> -"> - +"> + diff --git a/apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex index 217880669..1ce47c1ba 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex @@ -1,33 +1,6 @@
- -
- -
- - -
- -
-
- - <%= gettext "Price" %> - - - -
-
- - <%= gettext "Market Cap" %> - - - -
-
-
@@ -100,7 +73,7 @@ diff --git a/apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex index 999a39ed1..fb791000d 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex @@ -8,80 +8,5 @@ <% end %>
- - <% other_explorers = other_explorers() %> - <% col_size = if Enum.empty?(other_explorers), do: 3, else: 2 %> - -
-
- - -
- - - <% main_nets = main_nets(other_networks()) %> - - <%= unless Enum.empty?(main_nets) do %> - - <% end %> - - <% test_nets = test_nets(other_networks()) %> - - <%= unless Enum.empty?(test_nets) do %> - - <% end %> - - <%= unless Enum.empty?(other_explorers) do %> - - <% end %> -
- - <% version = version() %> - - <%= unless ignore_version?(version) do %> - <% release_link = release_link(version) %> -
- <%= gettext("Version") %>: <%= release_link %> -
- <% end %>
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex index ce01098d4..b727e9d8e 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex @@ -11,7 +11,7 @@