咸鱼

咸鱼是以盐腌渍后,晒干的鱼

0%

在前面我们知道可以通过 truffle init 来初始化项目,但是这个只是一个智能合约相关的项目,如果我们要开发Dapp Web 应用,还得做一些配置之类的工作,所以truffle带了unbox功能,直接初始化一个集成各种配置环境的项目,如react、vue等。

在空目录下通过命令 truffle unbox [name of box] 就能生成一个开箱即用的项目。

[name of box] 的都在 github或者truffleframework 可以找到。

比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# MetaCoin 智能合约实例
$ truffle unbox metacoin-box

# 包含所有 OpenZeppelin 的教程ls
$ truffle unbox tutorialtoken-box

# 宠物商店DApp的完整项目代码
$ truffle unbox pet-shop

# 使用Webpack的前端项目,包含合约、迁移、测试、用户界面和webpack构建流水线
$ truffle unbox webpack

# 使用vue框架进行dapp开发
$ truffle unbox DOkwufulueze/eth-vue
阅读全文 »

1. keytool

JDK中keytool是一个证书管理工具,可以生成“自签名证书”,多用于Java应用,如:Tomcat。

1
2
3
4
5
6
7
8
$ keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650

***
*** (输入详细信息)
***

$ ls
keystore.p12 (生成p12格式证书)

2. openssl

数字证书管理工具openssl和keytool的区别: keytool没办法签发证书,而openssl能够进行签发和证书链的管理。

阅读全文 »

502错误修复

服务器断电关机,再开机时一般会导致 gitlab 502错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ gitlab-ctl status
run: gitaly: (pid 1072) 689s; run: log: (pid 1071) 689s
run: gitlab-monitor: (pid 1101) 689s; run: log: (pid 1090) 689s
run: gitlab-workhorse: (pid 1092) 689s; run: log: (pid 1078) 689s
run: logrotate: (pid 1115) 689s; run: log: (pid 1097) 689s
run: nginx: (pid 1091) 689s; run: log: (pid 1077) 689s
run: node-exporter: (pid 1111) 689s; run: log: (pid 1096) 689s
run: postgres-exporter: (pid 1113) 689s; run: log: (pid 1098) 689s
run: postgresql: (pid 1114) 689s; run: log: (pid 1095) 689s
run: prometheus: (pid 14267) 0s; run: log: (pid 1089) 689s
run: redis: (pid 1110) 689s; run: log: (pid 1094) 689s
run: redis-exporter: (pid 1075) 689s; run: log: (pid 1074) 689s
run: sidekiq: (pid 1076) 689s; run: log: (pid 1073) 689s
run: unicorn: (pid 14244) 1s; run: log: (pid 1079) 689s
# 尝试重启
$ gitlab-ctl restart
ok: run: gitaly: (pid 14454) 0s
ok: run: gitlab-monitor: (pid 14465) 1s
ok: run: gitlab-workhorse: (pid 14469) 0s
ok: run: logrotate: (pid 14482) 1s
ok: run: nginx: (pid 14508) 0s
ok: run: node-exporter: (pid 14514) 0s
ok: run: postgres-exporter: (pid 14519) 1s
ok: run: postgresql: (pid 14532) 0s
ok: run: prometheus: (pid 14544) 0s
ok: run: redis: (pid 14549) 0s
ok: run: redis-exporter: (pid 14558) 0s
ok: run: sidekiq: (pid 14575) 0s
ok: run: unicorn: (pid 14587) 0s

# 按照官网的建议
# 如果所有服务都正常(没有down掉)还是502错误的话,重启sidekiq
$ gitlab-ctl restart sidekiq

# 或者
$ gitlab-ctl hup unicorn

500错误修复

记录一次500错误,是由于强制关掉宿主机导致的,用502错误的修复方法无效果。

阅读全文 »

配置指南 ,这是有官方给的各种邮箱的配置示例。

阿里云企业邮箱

1
2
3
4
5
6
7
8
9
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qiye.aliyun.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "username@your domain"
gitlab_rails['smtp_password'] = "password"
gitlab_rails['smtp_domain'] = "your domain"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = true

默认使用ssl,如果不用就要加入以下配置

1
2
3
4
5
6
gitlab_rails['smtp_enable_starttls_auto'] = false
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'none'
gitlab_rails['smtp_ssl'] = false
gitlab_rails['smtp_force_ssl'] = false

