Linux或者Mac环境安装Photon network

官方安装文档:
https://photonnetwork.readthedocs.io/en/latest/installation_guide/

下载源码:
https://github.com/SmartMeshFoundation/Spectrum
https://github.com/SmartMeshFoundation/Photon

流程是:
1,go安装及配置
2,安装运行spectrum
3,下载运行photon

GO安装及配置

  • 下载地址 https://golang.org/dl/

  • 进行安装

    步骤:打开终端  → 进入local目录 → 下载压缩包 → 
         解压到当前目录 → 删除压缩包 → 创建gopath(后续开发项目目录) → 
         进入gopath → 创建 bin src pkg
    
    #Linux执行
    注意: 必须安装在 /usr/local/ 目录下,因为GOROOT必须为/usr/local/go
    cd /usr/local
    wget https://storage.googleapis.com/golang/go1.7.5.linux-amd64.tar.gz   
    tar zxvf go go1.9.7.linux-amd64.tar.gz
    rm go1.9.7.linux-amd64.tar.gz   
    mkdir gopath
    cd gopath
    mkdir -p bin src pkg
    
    

GO环境变量配置

  • 配置环境

     vim ~/.bashrc
     vim /etc/profile
    #尾部添加,全是大写
    #根目录
    export GOROOT=/usr/local/go
    #bin目录
    export GOBIN=$GOROOT/bin
    #工作目录
    export GOPATH=/usr/local/gopath
    export PATH=$PATH:$GOPATH:$GOBIN:$GOPATH
    
    #退出保存,
    source ~/.bashrc生效
    #执行
    go env
    
    

安装运行Spectrum链

详细教程如下:
Spectrum链开发 -- Mac开发环境搭建
https://www.jianshu.com/p/078ccfcfb001

Spectrum链开发--Linux环境搭建
https://www.jianshu.com/p/92d067c44b3c

启动Spectrum链:

mkdir smclog testnetdata

 ls
Photon  smc  smc-linux-amd64  smc-linux-amd64-0.5.1.tar.gz  smclog  Spectrum  testnetdata

sudo ./smc-linux-amd64  --datadir=/home/ubuntu/testnetdata/ --testnet --ws --wsapi  "eth,admin,web3,net,debug,personal"   --rpc  --rpccorsdomain "*" --rpcapi "eth,admin,web3,net,debug,personal"   --wsaddr "0.0.0.0" --rpcaddr "0.0.0.0"   --wsorigins "*" console
INFO [10-30|18:29:47] Starting peer-to-peer node               instance=Smc/v0.5.1-release-f085b369/linux-amd64/go1.10.1
INFO [10-30|18:29:47] Allocated cache and file handles         database=/home/ubuntu/testnetdata/smc/chaindata cache=128 handles=1024
INFO [10-30|18:29:47] Initialised chain configuration          config="{ChainID: 3 Homestead: 0 DAO: <nil> DAOSupport: true EIP150: <nil> EIP155: 0 EIP158: 0 Byzantium: 62678 Engine: tribe}"
INFO [10-30|18:29:47] Initialising Ethereum protocol           versions="[63 62]" network=3
INFO [10-30|18:29:47] Loaded most recent local header          number=1207096 hash=5c7bd6…488789 td=3066556
INFO [10-30|18:29:47] Loaded most recent local full block      number=1207096 hash=5c7bd6…488789 td=3066556
INFO [10-30|18:29:47] Loaded most recent local fast block      number=1207096 hash=5c7bd6…488789 td=3066556
INFO [10-30|18:29:47] Loaded local transaction journal         transactions=0 dropped=0
INFO [10-30|18:29:47] Regenerated local transaction journal    transactions=0 accounts=0
WARN [10-30|18:29:47] Blockchain not empty, fast sync disabled 
INFO [10-30|18:29:47] Starting P2P networking 
INFO [10-30|18:29:49] UDP listener up                          self=enode://7d2541c024906b566e9399694a5e12c238d1733cf47c5adee60ec6fcc542d1d544d003c03c462b1aa850fc9b41c6627ae7e3f9285f6b28c7ef5b6053dcec25a9@[::]:60303
INFO [10-30|18:29:49] HTTP endpoint opened: http://0.0.0.0:18545 
INFO [10-30|18:29:49] WebSocket endpoint opened: ws://[::]:18546 
INFO [10-30|18:29:49] RLPx listener up                         self=enode://7d2541c024906b566e9399694a5e12c238d1733cf47c5adee60ec6fcc542d1d544d003c03c462b1aa850fc9b41c6627ae7e3f9285f6b28c7ef5b6053dcec25a9@[::]:60303
INFO [10-30|18:29:49] init tribe.status when chiefservice start end. getnodekey=true
INFO [10-30|18:29:49] IPC endpoint opened: /home/ubuntu/testnetdata/smc.ipc 
INFO [10-30|18:29:49] init tribe.status success. 
Welcome to the Geth JavaScript console!

