https://github.com/almindor/etherwall
Ethereum QT5 Wallet
Etherwall is a free software wallet/front-end for Ethereum.
https://github.com/almindor/etherwall
Ethereum QT5 Wallet
Etherwall is a free software wallet/front-end for Ethereum.
git clone https://github.com/GetScatter/ScatterDesktop.git
首先确认下当前机器安装的node的版本为v9.8.0
,否则无法编译通过。切换版本,可参考《mac os 安装指定版本 node》
进入源代码目录,安装依赖
yarn install
编译源码
npm run build
生成对应平台安装包
mac:
npm run release-mac
windows:
npm run release-windows
linux:
npm run release-linux
suroudeMacBook-Pro:ScatterDesktop surou$ npm run release-mac
> scatter@9.5.0 release-mac /Users/surou/Documents/github/ScatterDesktop
> electron-builder --mac
• electron-builder version=20.28.4
• loaded configuration file=package.json ("build" field)
• electron-rebuild not required if you use electron-builder, please consider to remove excess dependency from devDependencies
To ensure your native dependencies are always matched electron version, simply add script `"postinstall": "electron-builder install-app-deps" to your `package.json`
• writing effective config file=release/builder-effective-config.yaml
• rebuilding native production dependencies platform=darwin arch=x64
• packaging platform=darwin arch=x64 electron=2.0.11 appOutDir=release/mac
• skipped macOS application code signing reason=cannot find valid "Developer ID Application" identity or custom non-Apple code signing certificate, see https://electron.build/code-signing allIdentities=
0 identities found
Valid identities only
0 valid identities found
• building target=macOS zip arch=x64 file=release/mac-scatter-9.5.0.zip
• building target=DMG arch=x64 file=release/mac-scatter-9.5.0.dmg
• building block map blockMapFile=release/mac-scatter-9.5.0.dmg.blockmap
-cannot find specified resource "static/icons/icon.png
cannot find specified resource "static/icons/icon.png", nor relative to "/Users/surou/Documents/github/ScatterDesktop/build", neither relative to project dir ("/Users/surou/Documents/github/ScatterDesktop"),
手动将build/icon.png
复制到static/icons
npm install --global windows-build-tools
yarn install
npm run build
npm run release-win
c:\users\surou\desktop\scatterdesktop\node_modules\keccak\src\libkeccak\KeccakSponge.h : warning C4819: ���ļ����������ڵ�ǰ����ҳ(936)�б�ʾ���ַ����뽫���ļ�����Ϊ Unicode ��ʽ�Է�ֹ���ݶ�ʧ (����Դ�ļ� ..\src\libkeccak\KeccakSponge.c) [C:\Users\Surou\Desktop\ScatterDesktop\node_modules\keccak\build\keccak.vcxproj]
C:\Users\Surou\.electron-gyp\.node-gyp\iojs-2.0.11\x64\iojs.lib : fatal error LNK1106: �ļ���Ч���������: �����ҵ� 0x29851C [C:\Users\Surou\Desktop\ScatterDesktop\node_modules\keccak\build\keccak.vcxproj]
gyp ERR! build error
gyp ERR! stack Error: `C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe` failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (C:\Users\Surou\Desktop\ScatterDesktop\node_modules\node-gyp\lib\build.js:262:23)
gyp ERR! stack at ChildProcess.emit (events.js:180:13)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:209:12)
gyp ERR! System Windows_NT 10.0.16299
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\Surou\\Desktop\\ScatterDesktop\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" "--target=2.0.11" "--arch=x64" "--dist-url=https://atom.io/download/electron" "--build-from-source"
gyp ERR! cwd C:\Users\Surou\Desktop\ScatterDesktop\node_modules\keccak
gyp ERR! node -v v9.8.0
gyp ERR! node-gyp -v v3.8.0
解决方案:删除 C:\Users\Surou\.electron-gyp
参考:https://github.com/electron/electron-rebuild/issues/163
Error: C:\Users\Surou\Desktop\ScatterDesktop\node_modules\app-builder-bin\win\x64\app-builder.exe exited with code 1
at ChildProcess.childProcess.once.code (C:\Users\Surou\Desktop\ScatterDesktop\node_modules\builder-util\src\util.ts:254:14)
at Object.onceWrapper (events.js:272:13)
at ChildProcess.emit (events.js:180:13)
at maybeClose (internal/child_process.js:936:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:220:5)
解决方案:删除node_modules
,重新yarn install
参考:https://github.com/electron-userland/electron-builder/issues/2002
Cannot read file C:\Users\Surou\Desktop\ScatterDesktop\node_modules\babylon\.bin\babylon: Error: ENOENT: no such file or directory, open 'C:\Users\Surou\Desktop\ScatterDesktop\node_modules\babylon\.bin\babylon'
at w (C:\Users\Surou\Desktop\ScatterDesktop\node_modules\app-builder-lib\src\asar\asarUtil.ts:201:11)
at writeStream.write (C:\Users\Surou\Desktop\ScatterDesktop\node_modules\app-builder-lib\src\asar\asarUtil.ts:203:43)
at afterWrite (_stream_writable.js:473:3)
at onwrite (_stream_writable.js:464:7)
at fs.write (fs.js:2252:5)-win: `electron-builder --win`
at FSReqWrap.wrapper [as oncomplete] (fs.js:707:5)
解决方案:安装yarn-1.9.4版本
参考:https://github.com/GetScatter/ScatterDesktop/issues/165
dist
npm run build
,在运行npm run release-win
npm install -g asar
asar extract app.asar ./
由于编译ScatterDesktop时,使用brew install node
安装的node为最新版本v11+
,由于对应的源代码没有做兼容,导致编译出错。所以才有此文,需要安装对应需要的版本。
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash
此时会生成 ~/.bash_profile,添加nvm 到环境变量。
刷新环境变量,使其生效
source ~/.bash_profile
此时打开终端,输入nvm
会输出,对应的帮助信息。
所需命令如下
$ nvm ls-remote 查看 所有的node可用版本
$ nvm install xxx 下载你想要的版本
$ nvm use xxx 使用指定版本的node
$ nvm alias default xxx 每次启动终端都使用该版本的node
由于我们目前需要的是 node v9.8.0
所以执行命令如下
$ nvm install v9.8.0
$ nvm use v9.8.0
$ nvm alias default v9.8.0
v9.8.0
node -v
演示的系统为 Ubuntu 18.04 LTS,内存8g以上,硬盘300g+
我们以EOS-Mainnet仓库部署,(EOS-Mainnet是部署在目前EOS主网的版本,等于再次在EOSIO仓库测试过的版本,更稳定。)
开始clone 代码
//如果没有安装git,先安装
$sudo apt install git
$git clone https://github.com/EOS-Mainnet/eos.git
切换到最新分支(当前的EOS最新版本为 v1.4.1)
$git fetch
$git checkout -b mainnet-1.4.1
编译代码
$git submodule update --init --recursive
$./eosio_build.sh -s EOS
漫长等待,编译成功
执行安装
$sudo ./eosio_install.sh
安装成功后查看版本
$ nodeos -v
mainnet-1.4.1
cleos wallet create --to-console
记得保存返回的钱包解锁密码,丢失无法找回钱包内数据
cleos wallet create_key
创建的密钥会自动添加到钱包,如需查看,可执行
cleos wallet private_keys
输入钱包解锁密码查看
1-5a-z 字符12位,准备好,后面config配置中producer-name
用到。
选定一个存储位置,用于存储EOS节点配置和节点数据。选定的磁盘存储一般要在300G以上,防止后期不够。
假设我们选定的磁盘位置为/data
然后在当前目录下,新建两个目录
进入eos-tools文件夹
genesis.json
文件直接生成genesis.json
文件
nodeos --extract-genesis-json genesis.json
config.ini
文件创建config.ini
文件,并输入以下信息
//修改本地节点rpc 访问端口,默认为8888,修改后,本地访问方式为`cleos -u http://127.0.0.1:8000 get info`
http-server-address = 0.0.0.0:8000
//bp节点间的访问地址,当前节点的p2p-peer-address为,服务器IP或者域名,加上下面设置的端口
p2p-listen-endpoint = 0.0.0.0:8001
#设置一个自己的bp名字
agent-name = "EOS Shen Si"
//创世节点名字必须为eosio
producer-name = eosio
#创建一对密钥 创世节点不能修改私钥
signature-provider = EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV=KEY:5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
#创世节点才需要,其他bp不需要开启
enable-stale-production = true
#添加一些稳定的其他bp节点
# p2p-peer-address =
#以下为通用设置
wasm-runtime = wabt
pause-on-startup = false
abi-serializer-max-time-ms = 3000
chain-state-db-size-mb = 65535
reversible-blocks-db-size-mb = 2048
contracts-console = false
p2p-max-nodes-per-host = 1
allowed-connection = any
max-clients = 100
network-version-match = 1
sync-fetch-span = 500
#filter-on = *
connection-cleanup-period = 30
max-implicit-request = 1500
http-validate-host = false
access-control-allow-origin = *
access-control-allow-headers = *
access-control-allow-credentials = false
verbose-http-errors = true
#添加插件
plugin = eosio::chain_api_plugin
plugin = eosio::history_plugin
plugin = eosio::history_api_plugin
plugin = eosio::producer_plugin
$EOS_TOOLS_DIR
为eos-tools的当前目录,本例中路径为/data/eos-tools
$EOS_DATA_DIR
为eos data的当前目录,本例中路径为/data/data
nodeos --genesis-json $EOS_TOOLS_DIR/genesis.json --max-irreversible-block-age 108000000 --data-dir $EOS_DATA_DIR --config-dir $EOS_TOOLS_DIR --delete-all-blocks
如果此时是创世节点,此时已开始出块。
5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
到钱包cleos wallet import
先创建10对密钥,用于创建前期10个系统的内置账户
cleos wallet create_key
执行10次
账户名 | 公钥 | 私钥 |
---|---|---|
eosio.token | EOS5rNiix2ENyUcvGo5pCr7yUukkhCUHySYfcMpFGNH18XERuf9t5 | |
eosio.bpay | EOS7YEYexP3yQtddnQHJGV4CDLUF58RkFTDNUZR5MPmD9jx1xFH8f | |
eosio.msig | EOS5SoN8xuQBCA5vBcRZXiVYA9xjkShaVN3UpsMngv1X2dhHojAS4 | |
eosio.names | EOS6Q44xh1p35ZkVkfSAguWLPJiqJVCi2B4AuGsxVwchKrKHKkf9T | |
eosio.ram | EOS81nArYKAitRN1h2GUCCNZWS6zArKzrg1JvcgC5zyhFAumQRgrR | |
eosio.ramfee | EOS8HhotHdovvtC1RR5G7bPRgLaHXkFbMGbSfwKKrtkQspy1rapy3 | |
eosio.saving | EOS85QMTp1Xm71jCAYYvVhm3dxmxZuobUEHxe1wLNb8qL52kmrfwX | |
eosio.stake | EOS5USZ8g5p3fU965ByvhL8AgfXfWUbeDHXjySe2QiG1wcz5So9KR | |
eosio.vpay | EOS8Qk7vEPme8huxpqa4mS9jfuDriQrpM6MJjFDvcvJfiPaKfypR6 | |
eosio.sudo | EOS8Qk7vEPme8huxpqa4mS9jfuDriQrpM6MJjFDvcvJfiPaKfypR6 |
进入eos/build/contracts
cleos -u http://127.0.0.1:8000 set contract eosio eosio.bios/ -p eosio
cleos -u http://127.0.0.1:8000 create account eosio eosio.token EOS5rNiix2ENyUcvGo5pCr7yUukkhCUHySYfcMpFGNH18XERuf9t5 EOS5rNiix2ENyUcvGo5pCr7yUukkhCUHySYfcMpFGNH18XERuf9t5
cleos -u http://127.0.0.1:8000 create account eosio eosio.bpay EOS7YEYexP3yQtddnQHJGV4CDLUF58RkFTDNUZR5MPmD9jx1xFH8f EOS7YEYexP3yQtddnQHJGV4CDLUF58RkFTDNUZR5MPmD9jx1xFH8f
cleos -u http://127.0.0.1:8000 create account eosio eosio.msig EOS5SoN8xuQBCA5vBcRZXiVYA9xjkShaVN3UpsMngv1X2dhHojAS4 EOS5SoN8xuQBCA5vBcRZXiVYA9xjkShaVN3UpsMngv1X2dhHojAS4
cleos -u http://127.0.0.1:8000 create account eosio eosio.names EOS6Q44xh1p35ZkVkfSAguWLPJiqJVCi2B4AuGsxVwchKrKHKkf9T EOS6Q44xh1p35ZkVkfSAguWLPJiqJVCi2B4AuGsxVwchKrKHKkf9T
cleos -u http://127.0.0.1:8000 create account eosio eosio.ram EOS81nArYKAitRN1h2GUCCNZWS6zArKzrg1JvcgC5zyhFAumQRgrR EOS81nArYKAitRN1h2GUCCNZWS6zArKzrg1JvcgC5zyhFAumQRgrR
cleos -u http://127.0.0.1:8000 create account eosio eosio.ramfee EOS8HhotHdovvtC1RR5G7bPRgLaHXkFbMGbSfwKKrtkQspy1rapy3 EOS8HhotHdovvtC1RR5G7bPRgLaHXkFbMGbSfwKKrtkQspy1rapy3
cleos -u http://127.0.0.1:8000 create account eosio eosio.saving EOS85QMTp1Xm71jCAYYvVhm3dxmxZuobUEHxe1wLNb8qL52kmrfwX EOS85QMTp1Xm71jCAYYvVhm3dxmxZuobUEHxe1wLNb8qL52kmrfwX
cleos -u http://127.0.0.1:8000 create account eosio eosio.stake EOS5USZ8g5p3fU965ByvhL8AgfXfWUbeDHXjySe2QiG1wcz5So9KR EOS5USZ8g5p3fU965ByvhL8AgfXfWUbeDHXjySe2QiG1wcz5So9KR
cleos -u http://127.0.0.1:8000 create account eosio eosio.upay EOS8Qk7vEPme8huxpqa4mS9jfuDriQrpM6MJjFDvcvJfiPaKfypR6 EOS8Qk7vEPme8huxpqa4mS9jfuDriQrpM6MJjFDvcvJfiPaKfypR6
cleos -u http://127.0.0.1:8000 create account eosio eosio.sudo EOS8Qk7vEPme8huxpqa4mS9jfuDriQrpM6MJjFDvcvJfiPaKfypR6 EOS8Qk7vEPme8huxpqa4mS9jfuDriQrpM6MJjFDvcvJfiPaKfypR6
cleos -u http://127.0.0.1:8000 set contract eosio.token eosio.token
cleos -u http://127.0.0.1:8000 push action eosio.token create '["eosio","10000000000.0000 EOS",0,0,0]' -p eosio.token
cleos -u http://127.0.0.1:8000 push action eosio.token issue '["eosio","1000000000.0000 EOS","issue"]' -p eosio
cleos -u http://127.0.0.1:8000 get currency balance eosio.token eosio
应返回10000000000.0000 EOS
cleos -u http://127.0.0.1:8000 set contract eosio eosio.msig -p eosio
cleos -u http://127.0.0.1:8000 push action eosio setpriv '{"account": "eosio.msig", "is_priv": 1}' -p eosio
cleos -u http://127.0.0.1:8000 set contract eosio eosio.system -p eosio
cleos -u http://127.0.0.1:8000 set contract eosio eosio.sudo -p eosio
cleos -u http://127.0.0.1:8000 push action eosio setpriv '{"account": "eosio.sudo", "is_priv": 1}' -p eosio
cleos system newaccount eosio eosio.bp1 EOS7mcXeVUSLCZxEf8eBPm2MbmiswNovoB6rk71pPqaZoxwSAeK7b EOS7mcXeVUSLCZxEf8eBPm2MbmiswNovoB6rk71pPqaZoxwSAeK7b --stake-net '50.00 EOS' --stake-cpu '50.00 EOS' --buy-ram-kbytes 10000
cleos system newaccount eosio eosio.bp2 EOS6wLrhcEQDZJvfZSCgVkFzsKcv34XTsTTjXXQZajWaBbEhvLPMg EOS6wLrhcEQDZJvfZSCgVkFzsKcv34XTsTTjXXQZajWaBbEhvLPMg --stake-net '50.00 EOS' --stake-cpu '50.00 EOS' --buy-ram-kbytes 10000
cleos system newaccount eosio eosio.bp3 EOS6u8i7rknHyAd7AdziWSnEsAbyJHA3U9So4R8p2z58cA1KeEDv2 EOS6u8i7rknHyAd7AdziWSnEsAbyJHA3U9So4R8p2z58cA1KeEDv2 --stake-net '50.00 EOS' --stake-cpu '50.00 EOS' --buy-ram-kbytes 10000
cleos -u http://127.0.0.1:8000 get account eosio.bp1
cleos -u http://127.0.0.1:8000 get account eosio.bp2
cleos -u http://127.0.0.1:8000 get account eosio.bp3
确认创建ok
进入eos-tools文件夹
genesis.json
文件将创世节点的genesis.json
文件,复制到此目录
config.ini
文件将创世节点的config.ini
复制到此目录,并修改以下信息
agent-name = "节点的名称,用于信息展示"
producer-name = 节点的账户名
signature-provider = 节点的公钥+私钥,(此配置妥善保存,别手误上传)
enable-stale-production = false
p2p-peer-address = 添加其他的节点地址
$EOS_TOOLS_DIR
为eos-tools的当前目录,本例中路径为/data/eos-tools
$EOS_DATA_DIR
为eos data的当前目录,本例中路径为/data/data
nodeos --genesis-json $EOS_TOOLS_DIR/genesis.json --max-irreversible-block-age 108000000 --data-dir $EOS_DATA_DIR --config-dir $EOS_TOOLS_DIR --delete-all-blocks
此时从节点已经接收来自eosio创世节点的数据。
创世节点,先把大于15%主网总发行量,分成当前启动主网节点数份数,目前为了好记,直接一人转100000000.0000 EOS
cleos -u http://127.0.0.1:8000 push action eosio.token transfer '["eosio", "eosio.bp1","100000000.0000 EOS","vote"]' -p eosio
cleos -u http://127.0.0.1:8000 push action eosio.token transfer '["eosio", "eosio.bp2","100000000.0000 EOS","vote"]' -p eosio
cleos -u http://127.0.0.1:8000 push action eosio.token transfer '["eosio", "eosio.bp3","100000000.0000 EOS","vote"]' -p eosio
cleos -u http://127.0.0.1:8000 system delegatebw eosio.bp* eosio.bp* '25000000.0000 EOS' '25000000.0000 EOS'
cleos -u http://127.0.0.1:8000 system regproducer eosio.bp* 节点公钥 节点的网址
cleos -u http://127.0.0.1:8000 system voteproducer prods eosio.bp* eosio.bp*
cleos -u http://127.0.0.1:8000 get schedule
此时 eosio.bp1-3,三个节点应该都已经在出块了。
cleos push action eosio updateauth '{"account": "'eosio.bpay'", "permission": "active", "parent": "owner", "auth":{"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": active}}]}}' -p eosio.bpay@active
cleos push action eosio updateauth '{"account": "'eosio.bpay'", "permission": "owner", "parent": "", "auth":{"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio", "permission": active}}]}}' -p eosio.bpay@owner
其他账户eosio.msig eosio.names eosio.ram eosio.ramfee eosio.saving eosio.stake eosio.token eosio.vpay eosio.sudo
同上
cleos push action eosio updateauth '{"account": "eosio", "permission": "active", "parent": "owner", "auth":{"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio.prods", "permission": active}}]}}' -p eosio@active
cleos push action eosio updateauth '{"account": "eosio", "permission": "owner", "parent": "", "auth":{"threshold": 1, "keys": [], "waits": [], "accounts": [{"weight": 1, "permission": {"actor": "eosio.prods", "permission": active}}]}}' -p eosio@owner
nodeos --max-transaction-time 1000 --max-irreversible-block-age 108000000 --data-dir $EOS_DATA_DIR --config-dir $EOS_TOOLS_DIR
nodeos --hard-replay-blockchain --wasm-runtime wavm --max-irreversible-block-age 108000000 --data-dir $EOS_DATA_DIR --config-dir $EOS_TOOLS_DIR
* soft stack 64000
root soft stack 64000
对于目前EOS 开发现状,想要做一款基本的Dapp,需要以下人员和配备
先说这么多,普通的互联网公司,已经懵了。。。太多的区块链知识,以及EOS相关的,很多公司很难招到相关人员,或者目前公司的规划不了解区块链,很难明确是不是需要做Dapp。
要说做一个传统的web,每个互联网公司都能分分钟做出来,那如何让这些人也能尽量顺畅的做Dapp呢?
下面我们针对上面的吐槽,挨个试着简化。
所以,人员配备可以精简到 一个前端,一个中级的c++开发。
硬件配备
三方提供数据查询支持
软件配备
1.浏览器运行
提供一款基于Scatter的优化版本
2.App运行
合作接入三方的App
综上来看,大部分的难度,还是在全节点维护,以及链上数据查询方面,投入较大。
期望的EOS Dapp开发环境
最后想说EOS加油,社区加油。