Skip to content
/ apps Public
forked from polkadot-js/apps

Basic Polkadot/Substrate UI for interacting with a node. This is the main user-facing application, allowing access to all features available on Substrate chains.

License

Notifications You must be signed in to change notification settings

199305a/apps

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

polkadotjs license maintainability

@polkadot/apps

A Portal into the Polkadot and Substrate networks. Provides a view and interaction layer from a browser. portal 门户 This can be accessed as a hosted application via https://polkadot.js.org/apps/ or you can access the IPFS hosted version via https://polkadot.js.org/apps/ipfs (via accessed 通道,途径 hash) or https://dotapps.io (via ipns) to explore any of the supported Polkadot and Substrate chains. explore 探索 If you run one or more IPFS node(s), pinning the UI (which only gets updated on releases) will make it faster for you and others. You can find details about that pinning 固定大头针 below in the IPFS chapter below.

Important If you are a chain developer and would like to add support for your chain to the UI, all the local configuration (API types, settings, logos) can be customized in the apps-config package, complete with instructions of what goes where.

overview

The repo is split into a number of packages, each representing an application. These are - representing 代表

  • apps This is the main entry point. It handles the selection sidebar and routing to the specific application being displayed. entry 进入 handles 把手 柄 specific特定的

  • apps-electron Desktop app running apps.

  • page-accounts A basic account management app.

  • page-address-book A basic address management app.

  • page-democracy A basic voting app, allowing votes on activate proposals and referenda. democracy 民主 proposals提议 referendum公投

  • page-explorer A simple block explorer. It only shows the most recent blocks, updating as they become available. 一有可用就更新

  • page-extrinsics Submission of extrinsics to a node. extrinsic 非固有的 Submission 提交 呈递

  • page-js An online code editor with @polkadot-js/api access to the currently connected node. node 节点 currently 当前的

  • page-settings A basic settings management app, allowing choice of language, node to connect to, and theme

  • page-staking A basic staking management app, allowing staking and nominations. stake 股份 股本 nomination 提名 推荐

  • page-storage A simple node storage query application. Multiple queries can be queued and updates as new values become available. query 查询 queued 排队

  • page-toolbox Submission of raw data to RPC endpoints and utility hashing functions. endpoint 终点 目标

  • page-transfer A basic account management app, allowing transfer of Units/DOTs between accounts.

In addition the following libraries are also included in the repo. These are to be moved to the @polkadot/ui repository once it reaches a base level of stability and usability. (At this point with the framework being tested on the apps above, it makes development easier having it close)

  • react-components A reactive (using RxJS) application framework with a number of useful shared components. reactive 反应的 回应的 shared 共享
  • react-signer Signer implementation for apps.
  • react-query Base components that use the RxJS Observable APIs Observable 观察

Development

Contributions are welcome! contribution 捐赠 To start off, this repo (along with others in the @polkadot family) uses yarn workspaces to organize the code. As such, after cloning dependencies should be installed via yarn, not via npm, the latter will result in broken dependencies. via 通过 To get started -

  1. Clone the repo locally, via git clone https://github.com/polkadot-js/apps <optional local path>
  2. Ensure that you have a recent LTS version of Node.js, for development purposes Node >=10.13.0 is recommended. recent 最近的 recommend 推荐
  3. Ensure that you have a recent version of Yarn, for development purposes Yarn >=1.10.1 is required.
  4. Install the dependencies by running yarn
  5. Ready! Now you can launch the UI (assuming you have a local Polkadot Node running), via yarn run start assum假如
  6. Access the UI via http://localhost:3000

Docker

You can run a docker container via -

docker run --rm -it --name polkadot-ui -e WS_URL=ws://someip:9944 -p 80:80 jacogr/polkadot-js-apps:latest

To build a docker container containing local changes -

docker build -t jacogr/polkadot-js-apps .

When using these Docker commands, you can access the UI via http://localhost:80 (or just http://localhost)

IPFS

IPFS allows sharing files in a decentralized manner in a similar fashion the polkadot network exchanges blocks. IPFS works best when many nodes seed the same data. manner 方式 similar 类似 fashion 类似 Nodes can seed specific data by pinning them. seed 种子 You can pin with the following command:

macos brew install jq

curl -s https://polkadot.js.org/apps/ipfs/pin.json | jq -jr .IpfsHash | xargs -0 -I CID ipfs pin add --progress CID

Here is a script you can save as /usr/local/bin/polkadotjs-ipfs-pin.sh:

#!/usr/bin/env bash

IPFS='/usr/local/bin/ipfs'
curl -s https://polkadot.js.org/apps/ipfs/pin.json | jq -jr .IpfsHash | xargs -0 -I CID $IPFS pin add --progress CID

I suggest to run the script once. The output should be similar to (the CID/Hash will very likely be different though): suggest 提议 though 尽管

$ /usr/local/bin/polkadotjs-ipfs-pin.sh
pinned QmNYAbzaE8kRAf68YiN3ZuUxgdwroeav3JhicsHsG5b2oW recursively