instance: Smc/v0.5.1-release-f085b369/linux-amd64/go1.10.1
coinbase: 0xbcb48ef81630c6ca138eebbb8dabb938ec464ff9
at block: 1207096 (Tue, 30 Oct 2018 18:05:55 CST)
 datadir: /home/ubuntu/testnetdata
 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 tribe:1.0 txpool:1.0 web3:1.0

> INFO [10-30|18:29:59] Block synchronisation started 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
::: ORIGIN ::: origin= 1207096 height= 1207199
::: ORIGIN ::: d.syncStatsChainHeight= 1207199 current= 1207096
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
---- FullSync ---->
INFO [10-30|18:30:00] -> num=1207098 , diff=3 , hash=0x519146afa188bc868347f86fc5eefda47d27e07f2d020d75f504edee514d0f82 , miner=0x4110bD1fF0b73fa12C259acF39C950277f266787 
INFO [10-30|18:30:00] [ downloader ] ==> importBlockResults() 1207097 --> 1207098. 

安装运行Photon 光子网路

go get github.com/SmartMeshFoundation/Photon/
cd /usr/local/gopath/github.com/SmartMeshFoundation/Photon/

ubuntu@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon$ ls
accounts        encoding           mkdocs.yml    photonService.go  smoketest.sh
ackhelper.go    eventhandler.go    mobile        README.md         testdata
blockchain      feepolicy.go       models        req.go            transfer
channel         goclean.sh         network       rerr              utils
cmd             internal           notify        restful           vendor
codefortest     log                params        restore.go
codefortest.go  Makefile           pfsproxy      rungotest.sh
docs            messagehandler.go  photonapi.go  runpprof.sh


更新到最新的代码:
root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon# git pull
remote: Enumerating objects: 41, done.
remote: Counting objects: 100% (41/41), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 41 (delta 20), reused 40 (delta 20), pack-reused 0
Unpacking objects: 100% (41/41), done.
From https://github.com/SmartMeshFoundation/Photon
   9c0f89b..90602a9  master     -> origin/master
 * [new tag]         v0.91      -> v0.91
Updating 9c0f89b..90602a9
Fast-forward
 Makefile                    |  3 ++-
 cmd/photon/build.sh         |  9 +++++++++
 cmd/photon/buildall.sh      | 30 ++++++++++++++++++++++++++++++
 cmd/photon/mainimpl/impl.go |  7 +++++--
 docs/installation_guide.md  |  7 +++++--
 docs/mobile_api_zh.md       |  2 +-
 mobile/build.sh             | 19 +++++++------------
 mobile/build_android.sh     | 10 ++++------
 mobile/build_iOS.sh         |  8 ++------
 9 files changed, 65 insertions(+), 30 deletions(-)
 create mode 100755 cmd/photon/build.sh
 create mode 100755 cmd/photon/buildall.sh

root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon# ls
accounts      cmd             encoding         internal           mkdocs.yml  notify        photonService.go  restful       smoketest.sh  vendor
ackhelper.go  codefortest     eventhandler.go  log                mobile      params        README.md         restore.go    testdata
blockchain    codefortest.go  feepolicy.go     Makefile           models      pfsproxy      req.go            rungotest.sh  transfer
channel       docs            goclean.sh       messagehandler.go  network     photonapi.go  rerr              runpprof.sh   utils

root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon# cd cmd/photon/

root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon/cmd/photon# ls
buildall.sh  build.sh  main.go  mainimpl
root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon/cmd/photon# ./build.sh 
90602a99958e25b71218784bb3ba9254de790675
root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon/cmd/photon# ls
buildall.sh  build.sh  main.go  mainimpl  photon

