如何在光谱链上使用光子()

什么是光子网络(Photon Network)?

“闪电网络是什么?”
“比特币的链下扩容方式啊”
“雷电网络是什么?”
“以太坊的链下扩容方式啊”
“光子网络是什么?”
“...没听说过”
“什么?都2018年了,你还没听说过光子网络,那你可真是out到家了..”
“已经有了雷电网络,为什么还会有光子网络?”
“因为光子网络比雷电网络更强大!我们光子网络有的特性雷电没有..”
“我不信?口说无凭”
“好,那我给你捋一捋..”
  • 广泛的跨平台和移动设备适配应用(雷电网络是不支持移动设备的哦)
  • 精简的安全保护(状态恢复)机制
  • 惩罚机制
  • 无网支付
  • 跨链支付,光子网络可以在不借助第三方的情况下实现链下原子资产转换
“来不及解释了,赶紧上车吧->光子网络主网已经上线”
“听起来挺高大上的,可是我看了半天也没看明白怎么入门使用你这玩意儿啊?”
“上车!”
怎么使用光子网络(Photon Network)? 连接以太坊或者光谱网络
这里我以光谱测试链为例,你也可以选择在以太坊公链或者私链上使用光子网络。
  • 安装光谱
    具体的步骤可以参考官方文档。
  • 连接光谱测试链
    本地连接到光谱测试链,运行以下脚本,如果你是第一次连接,那么可能会需要一段时间来同步数据。
smc--testnet--port 60505--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" --wsport 28546--rpcport 28545 --wsorigins "*"--datadir ./spectrumtest

同步数据的时候,你可以先创建一些账号,你可以选择用以太坊geth或者光谱smc创建,会生成一个存有你账号私钥的keystore文件。
smc account new

安装光子网络
go get github.com/SmartMeshFoundation/Photon/ cd $GOPATH/github.com/SmartMeshFoundation/Photon/cmd/Photon ./build.sh

安装好光子以后,我们运行脚本启动光子节点。
echo run photon... photon --datadir=.photon--address="0x10b256b3c83904d524210958fa4e7f9caffb76c6" --keystore-path ~/geth_private_data/ky --registry-contract-address 0xf62426108EeC34d86Fe2854B5E319043e11E8dC4 --password-file ~/geth_private_data/pass.txt--eth-rpc-endpoint ws://127.0.0.1:28546 echo "quit ok"

这几个参数意义:
  • --datadir 储存本地数据库的路径
  • --address 节点地址
  • --keystore-path 私钥文件路径
  • --password-file 私钥密码路径(就是创建账户时候设置的私钥密码)
  • --registry-contract-address 合约地址(光子就是运行在光谱链上的智能合约系统)
  • --eth-rpc-endpoint 连接测试链全节点
部署合约
光谱的测试链上已经部署了合约:0xb3aE919aB595f5844cba80499ee6423688E06F89
  • 如果你的账户里拥有ERC20token,且在测试链上拥有SMT,那么你就可以直接使用了,只需要把脚本里面的合约地址改成:0xb3aE919aB595f5844cba80499ee6423688E06F89即可。
  • 如果账户里没有ERC20koken,你也可以用我们提供的小工具(newtestenv)通过自己手动去部署合约生成token,当然这也是需要花费SMT
  • 怎么获得测试链的SMT?可以去社区找小伙伴要..
为了方便理解,我这里用一个具体的例子来说明下
  • Alice
    • 钱包地址:0x10b256b3C83904D524210958FA4E7F9cAFFB76c6
    • 持有某种ERC20koken:0xE328d7022e4e3AcFee9C80bBD95Dc2701Fb4eb8B
    • 在光谱测试链上拥有一定量的SMT
  • Bob
  • 钱包地址:0x151E62a787d0d8d9EfFac182Eae06C559d1B68C2
  • 持有某种ERC20koken:0xE328d7022e4e3AcFee9C80bBD95Dc2701Fb4eb8B
  • 在光谱测试链上拥有一定量的SMT
交易
Alice 怎么通过光子网络与Bob进行交易呢?
通过上面的脚本启动节点
Alice
echo run photon... photon --datadir=.photon --api-address=127.0.0.1:6001 --listen-address=127.0.0.1:60001 --address="0x10b256b3c83904d524210958fa4e7f9caffb76c6" --keystore-path ~/geth_private_data/ky --registry-contract-address 0xb3aE919aB595f5844cba80499ee6423688E06F89 --password-file ~/geth_private_data/pass.txt--eth-rpc-endpoint ws://127.0.0.1:28546 echo "quit ok"

