1

作为领先的内容公链,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奖励!
telegram 技术群.png


ByteDance
5 声望4 粉丝