作为领先的内容公链,COS公链的代码全部开源免费。开源地址:https://github.com/coschain/
看过上一篇文章《0基础,开启COS公链本地化运行》的朋友,相信已经在本地搭建了COS公链。这次,我们开启COS公链互动模式,看看都有哪些好玩儿的互动?
区别于中心化的内容平台,Contentos内容生态里的账户系统分为“本地账户”和“链上账户”两种。
本地账户是一份 keystore
文件,放置在 ~/.coschain
文件夹下。一个本地账户存储了一对 contentos 的公私钥,这个keystore
文件可以被 wallet
创建或者导入。 一份本地的 keystore
文件类似如下:
{
"Name":"testuser",
"PubKey":"COS745h9zeER6qea8q9GVnRVvia7dHXnbPSAKvF84SbwSdzBG5pa1",
"Cipher":"AES-256",
"CipherText":"Bo3DR/lPtrfau4CsgHBFR4jPE78fPUnY5xY9pO6OKhuMe5fTZ2jxPd8MJDzcqiFSf7o=",
"Iv":"Bj8mdb0z8JAFrAdvNSl+Sw==",
"Mac":"sgZbYnWPF26v4cWbhIA6BhMKOxvEVPm/NwEpcViHkYE=",
"Version":1
}
这里的 Name
对应到链上账户的名称,公钥公开存放,私钥加密存放。
如果一个账户在链上被创建成功,我们可以通过命令(见下文)查询到该账户的具体信息,包括账户余额、抵押数量,等等。链上账户通过 wallet
创建。
如何查询账户列表及其详情呢?
查询本地账户,需要执行以下操作。
./wallet-cli
> list
返回
> list
account: initminer15 | status: locked
account: initminer2 | status: locked
account: initminer5 | status: locked
account: initminer11 | status: locked
account: initminer16 | status: locked
查看已解锁账户的公私钥对,使用
./wallet-cli
> info initminer10
返回
> info initminer10
account: initminer10
pub_key: COS8fV44EgGUWjEKddPbfrXAaqYxYes4M99KLHYBwrXEj3hWP4XPr
priv_key: 4UKbH7TDr6FgFXNjzQdX3ucAXndzY4h7YBNNgnqjtUeLJkFXVg
status: unlocked
查看账户在链上的信息,可以操作
./wallet-cli
> account get initminer
返回
> account get initminer
GetAccountByName detail: {
"info": {
"account_name": "initminer",
"coin": "6499969988.999988 COS",
"vest": "0.000000 VEST",
"public_key": "COS5JVLLcTPhq4Unr194JzWPDNSYGoMcam8yxnsjgRVo3Nb7ioyFW",
"created_time": "1970/1/1 00:00:00",
"trx_count": 19,
"vote_power": 1000,
"stamina_free_remain": 95304,
"stamina_stake_remain": 864000000000,
"stamina_max": 864000100000,
"stake_vest_for_me": "11.000000 VEST",
"withdraw_remains": "0.000000 VEST",
"withdraw_each_time": "0.000000 VEST",
"next_withdraw_time": "1970/1/1 00:00:00",
"bp_vote_count": 1,
...
导入私钥生成本地账户
如果已知一个链上账户的账户名与私钥,但是没有本地生成 keystore
文件,这种情况就需要使用 import
命令导入私钥并生成 keystore
文件。尤其在更换机器的时候,就特别需要使用私钥导入本地账户。
./wallet-cli
> import initminer 4DjYx2KAGh1NP3dai7MZTLUBMMhMBPmwouKE8jhVSESywccpVZ
>
在本地环境下,initminer
的私钥是已知的,可以通过上述命令导入 initminer
账户。
通过 wallet
创建链上账户
和 EOS 类似,用户并不能自己创建账户,只能通过已经有账户的用户创建。
在本地环境下,initminer
账户有足够的余额来创建账户,导入即可。
./wallet-cli
> create initminer testuser1
上述命令会要求输入一个密码,用来给私钥加密。请不要使用容易被攻击的密码,并保管好自己的 keystore
。
Contentos内容公链对链上账户的命名方式有自己的要求,账户名称在长度和格式上都必须遵循一定的限制。如果你想创建一个以Alice命名的账户,那么会返回失败。具体而言,账户名称的长度在 6~16 个字符之间,支持小写字母和数字。运行 create
命令会创建一个链上账户,并在本地创建一个 keystore
文件。账户的公私钥是随机生成的,可以通过 info
命令查询公私钥详情。
助记词的重要性
COS公链采用了标准的 BIP39 协议,该协议可以帮助用户生成一组助记词,助记词再生成链上账户的公私钥对。
BIP39 协议描述了助记词或者助记句的实现,这一组容易记忆的单词为创建确定性钱包提供条件。它由两部分组成,生成助记词和转换助记词为二进制种子。这个二进制种子稍后可以通过BIP-0032或类似的方法生成确定性钱包。
首先,需要生成助记词。
./wallet-cli
> genKeyPair
Mnemonic: donate shaft leisure fashion basic oyster knock saddle broken prevent junior entire cake slice payment always direct system forum require smile bus follow expire
Public Key: COS7hGNoSNyAwUZ3kgkjFa4RCmsjcuZNxS2q2mfhMMML6CYZ5Dtqs
Private Key: 3PMfB7RY5irkcKTzRtWje3G4mhKRiGHYrriKDxyshxNdN4eAkN
这组助记词 donate shaft leisure fashion basic oyster knock saddle broken prevent junior entire cake slice payment always direct system forum require smile bus follow expire 会始终对应这个公私钥对。
然后,通过下面的命令创建链上账户。
./wallet-cli
> create_from_mnemonic initminer testuser2
本地账户的“锁定/解锁”
通过 list
命令,查询本地账户的状态。处于 lock
状态下,读取不了私钥,所有的请求也都不能发起。如果想要使用账户发送请求,需要 unlock
解锁账户状态。
./wallet-cli
> unlock initminer
输入设定的密码,可以解锁本地账户的状态。反过来,对已解锁的账户,也可以通过 lock
命令让账户进入锁定状态。
wallet
启动的时候,会默认导入 ~/.coschain
下的所有 keystore
文件。如果有其他路径的 keystore
文件,可以通过 load
命令导入。导入的账户,都是锁定状态。需要时,手动解锁。
长时间对账户不做操作,wallet
会自动让其进入锁定状态,避免被外人窃取账户的公私钥。
如何完成内容相关操作
作为一条内容公链,COS通过自身机制奖励生态内的用户发表形式多样的内容。相应的,这里也提供了命令去完成这些操作。仅仅是发布内容,用户并不会获取奖励,他们还需要获得其他人的投票,对内容进行认可。获得投票的数量和权重,决定了他可以获得奖励的多少,更好的内容更可能获得更多的投票。
发表内容
./wallet-cli
> post initminer "article" "hello world" "hello world for everyone"
返回
> post initminer "article" "hello world" "hello world for everyone"
Result: invoice:<status:200 net_usage:1630 cpu_usage:1 op_results:<> >
发布回复
和 post 相似,回复也是一种内容,也可以获得奖励。
./wallet-cli
> reply "intminer" "content" 1571218688384377456
Result: invoice:<status:200 net_usage:1630 cpu_usage:1 op_results:<> >
其中 1571218688384377456 指代一篇上链内容的 ID 号,也可能是回复内容的 ID 。
投票
执行以下操作,可以完成对某种内容的投票赞赏。
./wallet-cli
> vote "initminer" 1571218688384377456
Result: invoice:<status:200 net_usage:1630 cpu_usage:1 op_results:<> >
同样,这里的 1571218688384377456 表示上链内容的 ID 号。
欢迎加入COS技术社群,领取bounty奖励!
有疑问加站长微信联系(非本文作者)