如何在光谱链上使用光子?

字数 1340阅读 262

什么是光子网络(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

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

推荐阅读更多精彩内容