Bob
echo run photon... photon --datadir=.photon --api-address=127.0.0.1:6002 --listen-address=127.0.0.1:60002 --address="0x151E62a787d0d8d9EfFac182Eae06C559d1B68C2" --keystore-path ~/geth_private_data/ky --registry-contract-address 0xb3aE919aB595f5844cba80499ee6423688E06F89 --password-file ~/geth_private_data/pass.txt--eth-rpc-endpoint ws://127.0.0.1:28546 echo "quit ok"

首先我们要把自己拥有的token注册到合约上面,可以通过接口(这里是需要花费gas的,所以需要账号里面有一定量的SMT)
PUT http://127.0.0.1:6001/api/1/tokens/0xE328d7022e4e3AcFee9C80bBD95Dc2701Fb4eb8B
然后Alice和Bob打开通道,Alice存钱200token,调用接口
PUT http://127.0.0.1:6001/api/1/channels
请求参数:
{ "partner_address": "0x0D0EFCcda4f079C0dD1B728297A43eE54d7170Cd", "token_address": "0x76fCe6fF759B208D27E4D48828F820d79d1719f3", "balance": 200, "settle_timeout": 150 }

返回结果
{ "channel_identifier": "0x03ce1b687a3f7668bb7499ccc503d299387bdb60422d119f4e81646630c176df", "open_block_number": 1212719, "partner_address": "0x151E62a787d0d8d9EfFac182Eae06C559d1B68C2", "balance": 200, "partner_balance": 0, "locked_amount": 0, "partner_locked_amount": 0, "token_address": "0xE328d7022e4e3AcFee9C80bBD95Dc2701Fb4eb8B", "state": 1, "state_string": "opened", "settle_timeout": 150, "reveal_timeout": 10 }

Alice想给Bob转账100token,调用接口
POST http://127.0.0.1:6001/api/1/transfers/0xE328d7022e4e3AcFee9C80bBD95Dc2701Fb4eb8B/0x151E62a787d0d8d9EfFac182Eae06C559d1B68C2
请求参数:
{ "amount":100, "fee":0, "is_direct":false }

返回结果:
{ "initiator_address": "0x10b256b3C83904D524210958FA4E7F9cAFFB76c6", "target_address": "0x151E62a787d0d8d9EfFac182Eae06C559d1B68C2", "token_address": "0xE328d7022e4e3AcFee9C80bBD95Dc2701Fb4eb8B", "amount": 100, "lockSecretHash": "0xea44185a3f12daa1a527ef7873accc6530a94b77df07268efec81f6a89792ff1" }

此时可以查询通道,发现Bob在通道里面的余额已经变成100,调用接口
GET http://127.0.0.1:6001/api/1/channels
返回结果:
[ { "channel_identifier": "0x03ce1b687a3f7668bb7499ccc503d299387bdb60422d119f4e81646630c176df", "open_block_number": 1212719, "partner_address": "0x151E62a787d0d8d9EfFac182Eae06C559d1B68C2", "balance": 100, "partner_balance": 100, "locked_amount": 0, "partner_locked_amount": 0, "token_address": "0xE328d7022e4e3AcFee9C80bBD95Dc2701Fb4eb8B", "state": 1, "state_string": "opened", "settle_timeout": 150, "reveal_timeout": 10 } ]

到这里,一个简单的光子链下交易就完成了,如果想要把通道里面的钱结算到链上,可以调用合作结算通道接口
PATCH http://127.0.0.1/api/1/channels/0x03ce1b687a3f7668bb7499ccc503d299387bdb60422d119f4e81646630c176df
请求参数:
{"state":"closed", "force":false }

此时通道已经成功结算关闭,可以去链上查询双方余额变化。
到这里,一个完整的光子使用流程:注册token-->打开通道/存钱-->交易-->合作结算/取钱关闭通道
如果你的账号里没有ERC20token,你也可以使用我们提供的小工具newtestenv快速部署合约,生成token,创建通道,建立复杂路由来体验光子网络。当然这些都是需要消耗gas的,所以需要你的账号拥有SMT
安装:
go get github.com/SmartMeshFoundation/Photon/ cd $GOPATH/github.com/SmartMeshFoundation/Photon/cmd/tools/newtestenv go install

部署合约:
newtestenv--keystore-path ~/geth_private_data/ky--eth-rpc-endpoint ws://127.0.0.1:28546

【如何在光谱链上使用光子()】一个简单的光子网络连接到光谱测试链教程就结束了,想要了解光子的更多特性,请移步官方文档,欢迎大家在使用过程中积极反应问题。

    推荐阅读