阅读全文 »

要把库放在Jitpack使用,一般引用是这样子:

1
2
3
4
5
6
7
8
9
10
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}

dependencies {
implementation 'com.github.username:libraryname:version'
}

所以最好这样:

  • 仓库名称:小写,如:myview,如果名称太长,用中线分割,如:core-ktx
  • 包名:和域名一样com.github.username,如:com.github.kevinvane
    最后jitpack生成依赖引用是:
    1
    implementation 'com.github.kevinvane:myview:version'
    这样别人引用你的库,就知道是在com.github.kevinvane包下,名称为myview。

Android6.0以上才支持修改状态栏字体颜色(亮色)

1
2
3
4
5
6
7
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
this.getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
);//亮色
getWindow().setStatusBarColor(Color.WHITE);//设置状态栏背景色为白色
}

如果要适配4.4以上的,推荐用ImmersionBar

参考:

  1. AndroidStuio快速发布开源项目到Jcenter/Bintray
  2. 创建并发布一个 Android 库
  3. Android Library上传到GitHub并一键发布到Bintray或JCenter

** 本文只记录操作步骤 **
** 本文只记录操作步骤 **
** 本文只记录操作步骤 **

apikey

登录 bintray 拿到apikey,不需要创建仓库,默认已有maven/nuget等7个仓库,我们用maven就可以,当然也可以创建一个属于自己的maven仓库。

创建库项目

阅读全文 »

备份

1
$ gitlab-rake gitlab:backup:create

备份文件在 /var/opt/gitlab/backups 目录下,如:1528882180_2018_06_13_10.5.5_gitlab_backup.tar。

备份过程中此目录会生成很多临时文件,比如数据库,如果由于空间不足导致备份失败,这个目录下的文件都可以删除释放空间,当然备份成功后,临时文件都会被清除。

迁移/恢复

阅读全文 »

后来看到这篇文章 合约交互 摘录:

标准的与以太坊网络交互的方法是通过以太坊官方构建的Web3库。尽管这个库非常有用,但使用其提供接口与合约交互有些困难,特别是以太坊的新手。为降低学习曲线,Truffle使用Ether Pudding库,它也是基于Web3的基础之上,目的是为了让交互更简单。

环境

基于《6.1、基于truffle框架部署完整合约(发布Token代币).md》的环境,启动Ganache-Gui,并且用truffle编译和部署好合约。

拷贝出 abi合约地址 生成 合约实例,就可以通过 web3.js 调用合约的函数。

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 默认
$ sudo nmap 192.168.1.88

# 检查指定端口范围
$ sudo nmap -p1880-9002 192.168.1.88

# 检查指定端口,多个用逗号隔开
$ sudo nmap -p1883,9001 192.168.1.88

# 迅速检查网站是否正常运行
$ sudo nmap -sS 192.168.1.88

# 检查在目标系统上运行的服务
$ sudo nmap -sV 192.168.1.88

# 检查目标系统的打开端口
$ sudo nmap -vv 192.168.1.88

环境

全新的Ubuntu 16.04,所需编译环境:

1
$ sudo apt-get install build-essential openssl libssl-dev libc-ares-dev uuid-dev cmake -y

安装libwebsockets

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

$ wget https://warmcat.com/git/libwebsockets/snapshot/libwebsockets-3.0.0.tar.gz

$ tar -zxvf libwebsockets-3.0.0.tar.gz

$ cd libwebsockets-3.0.0

$ mkdir build

$ cd build

$ cmake ..

$ make

$ sudo make install

# 使库文件软链接立刻生效
$ sudo ldconfig

阅读全文 »

在上一篇文章《6、基于truffle框架部署合约》中,我们已经实现了部署一个简单的合约(sayhello和add),并且在控制台可以调用合约的函数。

本文将使用 《5.1、基于Ganache-Cli用Remix发布Token(代币)》 中sol代码,编译一个比较完整的合约,部署。