photon即我们的可执行文件

或者
wget https://github.com/SmartMeshFoundation/Photon/releases 目录获得最新编译的程序
屏幕快照 2018-10-31 上午11.06.01.png

编译生成iOS或者安卓的sdk

root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon/mobile# ls
api.go  build_android.sh  build_iOS.sh  build.sh  main.go  mobile_test.go  primitives.go
root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon/mobile# ./build_iOS.sh 
90602a99958e25b71218784bb3ba9254de790675
goversiongo1.9.7linux/amd64
TueOct30145225CST2018

root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon/mobile# ./build_android.sh 
90602a99958e25b71218784bb3ba9254de790675
goversiongo1.9.7linux/amd64
TueOct30145238CST2018
0.91

运行Photon

在keystore创建密码登录密码,spectrum创建的用户名
cd /home/ubuntu/testnetdata/keystore
UTC--2018-10-30T07-26-23.224590191Z--9dabc8a16b179b9521c68243200492a5ca0e5630
输入spectrum创建的用户名密码
root@VM-0-16-ubuntu:/home/ubuntu/testnetdata/keystore# touch pass.txt
root@VM-0-16-ubuntu:/home/ubuntu/testnetdata/keystore# ls
pass.txt
UTC--2018-10-30T07-26-23.224590191Z--9dabc8a16b179b9521c68243200492a5ca0e5630
root@VM-0-16-ubuntu:/home/ubuntu/testnetdata/keystore# vi pass.txt 
root@VM-0-16-ubuntu:/home/ubuntu/testnetdata/keystore# ls
pass.txt
UTC--2018-10-30T07-26-23.224590191Z--9dabc8a16b179b9521c68243200492a5ca0e5630
root@VM-0-16-ubuntu:/home/ubuntu/testnetdata/keystore# ls
pass.txt
UTC--2018-10-30T07-26-23.224590191Z--9dabc8a16b179b9521c68243200492a5ca0e5630

启动命令详解:

root@VM-0-16-ubuntu:/usr/local/gopath/src/github.com/SmartMeshFoundation/Photon/cmd/photon# ./photon -help
GoVersion=goversiongo1.9.7linux/amd64
GitCommit=90602a99958e25b71218784bb3ba9254de790675
builddate=TueOct3014:49:49CST2018Version=0.91
os.args=["photon" "-help"]
photon [global options] command [command options] [arguments...]

VERSION:
   0.91

COMMANDS:
   help  Shows a list of commands or help for one command
   
