更多精彩内容,关注微信公众号“技术哥”。
pdf下载,请加入星球:“区块链开发指南”
- Mac下安装的准备工作
Homebrew安装
我们安装Homebrew是为了安装星云链开发环境时更方便快捷。
第1步:安装
命令行输入
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
复制代码
回车(这里有提示目录不存在,要创建需要按回车键)
安装过程中如果出现:
Warning: /usr/local/bin is not in your PATH.
复制代码
则需要将/usr/local/bin添加到环境变量,方法如下:
vi ~/.bash_profile
复制代码
打开.bash_profile文件,按"i"键可进行编辑,添加:
export PATH=$PATH:/usr/local/bin
复制代码
然后按"Esc"键,再输入":wq",再按回车键保存,然后执行如下命令,重新加载让配置生效:
source ~/.bash_profile
复制代码
第2步:检测是否安装成功
命令行输入
brew help
复制代码
如果出现以下信息,表示安装成功
Example usage:
brew search [TEXT|/REGEX/]
brew info [FORMULA...]
brew install FORMULA...
brew update
brew upgrade [FORMULA...]
brew uninstall FORMULA...
brew list [FORMULA...]
...
复制代码
- Mac下安装星链云
版本:1.9.2
Golang环境搭建
打开.bash_profile文件,按i键编辑
vim ~/.bash_profile
复制代码
新增如下内容:
brew install go
export GOPATH=/Users/user/go-workspace
复制代码
让配置生效:
source ~/.bash_profile
复制代码
编译星云链
下载源码
可以使用如下指令直接下载最新版本的星云链源码。
# 进入工作目录
mkdir -p $GOPATH/src/github.com/nebulasio
cd $GOPATH/src/github.com/nebulasio
# 下载源码
git clone https://github.com/nebulasio/go-nebulas.git
# 进入项目目录
cd go-nebulas
# 切换到最稳定的master分支
git checkout master
复制代码
安装rocksdb依赖库
可以直接通过Homebrew安装,运行brew install rocksdb
安装Go依赖库
通过Homebrew直接安装并升级Dep
brew install dep
brew upgrade dep
复制代码
下载GO三方库
cd $GOPATH/src/github.com/nebulasio/go-nebulas
make dep
复制代码
若不成功或速度太慢可
wget http://ory7cn4fx.bkt.clouddn.com/vendor.tar.gz
复制代码
解压开
cd $GOPATH/src/github.com/nebulasio/go-nebulas
tar zxf vendor.tar.gz
复制代码
安装chrome V8依赖库
cd $GOPATH/src/github.com/nebulasio/go-nebulas
make deploy-v8
复制代码
编译可执行文件
cd $GOPATH/src/github.com/nebulasio/go-nebulas
make build
复制代码
编译成功信息:
- 运行星链云
创世区块
在项目根目录conf/default/genesis.conf下,配置创世区块,此次,我们使用默认配置即可,暂不用修改。
meta {
# 每条链的唯一标识
# 每个区块和交易只会属于一条唯一的链,保证安全性
# 对于主网,chain_id=1;对于测试网,chain_id=1001
chain_id: 100
}
consensus {
# 在贡献度证明(PoD)被充分验证前,星云链采用DPoS共识算法
# DPoS共识中,21个人组成一个朝代
# 每隔一段时间都会切换朝代,每个朝代内,21个矿工轮流出块
# 由于DPoS只是过渡方案,所以暂时不开放给公众挖矿,即当前版本朝代不会发生变更
dpos {
# 初始朝代,包含21个初始矿工地址
dynasty: [
[ miner address ],
...
]
}
}
# 预分配的代币
token_distribution [
{
address: [ allocation address ]
value: [ amount of allocation tokens ]
},
...
]
复制代码
星云节点配置
在项目根目录下的conf/default/config.conf,配置星云节点,此次,我们使用默认配置即可,暂不用修改。
# 网络配置
network {
# 对于全网第一个节点,不需要配置seed
# 否则,其他节点启动时需要配置seed,seed节点将会把网络中其他节点的路由信息同步给刚启动的节点
# 可以配置多个seed, ["...", "..."]
seed: ["/ip4/127.0.0.1/tcp/8680/ipfs/QmP7HDFcYmJL12Ez4ZNVCKjKedfE7f48f1LAkUc3Whz4jP"]
# 节点监听网络消息端口,可以配置多个
listen: ["0.0.0.0:8680"]
# 网络私钥,用于确认身份节点
# private_key: "conf/network/id_ed25519"
}
# 链配置
chain {
# 链的唯一标识
chain_id: 100
# 数据存储地址
datadir: "data.db"
# 账户keystore文件存储地址
keydir: "keydir"
# 创世区块配置
genesis: "conf/default/genesis.conf"
# 签名算法,请勿修改
signature_ciphers: ["ECC_SECP256K1"]
# 矿工地址,矿工的keystore文件需要放置在配置的keydir下
miner: "n1XkoVVjswb5Gek3rRufqjKNpwrDdsnQ7Hq"
# Coinbase地址,该地址用于接收矿工的挖矿奖励,可以和矿工地址一致
# 该地址的keystore无需暴露,不用放置在配置的keydir下
coinbase: "n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE"
# 矿工地址的密码
passphrase: "passphrase"
}
# API配置
rpc {
# GRPC服务端口
rpc_listen: ["127.0.0.1:8684"]
# HTTP服务端口
http_listen: ["127.0.0.1:8685"]
# 开放的API模块
# API模块包含所有和用户私钥无关的接口
# Admin模块包含所有和用户私钥相关的接口,需要慎重考虑该模块的访问权限
http_module: ["api", "admin"]
}
# 日志配置
app {
# 日志级别: 支持[debug, info, warn, error, fatal]
log_level: "info"
# 日志存放位置
log_file: "logs"
# 是否打开crash report服务
enable_crash_report: false
}
# 监控服务配置
stats {
# 是否打开监控服务
enable_metrics: false
# 监控服务将数据上传到Influxdb
# 配置Influxdb的访问信息
influxdb: {
host: "http://localhost:8086"
db: "nebulas"
user: "admin"
password: "admin"
}
}
复制代码
更多的配置实例可在 $GOPATH/src/github.com/nebulasio/go-nebulas/conf/中找到。
矿工节点配置
在项目根目录下的conf/example/miner.conf,配置矿工节点,此次依然不改动
network {
# seed: "UNCOMMENT_AND_SET_SEED_NODE_ADDRESS"
seed: ["/ip4/127.0.0.1/tcp/8680/ipfs/QmP7HDFcYmJL12Ez4ZNVCKjKedfE7f48f1LAkUc3Whz4jP"]
listen: ["0.0.0.0:8780"]
network_id: 1
}
chain {
chain_id: 100
datadir: "miner.1.db"
keydir: "keydir"
genesis: "conf/default/genesis.conf"
start_mine: true
# 总共21个矿工,在我们目前的测试环境中,由于我们只启动了21个矿工中的一个,就是coinbase,挖矿奖励将放入该账户
coinbase: "n1XkoVVjswb5Gek3rRufqjKNpwrDdsnQ7Hq"
miner: "n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE"
# 密码
passphrase: "passphrase"
# 加密算法
signature_ciphers: ["ECC_SECP256K1"]
}
rpc {
rpc_listen: ["127.0.0.1:8784"]
http_listen: ["127.0.0.1:8785"]
http_module: ["api","admin"]
# http_cors: []
}
app {
log_level: "debug"
log_file: "logs/miner.1"
enable_crash_report: true
}
stats {
enable_metrics: false
influxdb: {
host: "http://localhost:8086"
db: "nebulas"
user: "admin"
password: "admin"
}
}
复制代码
启动星云链
❗️注意:启动的是本地的私有链,跟官方的测试网和主网没有任何关联。
第一步:启动第一个星云节点
cd $GOPATH/src/github.com/nebulasio/go-nebulas
./neb -c conf/default/config.conf
复制代码
启动成功的景象
第二步:启动第一个矿工节点
cd $GOPATH/src/github.com/nebulasio/go-nebulas
./neb -c conf/example/miner.conf
复制代码
开始挖矿咯,哈哈
挖到了第一个区块哦
提示: 目前的DPoS共识算法,会有21个节点轮流出块。由于我们只启动了21个矿工节点中的一个矿工节点,所以每隔15*21s才出一个块。你可以启动更多的矿工节点,填补的空缺。但是需要注意,多个节点间的端口号不要相互冲突了。
- 在星链云上发送交易
三种方式发送我们的交易
- 签名 & 发送
- 密码 & 发送
- 解锁 & 发送
❗️注意:在本文中,只讲解最安全的方式1。
准备账户
在发送交易前,我们需要准备两个账户:一个账户用来发送代币 (称为"from") 和另一个账户来接收代币 (称为"to").
发送者账户
在这里,我们将会使用配置文件conf/default/genesis.conf中预分配过代币的账户中选择一个作为发送者账户,默认选择n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE。
接收者账户
我们使用如下指令创建一个全新的账户来做接收者,请记住输入的密码。
$ ./neb account new
复制代码
提示:你创建的新账户和上面可能不一样,请以你创建的账户做为接受者继续接下来的实验。
⚠️注意:刚才新建的账户地址是:n1MhrP4mQuqX7sHrMJBBqUvbJDPNsX7PDzx
新账户的keystore文件将会被放置在$GOPATH/src/github.com/nebulasio/go-nebulas/keydir/内。
启动私有链
参见上节内容,分别启动种子节点矿工节点。
一旦一个新区块被挖出,挖块奖励将会被自动发送到当前矿工配置的Coinbase账户中,在conf/example/miner.conf里,该账户就是n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE.
在星云链发送交易
星云链提供给开发者HTTP API, RPC API和CLI来和运行中的星云节点交互。在教程中,我们将会基于HTTP API(API Module| Admin Module)来介绍三种发送交易的方法。
提示:星云链的HTTP服务默认端口号为8685。
检查账户状态
每个交易如果需要上链,都需要给矿工缴纳一部分手续费,所以发送者账户中需要有一部分钱才能成功发送交易。一般一个普通转账交易,手续费在0.000000002NAS左右,非常少。
我们可以通过API Module中的/v1/user/accountstate接口来获取发送者账户n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE的账户信息,检查下是否有足够的钱支付上链手续费。
> curl -i -H Accept:application/json -X POST http://localhost:8685/v1/user/accountstate -d '{"address":"n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE"}'
复制代码
如我们所见,发送者账户在预分配后拥有5000000000000000000000000(5 * 10^24)个代币,1个NAS是1000000000000000000(10^18)个代币,用于支付交易上链的手续费绰绰有余。
然后我们检查接受者账户的状态
curl -i -H Accept:application/json -X POST http://localhost:8685/v1/user/accountstate -d '{"address":"n1MhrP4mQuqX7sHrMJBBqUvbJDPNsX7PDzx"}'
复制代码
此时的结果当然是一毛钱都没有。
发送交易
签名&发送
最安全的发送交易的方式
curl -i -H 'Content-Type: application/json' -X POST http://localhost:8685/v1/admin/sign -d '{"transaction":{"from":"n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE","to":"n1MhrP4mQuqX7sHrMJBBqUvbJDPNsX7PDzx", "value":"1000000000000000000","nonce":1,"gasPrice":"1000000","gasLimit":"2000000"}, "passphrase":"passphrase"}'
复制代码
结果:
然后,将签好名的交易原始数据提交到本地私有链的星云节点
curl -i -H 'Content-Type: application/json' -X POST http://localhost:8685/v1/user/rawtransaction -d '{"data":"CiA76Vus0gugqBmtWc3XvZvU9tmLBynPTkOuBRqRRdv+PBIaGVcH+WT/SVMkY18ix7SG4F1+Z8evXJoA35caGhlXTt2F6ok3bUcfMnruUylZhLpIGu2z7+hhIhAAAAAAAAAAAA3gtrOnZAAAKAEwoIDd2QU6CAoGYmluYXJ5QGRKEAAAAAAAAAAAAAAAAAAPQkBSEAAAAAAAAAAAAAAAAAAehIBYAWJBA6veKbZCtTKyxrG9cgC2p1Vugc11rsHnRthKcEEZR6Yy9iI2WRC3Xk7VmQjjPDQj+nt5FMQX5rUwIVFRKBpr7AE="}'
复制代码
结果:
交易收据
不论使用的哪一种方法发送交易,我们都会得到两个返回值,txhash和contract_address。其中txhash为交易hash,是一个交易的唯一标识。使用txhash我们可以查看交易收据,知道当前交易的状态。
curl -i -H Accept:application/json -X POST http://localhost:8685/v1/user/getTransactionReceipt -d '{"hash":"3be95bacd20ba0a819ad59cdd7bd9bd4f6d98b0729cf4e43ae051a9145dbfe3c"}'
复制代码
结果:
这里的status可能有三种状态值,0,1和2。
- 0: 交易失败。
- 1: 交易成功。
- 2: 交易待定。
查询接收者账户余额
curl -i -H Accept:application/json -X POST http://localhost:8685/v1/user/accountstate -d '{"address":"n1MhrP4mQuqX7sHrMJBBqUvbJDPNsX7PDzx"}'
复制代码
结果是:
转账成功!
- 安装星云链chrome钱包插件和web钱包
安装chrome钱包插件
链接:https://github.com/nebulasio/WebExtensionWallet
点击“添加至chrome”,接着按下图指示进行操作
安装成功后
这里有三个网络选项
- Mainnet:主网络
- Testnet:测试网络
- localhost:8685:本地网络
钱包怎么玩这里就不说了吧,随便点点看,炸不了的,哈哈。
安装web钱包
下载地址:https://github.com/nebulasio/web-wallet
- Dapp开发
安装neb.js
neb.js提供javascript开发的API接口
clone(相当于下载)neb.js
git clone https://github.com/nebulasio/neb.js.git
复制代码
安装依赖
cd neb.js
npm install
复制代码
安装gulp
npm install gulp
复制代码
打包生成
gulp
复制代码
执行生成/dist文件夹
- neb.js:使用于浏览器,包含外部依赖。
- neb-light.js:轻量的包,适用于控制台,不包含外部依赖。
- nebulas.js: 浏览器全功能包,使用者可以创建地址、注册交易、发布智能合约等。
❗️注意:如果上述方法无效,可以使用传统引用方式:
复制代码
安装nebPay
NebPay SDK 为不同平台的交易提供了统一的支付接口,开发者在Dapp页面中使用NebPay API可以通过浏览器插件钱包、手机app钱包等实现交易支付和合约调用。
github地址:https://github.com/nebulasio/nebPay
安装方法同上。会生成nebPay.js文件
❗️注意:如果上述方法无效,可以使用传统引用方式:
复制代码
开发Dapp
新建一个index.html
树洞吐槽板
标题
内容
0/200
执行结果:
0/200
查询信息:
地址
信息:
复制代码
运行Dapp
浏览器打开即可。
- 开发资源汇总
- 官方网站:https://www.nebulas.io
- Github代码库:https://github.com/nebulasio
- Web钱包下载地址及使用文档:https://github.com/nebulasio/web-wallet
- Chrome插件下载地址及使用文档:https://github.com/ChengOrangeJu/WebExtensionWallet
- 区块浏览器:https://explorer.nebulas.io
- 申请NAS测试币:https://testnet.nebulas.io/claim
- 星云社区:https://bbs.xingyun.io
- 开发者文档库:https://nebulearn.com/official-docs/go-nebulas
- 开发Dapp的组件nebPay.js及文档:https://github.com/nebulasio/nebPay
- 开发Dapp的组件neb.js及文档:https://github.com/nebulasio/neb.js
- 开发智能合约的文档:https://github.com/nebulasio/wiki/blob/master/smart_contract_ch.md
- 星云激励计划,Dapp开发者大赛注册链接:https://incentive.nebulas.io/cn/signup.html?invite=iFinm
pdf下载,请加入星球: