`幾個攝影師朋友找到你,
他們的攝影做品上傳到本身的blog後老是被其餘人盜用,
使用水印之類的方法也沒法避免像截取部分這種狀況,
他們須要一個能證實攝影做品最先是由
本身上傳、並且具備法律效力可供本身進行維權的工具 html
顯然區塊鏈對於解決此問題有很大的幫助,
它的不可篡改等特性很適合存證維權的場景,
咱們能夠經過XuperChain來構建一個存取證據的智能合約 java
下面就來幫助攝影師朋友開發一個
可以存儲照片版權、還能在發現被盜用後進行維權的智能合約
`node
`git和g++以前已經安裝好了,如今安裝下go環境(接下來的a、b、c介紹的是經過mac安裝go語言環境 若是非mac的小夥伴 能夠跳過了)
`c++
經過brew安裝gogit
`brew install go
`github
`這樣就安裝好了,這裏涉及到一個問題,
就是經過brew下載安裝包速度的問題,
以前的文章也介紹過,這裏再重複下,
以避免朋友們在下載安裝包這塊浪費太多時間,
方法就是更換Homebrew源
`golang
a、替換brew.gitredis
`cd "$(brew --repo)"
git remote set-url origin https://mirrors.aliyun.com/ho...
`docker
b、替換homebrew-core.gitjson
`cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.aliyun.com/ho...
`
c、echo $SHELL 看輸出結果是/bin/zsh仍是/bin/bash
c-一、 /bin/zsh替換homebrew-bottles**
`echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/ho...' >> ~/.zshrc
source ~/.zshrc
`
c-二、/bin/bash替換homebrew-bottles
`echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/h...' >> ~/.bash_profile
source ~/.bash_profile
`
到此已經好了go語言環境 既然編譯環境準備好了 下面我們開始編譯下xuperchain源碼 let‘s go
`git clone https://gitee.com/pingfanrenb...
下載的是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
`
`cat pn1/data/keys/address dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
dpzuVdosQrF2kmzumhVeFQZa1aYcdgFpN
`
`
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"
]
}
}
}
}
`
`cp pn1/data/config/xuper.json pn2/data/config/xuper.json
cp pn1/data/config/xuper.json pn3/data/config/xuper.json
`
`./xchain-cli account newkeys -f
./xchain-cli netURL gen
此時在pn2和pn3 /data 目錄下生成新的 keys 和 netkeys 文件夾 經過 more data/keys/address 分別獲得pn2和pn3的address
`
`cd pn1
./xchain-cli netURL get
"/ip4/127.0.0.1/tcp/47101/p2p/QmVxeNubpg1ZQjQT8W5yZC9fD7ZB1ViArwvyGUB53sqf8e"
獲得pn1.url 複製 放入pn2和pn3 data/conf/xchain.yaml文件中的bootNodes
`
端口配置
port
metricPort
p2pv2 - port
節點1
37101
37200
47101
節點2
37102
37201
47102
節點3
37103
37202
47103
`vim pn2/conf/xchain.yaml
`
`vim pn3/conf/xchain.yaml
`
`依次在pn一、pn二、pn3下面執行
./xchain-cli createChain
注意這裏須要使用解釋模式來啓動
nohup ./xchain --vm ixvm & 而非
nohup ./xchain & 緣由是部署go語言合約的時候須要
`
`./xchain-cli status -H 127.0.0.1:37101
查看節點1狀態 其中peers 顯示的是 節點2和節點3的地址 說明多節點環境搭建OK
`
`vim get_trunkHeight
for((i=1;i<=3;i++));
do
echo -n "node$i:";
./xchain-cli status -H 127.0.0.1:3710$i | grep trunkHeight;
done
~`
`bash get_trunkHeight
`
`在官方源碼中
cd xuperchain/core/contractsdk/cpp/example
目前支持c++、go、java、pb語言
`
`目前官方推薦使用c++和go語言編寫的合約文件 java語言還不支持
c++合約模版比較多 並且 有對應的編譯腳本 很方便生成合約文件
這裏舉一個簡單的實例說明一下如何進行c++語言的編譯
c++語言的智能合約 依賴docker環境
cd contractsdk/cpp
sh build.sh
到當前目錄build裏便是編譯好的合約二進制
`
`做爲以java語言爲生的程序猿來講
你們都很是期待 java語言編寫的合約代碼
但截止目前20200705還不支持(
即目前版本的鏈不支持、也沒有相應的文檔)
僅僅又一個java語言編寫的合約模版(xuperchain/core/contractsdk/java)
但並未提供如何編譯成合約文件的文檔
官方內部說預計7月底會支持
期待哦
`
`存證合約在go文件夾中
xuperchain/core/contractsdk/go/example/eleccert/eleccert.go
`
`這裏須要注意下
截止當前日期 20200705 爲止
目前master分支版本的鏈源碼
僅支持 go1.13版本的
還不支持go.1.14版本的
問了下官方內部的技術擔當說是預計下週就會支持go1.14版本的
但目前我本地是go.14.1版本的
因此須要再安裝一個go1.13版本的
並切換下go環境
brew install go@1.13
brew unlink go@1.14
brew switch go@1.13 1.13.9
ln -s /usr/local/Cellar/go@1.13/1.13.9/bin/go /usr/local/bin
`
`cd xuperchain/core/contractsdk/go/example/eleccert
GOOS=js GOARCH=wasm go build eleccert.go
但此時會報錯
go: github.com/BurntSushi/toml@v0.3.1: Get "https://proxy.golang.org/github.com/%21burnt%21sushi/toml/@v/v0.3.1.mod": dial tcp 172.217.24.17:443: i/o timeout
緣由是 所下載的庫依賴有官方庫,而官方被封禁網致使
處理的方法 設置代理
go env -w GOPROXY=https://goproxy.cn
設置完以後從新執行便可
ps:go1.11發佈後,還發佈一個goproxy提供代理服務,goproxy.cn是專門服務於中國的,依賴於七牛雲
github地址: https://github.com/goproxy
執行完編譯命令以後 將至統一放到指定目錄方便進行管理
cp core/contractsdk/go/example/eleccert/eleccert data/blockchain/xuper/wasm/
`
`./xchain-cli wasm deploy --account XC1111111111111111@xuper --cname eleccert -a '{"creator": "someone"}' -A data/acl/addrs -o tx.output --keys data/keys --name xuper -H localhost:37101 /Users/mengfanxiao/Documents/project/company/XinPools_INFO/document/business/baidu/xuperchain/data/blockchain/xuper/wasm/eleccert --fee 5568179 --runtime=go -a '{"owner":"mengfanxiao"}'
`
a、經過命令行執行
`/xchain-cli wasm invoke -a '{"owner": "mengfanxiao","filehash": "xxx11111","timestamp": "111111"}' --method save -H localhost:37101 eleccert --fee 5568179
`
b、經過java-sdk代碼執行
a、經過命令行執行
`./xchain-cli wasm query -a '{"owner": "mengfanxiao","filehash": "xxx11111","timestamp": "111111"}' --method query -H localhost:37101 eleccert
`
b、經過java-sdk代碼查詢
`https://gitee.com/pingfanrenb...
`
`https://xuperchain.readthedoc...
注意是最新的版本哦
`
`很是感謝 🙏
微信羣【2羣】百度超級鏈官方交流羣中的前輩的技術支持
@超哥 和 老大哥 @國電通-¿¿¿¿¿ `