GLOBAL OPTIONS:
   --address value                             The ethereum address you would like photon to use and for which a keystore file exists in your local system.
   --keystore-path "/root/.ethereum/keystore"  If you have a non-standard path for the ethereum keystore directory provide it using this argument. 
   --eth-rpc-endpoint value                    "host:port" address of ethereum JSON-RPC server.\n'
                                                          'Also accepts a protocol prefix (ws:// or ipc channel) with optional port', (default: "/root/.ethereum/geth.ipc")
   --registry-contract-address value           hex encoded address of the registry contract.
   --listen-address value                      "host:port" for the photon service to listen on. (default: "0.0.0.0:40001")
   --api-address value                         host:port" for the RPC server to listen on. (default: "127.0.0.1:5001")
   --datadir "/root/.photon"                   Directory for storing photon data.
   --password-file value                       Text file containing password for provided account
   --debugcrash                                enable debug crash feature
   --conditionquit value                       quit at specified point for test
   --nonetwork                                 disable network, for example ,when we want to settle all channels
   --fee                                       enable mediation fee
   --xmpp                                      use xmpp as transport
   --xmpp-server value                         use another xmpp server  (default: "193.112.248.133:5222")
   --ignore-mediatednode-request               this node doesn't work as a mediated node, only work as sender or receiver
   --enable-health-check                       enable health check
   --matrix-server value                       use another matrix server
   --matrix                                    use matrix as transport
   --reveal-timeout value                      channels' reveal timeout, default 10 (default: 10)
   --pfs value                                 pathfinder service host
   --verbosity value                           Logging verbosity: 0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=trace (default: 3)
   --vmodule value                             Per-module verbosity: comma-separated list of <pattern>=<level> (e.g. eth/*=5,p2p=4)
   --backtrace value                           Request a stack trace at a specific logging statement (e.g. "block.go:271")
   --debug                                     Prepends log messages with call-site location (file and line number)
   --pprof                                     Enable the pprof HTTP server
   --pprofaddr value                           pprof HTTP server listening interface (default: "127.0.0.1")
   --pprofport value                           pprof HTTP server listening port (default: 6060)
   --memprofilerate value                      Turn on memory profiling with the given rate (default: 524288)
   --blockprofilerate value                    Turn on block profiling with the given rate (default: 0)
   --cpuprofile value                          Write CPU profile to the given file
   --trace value                               Write execution trace to the given file
   --logfile value                             redirect log to this the given file
   --help, -h                                  show help
   --version, -v                               print the version

sudo ./photon --datadir=.photon --api-address=0.0.0.0:5001 --listen-address=0.0.0.0:40001 --address=9dabc8a16b179b9521c68243200492a5ca0e5630 --keystore-path /home/ubuntu/testnetdata/keystore --registry-contract-address 0xb3aE919aB595f5844cba80499ee6423688E06F89 --password-file jianghua --eth-rpc-endpoint ws://0.0.0.0:18546

--datadir 缓存目录
--eth-rpc-endpoint 这个参数是是smc节点的ip,如果是本地节点ws://0.0.0.0:18546是可以的,如果部署在服务器上,缓存运行smc的ip既可。


sudo ./photon --datadir=.photon --api-address=0.0.0.0:5001 --listen-address=192.168.0.145:40001 --address=9dabc8a16b179b9521c68243200492a5ca0e5630 --keystore-path /home/ubuntu/testnetdata/keystore --registry-contract-address 0xb3aE919aB595f5844cba80499ee6423688E06F89 --password-file jianghua --eth-rpc-endpoint ws://0.0.0.0:18546
GoVersion=goversiongo1.9.7linux/amd64
GitCommit=90602a99958e25b71218784bb3ba9254de790675
builddate=TueOct3014:49:49CST2018Version=0.91
os.args=["photon" "--datadir=.photon" "--api-address=0.0.0.0:5001" "--listen-address=192.168.0.145:40001" "--address=9dabc8a16b179b9521c68243200492a5ca0e5630" "--keystore-path" "/home/ubuntu/testnetdata/keystore" "--registry-contract-address" "0xb3aE919aB595f5844cba80499ee6423688E06F89" "--password-file" "jianghua" "--eth-rpc-endpoint" "ws://0.0.0.0:18546"]
INFO [10-30|17:37:50.303] Welcome to photon,version 0.91
 
INFO [10-30|17:37:50.303] os.args=["photon" "--datadir=.photon" "--api-address=0.0.0.0:5001" "--listen-address=192.168.0.145:40001" "--address=9dabc8a16b179b9521c68243200492a5ca0e5630" "--keystore-path" "/home/ubuntu/testnetdata/keystore" "--registry-contract-address" "0xb3aE919aB595f5844cba80499ee6423688E06F89" "--password-file" "jianghua" "--eth-rpc-endpoint" "ws://0.0.0.0:18546"] 
INFO [10-30|17:37:51.384] Start with account 0x9DAbC8A16B179B9521c68243200492A5ca0e5630 
2018/10/30 17:37:51 [impl.go:198] [I] ethclient connection status changed from 0 to 1
INFO [10-30|17:37:51.419] create photon service registry=0xb3aE919aB595f5844cba80499ee6423688E06F89,node=0x9DAbC8A16B179B9521c68243200492A5ca0e5630 
ERROR[10-30|17:37:51.422] listen udp 192.168.0.145:40001 error listen udp 192.168.0.145:40001: bind: cannot assign requested address 
INFO [10-30|17:37:51.668] changeStatus from 0 to 1                 matrix=9dab
ERROR[10-30|17:37:52.422] listen udp 192.168.0.145:40001 error listen udp 192.168.0.145:40001: bind: cannot assign requested address 
INFO [10-30|17:37:53.331] get state change since 0 
WARN [10-30|17:37:53.337] AlarmTask missed 1206974 blocks 
ERROR[10-30|17:37:53.423] listen udp 192.168.0.145:40001 error listen udp 192.168.0.145:40001: bind: cannot assign requested address 
ERROR[10-30|17:37:54.423] listen udp 192.168.0.145:40001 error listen udp 192.168.0.145:40001: bind: cannot assign requested address 
INFO [10-30|17:37:55.403] NewTokenAdd token=0xF0123C3267Af5CbBFAB985d39171f5F5758C0900,tokennetwork=0x3b5AdD6F9164B51DB2Ee0126D43Df06207d91f5d 
INFO [10-30|17:37:55.403] Photon Startup complete and history events process complete. 
INFO [10-30|17:37:55.409] NewChannel tokenNetwork=3b5a,token=f012,participant1=e011,participant2=8330 
INFO [10-30|17:37:55.415] NewChannel tokenNetwork=3b5a,token=f012,participant1=e011,participant2=d8d7 
INFO [10-30|17:37:55.423] NewChannel tokenNetwork=3b5a,token=f012,participant1=fb07,participant2=e011 
ERROR[10-30|17:37:55.423] listen udp 192.168.0.145:40001 error listen udp 192.168.0.145:40001: bind: cannot assign requested address 
INFO [10-30|17:37:55.426] NewChannel tokenNetwork=3b5a,token=f012,participant1=70ae,participant2=810a 
INFO [10-30|17:37:55.432] NewChannel tokenNetwork=3b5a,token=f012,participant1=fb07,participant2=e5a8 
INFO [10-30|17:37:55.437] NewChannel tokenNetwork=3b5a,token=f012,participant1=fb07,participant2=e011 
INFO [10-30|17:37:55.441] NewChannel tokenNetwork=3b5a,token=f012,participant1=e5a8,participant2=e011 
INFO [10-30|17:37:55.453] NewChannel tokenNetwork=3b5a,token=f012,participant1=fb07,participant2=d8d7 
INFO [10-30|17:37:55.456] NewChannel tokenNetwork=3b5a,token=f012,participant1=e5a8,participant2=d8d7 
ERROR[10-30|17:37:56.424] listen udp 192.168.0.145:40001 error listen udp 192.168.0.145:40001: bind: cannot assign requested address 
ERROR[10-30|17:37:57.424] listen udp 192.168.0.145:40001 error listen udp 192.168.0.145:40001: bind: cannot assign requested address 
ERROR[10-30|17:37:58.424] listen udp 192.168.0.145:40001 error listen udp 192.168.0.145:40001: bind: cannot assign requested address 

错误总结

1,tyring to reconnect geth

image.png

解决方案:查看启动spectrum的时候,没有启动HTTP endpoint opened的18545和webSocket的服务。

image

2,启动smartRaiden时候,cannot create or open db,makesure you have write permission
image

解决方案:1,清空spectrum的节点datadir缓存数据,2,关闭terminal,3,重新启动spectrum和smartRaiden。

3,spectrum一直卡着没动
image

解决方案:情况的spectrum节点缓存datadir里面的数据,每次启动spectrum他都会同步节点数据。

4,没有链上公链

image.png

解决方案:查看spectrum公链运行情况。

5,ERROR[10-30|17:39:50.463] listen udp 192.168.0.145:40001 error listen udp 192.168.0.145:40001: bind: cannot assign requested address

屏幕快照 2018-10-31 下午12.01.52.png

解决方案:
--listen-address=192.168.0.145:40001换成0.0.0.0:40001
--eth-rpc-endpoint 这个参数是是smc节点的ip,如果是本地节点ws://0.0.0.0:18546是可以的,如果部署在服务器上,缓存运行smc的ip既可。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容

  • 简介 此项目是一个模拟公民身份信息链的区块链项目 github 地址: https://github.com/ak...
    CrazyWolf_46a9阅读 8,638评论 0 0
  • Nebulas-01 星云链编译安装 星云链的项目代码已经发布了几个版本,经过测试可以在本地运行,大家可以下载星...
    Li_MAX阅读 724评论 0 0
  • 1 环境准备 1.1操作系统环境 Windows 7 专业版 1.2我们首先安装GO的工具包 1.2.1 下载 并...
    轩辕小子小牛阅读 515评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,050评论 18 139
  • 一年多过去了,坚如磐石的感情也会被岁月风化吧。 昨晚睡下的时候,学着放下一切,静心而眠。 心的海面平静了,礁石就显...
    niuniuniu阅读 307评论 0 0