现实生活中的使用场景
几个摄影师朋友找到你,他们的摄影作品上传到自己的blog后总是被其他人盗用,使用水印之类的方法也无法避免像截取部分这种情况,他们需要一个能证明摄影作品最早是由自己上传、而且具有法律效力可供自己进行维权的工具 显然区块链对于解决此问题有很大的帮助,它的不可篡改等特性很适合存证维权的场景,我们可以通过XuperChain来构建一个存取证据的智能合约 下面就来帮助摄影师朋友开发一个能够存储照片版权、还能在发现被盗用后进行维权的智能合约
搭建xuper节点环境(多节点)
环境准备
- go 1.12以上
- git
- g++4.8.2以上
git和g++之前已经安装好了,现在安装下go环境(接下来的a、b、c介绍的是通过mac安装go语言环境 如果非mac的小伙伴 可以跳过了)
通过brew安装go
brew install go
这样就安装好了,这里涉及到一个问题, 就是通过brew下载安装包速度的问题, 之前的文章也介绍过,这里再重复下, 以免朋友们在下载安装包这块浪费太多时间, 方法就是更换Homebrew源
a、替换brew.git
cd "$(brew --repo)"git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
b、替换homebrew-core.git
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
c、echo $SHELL 看输出结果是/bin/zsh还是/bin/bash
c-1、 /bin/zsh替换homebrew-bottles**
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrcsource ~/.zshrc
c-2、/bin/bash替换homebrew-bottles
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profilesource ~/.bash_profile
到此已经好了go语言环境 既然编译环境准备好了 下面咱们开始编译下xuperchain源码
let‘s go
下载源码
git clone https://gitee.com/pingfanrenbiji/xuperchain.git下载的是master分支 当前版本 v3.7
编译
进入源码目录 cd xuperchain make 编译好之后 就会在output文件夹下面出现编译之后的文件 这里需要注意下 一定要安装master分支 不要安装老的分支 比如v3.1分支v3.1分支是pow共识 我一开始就用的这个版本的代码 节点是可以部署 但使用命令或通过sdk调用和链交互就会有出现问题 所以一定要用master分支哦
多节点配置
创建节点目录
mkdir pn1 mkdir pn2 mkdir pn3 将编译之后的所有文件copy到相应的节点目录 cp -r output/* pn1 cp -r output/* pn2 cp -r output/* pn3
节点1配置
- 查看节点1地址
cat pn1/data/keys/address dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
- 将该地址配置到 pn1/data/config/xuper.json 里的address
cat pn1/data/config/xuper.json { "version": "1", "predistribution": [ { "address": "dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN", "quota": "100000000000000000000" } ], "maxblocksize": "128", "award": "1000000", "decimals": "8", "award_decay": { "height_gap": 31536000, "ratio": 1 }, "gas_price": { "cpu_rate": 1000, "mem_rate": 1000000, "disk_rate": 1, "xfee_rate": 1 }, "new_account_resource_amount": 1000, "genesis_consensus": { "name": "tdpos", "config": { "timestamp": "1559021720000000000", "proposer_num": "1", "period": "3000", "alternate_interval": "3000", "term_interval": "6000", "block_num": "20", "vote_unit_price": "1", "init_proposer": { "1": [ "dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN" ] }, "init_proposer_neturl": { "1": [ "/ip4/127.0.0.1/tcp/47101/p2p/QmVxeNubpg1ZQjQT8W5yZC9fD7ZB1ViArwvyGUB53sqf8e" ] } } } }