修改工程配置

  1. sol代码加入到工程
  2. 修改 1_initial_migration.js文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var Token = artifacts.require("./Token.sol");
    var StandardToken = artifacts.require("./StandardToken.sol");
    var TeaToken = artifacts.require("./TeaToken.sol");

    module.exports = function(deployer) {
    deployer.deploy(Migrations);
    deployer.deploy(Token);
    deployer.deploy(StandardToken);

    //四个参数,是TeaToken的构造函数参数。
    deployer.deploy(TeaToken,"10000000000000000000000","BBCoin",18,"BBC");
    };
    TeaToken的构造函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    function TeaToken(
    uint256 _initialAmount, //发行量
    string _tokenName, //token名称
    uint8 _decimalUnits, //小数位
    string _tokenSymbol //标识
    ) {
    // Give the creator all initial tokens
    balances[msg.sender] = _initialAmount;

    // Update total supply
    totalSupply = _initialAmount;

    // Set the name for display purposes
    name = _tokenName;
    // Amount of decimals for display purposes
    decimals = _decimalUnits;

    // Set the symbol for display purposes
    symbol = _tokenSymbol;
    }

编译部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ truffle compile
$
$ truffle migrate --reset
Using network 'development'.

Running migration: 1_initial_migration.js
Replacing Migrations...
... 0x026473e96e19f2a0a32bc787a9cd5ef7c29cab71e5517e803c29b18d6cb08070
Migrations: 0xe70fc286df987d4eace8dc486cc5492c950e50c6
Deploying Token...
... 0xf503e2b6663ade73b5a60ff7f6b82f6f1e87b07e2629bf5fad6a7bc654cb807b
Token: 0x75aa2709dcee2bcd4fcc530924e0fb90e83a58f5
Deploying StandardToken...
... 0x4385d77ebae77be6efe0b65cf925f40bfaa0e0f518518745a4813d92204c2271
StandardToken: 0x2e6487e4d995dbba857362c7a0542bb76a6f11ae
Deploying TeaToken...
... 0x3687702e5287e22cafd2d6ae3e41d0c3455b1306bca805541b2de174c5841a70
TeaToken: 0x6b528b7717777a90f4db0a96be268fc91610be35
Saving successful migration to network...
... 0x374db95d4ff26b0f9a817fd48dfa2e648193333091a92fb001c6338b9f2b49ee
Saving artifacts...
阅读全文 »

本文启动 ganache-cli

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ ganache-cli
Ganache CLI v6.1.0 (ganache-core: 2.1.0)

Available Accounts
==================
(0) 0xef1e0310ecf99c3808940d351b8a4bd7566d0a71
(1) 0xa91b4c17ff43421754a8b721a8e55ac2881d946b
(2) 0x0a6d612ce9d06ee9bced7395f29b0167e059207e
(3) 0xd64f06e3a98a41bea2a6fa290e742083206ee061
(4) 0xd315be81ca72314a2434df898fe962e6b53db337
(5) 0xd4b54a13c047214bfae17ee2e25bbe4891edf582
(6) 0x630b76b384c423c231bbc3384b1333369296eff9
(7) 0x5f10c0cc0a914d9e5711a4ae022c27f4be7013d4
(8) 0xd7c06d6f55c44125a11d7d203bb24c86f786b37d
(9) 0x2fc8126d7ea755089dc7337fe956f2f0369a205b

Private Keys
==================
(0) 82d925b9235dcf17d2e7cb0907084bf44fa9ce7ab31a9d2375b5db75e2da0509
(1) 3f02535f00fa0ab48c306e561491cb4e10c684cea0297ec23aa4e87322108723
(2) a0c830651cac356ce0a1a1d471ae0a77d2f0cfbb869dbd2d7650d4827becf879
(3) 60a0a77161316406a5c03453d9e85427357f4046939bd4f884561cc806a4dccf
(4) 7914c24a44119f21071b2a7da59a4b07a8c665475b995e0491bf62e7b1cc0403
(5) bc512c5af4b68021be1ea084e93acf87fd3c1dea4a3ad1eec60cc0ba408f5ac0
(6) 2f1831f2ab30d0b091a4dced5dcac68c79fad0352727a5ab4edd694c3a9d4bd7
(7) 963d08d6060e01eb9223e742f12955daf00f5cc54220001ce75353a50a017968
(8) e3d724fa1a859afda107e9be2e3b0d5703705436bae1057280b8363bc6929fd8
(9) 6a661a59913f97e6fbd9cc4d56e8fc4d6c098d7be14254d788a5917cfe498bfd

HD Wallet
==================
Mnemonic: penalty until vessel limit motor waste rule ability soft moral stem harsh
Base HD Path: m/44'/60'/0'/0/{account_index}

Listening on localhost:8545

编译合约

打开remix,一样编译三个sol代码文件(参考上文)。

部署合约

阅读全文 »

Ropsten Test Net 一样,现在我们在私有链发布一个Token,私有链前面使用了Geth来实现,本文通过 ganache来作为本地测试私有链。
ganache 是一个基于内存的以太坊链,用于本地测试,安装简单,不用去连接测试网络,省去同步以太坊区块的麻烦。

最关键是为后面的truffle框架做铺垫。

安装运行

  1. ganache 是GUI程序。(需要nodejs环境)

    下载地址 https://github.com/trufflesuite/ganache/releases

    支持Linux、Mac和Windows ,本文直接安装Windows的,启动就可以,运行后默认创建10个账号,每个账号里有100ETH的余额。

    ganache.png

    默认是127.0.0.1,只有本地能访问,修改为WLAN局域网内可以访问。

    ganache_conf.png

  2. ganache-cli 是字符终端程序(需要nodejs环境)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    $ npm install -g ganache-cli
    $ ganache-cli
    Ganache CLI v6.1.0 (ganache-core: 2.1.0)

    Available Accounts
    ==================
    (0) 0xef1e0310ecf99c3808940d351b8a4bd7566d0a71
    (1) 0xa91b4c17ff43421754a8b721a8e55ac2881d946b
    (2) 0x0a6d612ce9d06ee9bced7395f29b0167e059207e
    (3) 0xd64f06e3a98a41bea2a6fa290e742083206ee061
    (4) 0xd315be81ca72314a2434df898fe962e6b53db337
    (5) 0xd4b54a13c047214bfae17ee2e25bbe4891edf582
    (6) 0x630b76b384c423c231bbc3384b1333369296eff9
    (7) 0x5f10c0cc0a914d9e5711a4ae022c27f4be7013d4
    (8) 0xd7c06d6f55c44125a11d7d203bb24c86f786b37d
    (9) 0x2fc8126d7ea755089dc7337fe956f2f0369a205b

    Private Keys
    ==================
    (0) 82d925b9235dcf17d2e7cb0907084bf44fa9ce7ab31a9d2375b5db75e2da0509
    (1) 3f02535f00fa0ab48c306e561491cb4e10c684cea0297ec23aa4e87322108723
    (2) a0c830651cac356ce0a1a1d471ae0a77d2f0cfbb869dbd2d7650d4827becf879
    (3) 60a0a77161316406a5c03453d9e85427357f4046939bd4f884561cc806a4dccf
    (4) 7914c24a44119f21071b2a7da59a4b07a8c665475b995e0491bf62e7b1cc0403
    (5) bc512c5af4b68021be1ea084e93acf87fd3c1dea4a3ad1eec60cc0ba408f5ac0
    (6) 2f1831f2ab30d0b091a4dced5dcac68c79fad0352727a5ab4edd694c3a9d4bd7
    (7) 963d08d6060e01eb9223e742f12955daf00f5cc54220001ce75353a50a017968
    (8) e3d724fa1a859afda107e9be2e3b0d5703705436bae1057280b8363bc6929fd8
    (9) 6a661a59913f97e6fbd9cc4d56e8fc4d6c098d7be14254d788a5917cfe498bfd

    HD Wallet
    ==================
    Mnemonic: penalty until vessel limit motor waste rule ability soft moral stem harsh
    Base HD Path: m/44'/60'/0'/0/{account_index}

    Listening on localhost:8545

参考《以太坊发token教程》
本文只记录操作流程,在Ropsten Test Net下操作(非私有链),用MetaMask和Remix-ide来完成发行部署。

准备工作

  1. 安装MetaMask钱包,在Ropsten网络创建和登录账号( 0xBCdc478c31Bb569AFc9ed986E869f62A117a4Cae ),这个账号将会是我们的智能合约的所有者,token发行数量都是存入到这个账号.
  2. 在MetaMask的Buy按钮,去领一些以太坊测试币(request 1 eth from faucet 按钮点一次领一个币),用于部署合约。

编写Token的合约代码

接口(ERC20标准)

阅读全文 »