Now that you know the CID (hash), you can check whether the data is already pinned or not:

$ ipfs pin ls | grep QmNYAbzaE8kRAf68YiN3ZuUxgdwroeav3JhicsHsG5b2oW
QmNYAbzaE8kRAf68YiN3ZuUxgdwroeav3JhicsHsG5b2oW recursive

Now that we know it works, we can automate that with a cron task. Run crontab -e. cron 计划 If you see only comments, append the following to the file and save: comment 评论 意见

SHELL=/bin/bash
HOME=/
0 * * * * /usr/local/bin/polkadotjs-ipfs-pin.sh >/dev/null 2>&1

Now our script will run every hours at minute '0' (8:00, 9:00, etc...). To check, we can unpin temporarily: temporarily 临时 暂时

$ ipfs pin rm QmNYAbzaE8kRAf68YiN3ZuUxgdwroeav3JhicsHsG5b2oW
unpinned QmNYAbzaE8kRAf68YiN3ZuUxgdwroeav3JhicsHsG5b2oW

Now asking for the CID confirms that is it not there. confirm 确定

$ ipfs pin ls QmNYAbzaE8kRAf68YiN3ZuUxgdwroeav3JhicsHsG5b2oW
Error: path 'QmNYAbzaE8kRAf68YiN3ZuUxgdwroeav3JhicsHsG5b2oW' is not pinned

Wait until the your cron task runs and try again:

$ ipfs pin ls QmNYAbzaE8kRAf68YiN3ZuUxgdwroeav3JhicsHsG5b2oW
QmNYAbzaE8kRAf68YiN3ZuUxgdwroeav3JhicsHsG5b2oW recursive

Tada! This is now automatic and you may forget it. tada 然后 If you are curious and want to know how many people seed the UI on IPFS, here is the magic command (it may take a while to return the answer as ipfs will search curious 好奇的 for about 1 minute):

ipfs dht findprovs QmTejwB7mJPBHBoqubjzHSgSxfLMcjnZA3LFefqoQc87VJ | wc -l

If you are current about the content of what you just pinned, you may use the following command: current 现在的

$ ipfs ls QmTejwB7mJPBHBoqubjzHSgSxfLMcjnZA3LFefqoQc87VJ
QmPJGyqVCcXm238noz7TZDByyGa35qqc8g6sfyXF3KDXZ3 38078   favicon.ico
QmdouVsVE9rMVB84Cy1ehVi1LAGW1fKcqqQxSEjgxJrv7H 668     index.html
QmWHcGf1JCFZCYjZsw52vM5RiJVbcNpX1fo2NyoBKBvtuf -       ipfs/
QmT6NwDsJzMyBs6bMq845nMumeJWbixBfNXA9hdAhAMdSG -       locales/
QmcgiZpwvpT1E1dkSS3zr5je89rZRVocNKPebgWhn3JVTC 2178582 main.ce05dfca.js
QmdnEtuhFDyw5Tjr82bFPzyveFrbkYjJAnUvBvzwT18YGG 337     manifest.json
QmW7gDKHbmtD7sRTqsvyo84bDpyYPZR3w1wQo8pme2q5HC -       next/
Qmd8UnRQiBobm4qb6dhiC1HoQ7SvwZrWJenoN3JPEV3iiF 480594  polkadotjs.3af757ad.js
QmUfXPMfNys8Y8dekuankBx7BHiSAjALCpBDKH6F5DdcNm 628284  react.0cecb00d.css
QmSEgXdQbC1ek9Td1mHy3BRvJpfWHm9zQYegTgAUj1QC4g 924156  react.8f083b49.js
QmfGBgFe2aqf83Wv21m9k5DH2ew89CDj4tydoxJWdK6NNL 1552    runtime.3d77e510.js
QmYPa8jcHH7gfopMALr5XTW4i1QM2xgVBe3NeP11y3tErA -       static/
QmeYBC5EgbccC8NEwXC2rvbd93YiHtTM5xYzqCDohXerDf 859984  vendor.8b793a81.js

Desktop App

The main advantage of using Desktop App is that it by default stores encrypted accounts on the filesystem instead of browser's local storage. advantage 优势 好处 Local storage is susceptible to attacks using XSS (Cross-Site Scripting). There's no such risk when with files stored on disk. susceptible 易受伤害的 The desktop app uses the Electron framework. It provides the same features as web app, the only difference being different account storage.

The accounts are stored in the following directories: directories 册

  • Mac: ~/Library/Application Support/polkadot-apps/polkadot-accounts
  • Linux: ~/.config/polkadot-apps/polkadot-accounts (or $XDG_CONFIG_HOME/polkadot-apps/polkadot-accounts if $XDG_CONFIG_HOME is defined)
  • Windows: %APPDATA%\polkadot-apps\polkadot-accounts

For more details on the desktop app, head over to Electron package README.

About

Basic Polkadot/Substrate UI for interacting with a node. This is the main user-facing application, allowing access to all features available on Substrate chains.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 98.5%
  • JavaScript 1.3%
  • Other 0.2%