命令行玩转EOS系列第五篇 set智能合约、更改Owner权限

上篇我们已经介绍完了一级子命令get ,本篇继续介绍下一个一级子命令set。通过该命令可一键部署智能合约、并实现EOS账户的权限变更操作,如更改账户的Owner权限、实现权限多签、并完成自定义权限的action映射,EOS账户体系介绍可见【

EOS科普系列第三篇 | 账户体系详解

】。cleos(v1.1.0版本)的所有子命令如下图所示:

1、version:获取版本信息

2、create:在EOS区块链上或链下本地创建一些东西

3、get:从EOS区块链上获取各种数据和信息

4、set:设置或者更新区块链状态

5、transfer:在EOS账户之间进行转账

6、net:管理或查询本地p2p网络连接状态

7、wallet:管理本地钱包

8、sign:对交易进行签名

9、push:把任意交易发送至区块链

10、multisig:多重签名功能

11、sudo:通过超级账户eosio.sudo执行命令,可越过权限验证,目前该超级账户还未创建

12、system:向区块链发送系统合约内置的相关动作

4、set

一级子命令set主要用于设置或者更新区块链状态,主要包括部署智能合约、更改账户权限等。目前下面有5个二级子命令,分别为code、abi、contract、account、action。

4.1code

功能:在某个账户上部署或者更新智能合约代码,用法如下:

cleosset code [OPTIONS] account code-file

【必填参数】

# account TEXT智能合约代码所绑定的账户

# code-file TEXT 合约代码(WAST或WASM格式)所在的完整路径

【非必填参数】[OPTIONS]

# -x,--expiration 交易过期时间,默认30秒

# -f,--force-uniqu 使得交易唯一

# -s,--skip-sign 跳过签名

# -j,--json 以json格式打印结果

# -d,--dont-broadcast 不向全网广播

# -r,--ref-block TEXT 设置TAPOS使用的区块高度或区块id

# -p,--permission TEXT 给该交易进行授权的账户及权限

# --max-cpu-usage-ms UINT 设置cpu使用量上限,默认无限

# --max-net-usage UINT 设置net使用量上限,默认无限

【示例】

cleossetcode eosio.token contracts/eosio.token/eosio.token.wast

#测试网上部署eosio.token合约的代码

4.2abi

功能:在某个账户上部署或者更新智能合约ABI,用法如下:

cleossetabi [OPTIONS] account abi-file

【必填参数】

#account TEXT 智能合约ABI所绑定的账户

#abi-file TEXT 合约ABI文件所在的完整路径

【非必填参数】[OPTIONS]

# 同4.1

【示例】

cleosset abi eosio.token contracts/eosio.token/eosio.token.abi

#测试网上部署eosio.token合约的abi

4.3contract

功能:在某个账户上部署或者更新智能合约,相当于4.1和4.2的结合版,用法如下:

cleosset contract [OPTIONS] account contract-dir [wast-file] [abi-file]

【必填参数】

# account TEXT 发布智能合约的账户

#contract-dirTEXT 包含合约.wast和.abi文件所在的路径

【非必填参数】[OPTIONS]

# wast-fileTEXTcontract-dir中包含合约WAST或WASM的文件

# abi-fileTEXTcontract-dir中的合约ABI文件

# 其它同4.1

【示例】

cleossetcontracteosio.tokencontracts/eosio.token

#测试网上部署eosio.token合约

4.4account

设置或者更新区块链上的账户状态,目前下面只有一个三级子命令permission。

4.4.1permission

功能:通过该命令可更改账户权限,包括Owner权限、创建或删除自定义权限、设置多签权限等。用法如下:

cleosset account permission [OPTIONS] account permission authority [parent]

【必填参数】

#account TEXT需更新或删除权限的账户

# permission TEXT 需更新或删除的权限名

# authority TEXT NULL为删除,公钥为创建或更新,或JSON格式定义多签

【非必填参数】[OPTIONS]

# parent TEXT 创建权限时可指定该权限的父权限,默认Active

# 其它同4.1

【示例】

1、更改Owner权限为单签

cleosset account permission eosio owner EOS56uXnfLpwVntxnDQ2woKxgNhR7uT7qjWMxktDRqecourVWwmnS -p eosio@owner

# 测试网上通过Owner权限更改账户eosio的Owner权限为单签

2、更改Active权限为单签

cleossetaccountpermission eosio active EOS56uXnfLpwVntxnDQ2woKxgNhR7uT7qjWMxktDRqecourVWwmnS owner

# 测试网上通过Active权限更改账户eosio的Active权限为单签

3、创建自定义权限voting为单签

cleossetaccountpermission eosio voting EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV active

# 测试网上通过Active权限创建自定义单签子权限voting,此时该权限不能进行任何操作,需要将该权限与某个action进行映射后才可通过该权限操作某个action,4.5便会讲如何进行权限映射

4、更改Owner权限为多签

cleossetaccount permission eosio owner '{"threshold":3,"keys": [{"key":"EOS56uXnfLpwVntxnDQ2woKxgNhR7uT7qjWMxktDRqecourVWwmnS","weight":2},{"key":"EOS6RiBvFzNog2Z2VrTgrqb7PLu2qAWzmU8G83Qf7BeXkn9tGycx3","weight":1}],"accounts": [{"permission":{"actor":"vc1","permission":"owner"},"weight":1}],"waits": []}}' -p eosio@owner

# 此命令将eosio账户的Owner权限更改为了多签,其中权限阈值为3,公钥EOS56u...权重为2,公钥EOS6Ri...权重为1,账户vc1的Owner权限的权重为1。因此,任何一方都不能单独操作eosio账户的Owner权限,需结合起来通过多重签名才能行驶eosio账户的Owner权限。EOS的账户权限体系具体介绍可参见【EOS科普系列第三篇 | 账户体系详解】。

5、可通过以下命令来查看结果

cleosget account eosio

6、删除自定义权限voting

cleossetaccount permission eosio voting NULL

4.5action

设置或者更新区块链上的action状态,目前下面只有一个三级子命令permission。

4.5.1permission

功能:通过该命令可设置或者更新账户的action权限,包括映射某个action到自定义权限等。用法如下:

cleosset action permission [OPTIONS] account code type requirement

【必填参数】

#account TEXT 需更新或删除权限的账户

# code TEXT绑定该action所属智能合约的账户

# type TEXT action的类型

# requirement TEXT为NULL时即删除权限映射,为权限名时即创建或更新权限映射

【非必填参数】[OPTIONS]

# 同4.1

【示例】

cleosset action permission vc1 eosio voteproducer voting

#将投票action映射到voting权限,完成后可通过voting权限操作vc1账户的投票

cleosset action permission vc1 eosio voteproducerNULL

# 删除vc1账户voteproducer的权限映射

命令行玩转EOS系列定于每周四定期更新。本篇我们介绍了第四个一级子命令set。下一篇我们将继续介绍第五、六个一级子命令transfer与net。

加入EOS开发者社区

微信扫码加群秘进群

更多有价值的悄悄话,欢迎加入知识星球

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180809G1HSZ000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券