Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

EOS权限系统

要的某少要kv
161 0 0

, c  C0 s/ J" X! B9 ^    向EOS区块链发起一些事务,比如说转账,需要得到账户的授权。
3 s; O* h, A1 b$ |$ t    账号交易可以通过权限转移做到。
1 a0 ]) c- m4 i0 d7 R4 @    新权限和action的绑定关系,可增加了eos网络权限的灵活性,通过单个权限的绑定,可将一个账户的权限分层管理,甚至一个公司的所有人都可以使用一个EOS账户来进行权限分离。% p; R+ y' ]: |* x

# p& F, A+ s  `" r    账户的授权是如何授权的?账户的权限里有一个阈值属性,当你的解锁状态的钱包中的有一把私钥能对应到那个权限所绑定的公钥上,而且权重刚好大于等于阈值时,那么就能成功签名,向区块链发送事务。
+ I8 m6 i8 b" a% }3 U1 I% W    权限配置
$ T; ]3 N* U* q0 r    首先当一个账户创建的时候,具备了两种基本权限。每个权限绑定到一个公钥上(单签名账户)或多个公钥上(多签名账户),除了绑定公钥也可以绑定到另一个有效的账户上:% i+ g3 F; m: J8 u
    owner:账号主权限,声明的这个账号的归属。只有极少数事务需要使用到owner权限。建议把拥有这个权限的私钥进行冷存储。不要分享给任何人。owner可以用来恢复其他权限。
: r4 W+ `9 `/ s: G4 h7 d5 C    active:活动权限,顾名思议,这个权限,一般用来做一些转账、投票、发起事务等常规操作。. n3 b! o+ r& m3 ]  s
    除了以上两种默认权限,还可以对账户自定义新的权限(计划在未来的账户管理软件中加入支持)。这种权限的可扩展性,非常灵活,给软件开发者提供了很多可能的使用场景。
  q& g: ~* _/ d& Z9 X% \5 H% ^6 I    权限的权重(weight)与阈值(threshold)
+ C% a% K! ?% e3 g. m    单签名账户(默认权限配置的账户)5 a3 h1 w4 c! Q" a+ R
    owner和active权限分别有一个值为1的阈值。
7 ~, t& {! S  Q4 j2 x2 n& O/ v$ j3 Z5 ]    owner和active所绑定的公钥,则分别有一个值为1的权重。" b* V7 ]- D& k
    怎么理解阈值和权重
! r& E. {$ L2 B% @4 q: m' S: d    举个例子来讲吧,把owner这个权限比作一扇门,打开这扇门需要一把正确的钥匙。而owner所绑定的那个公钥对应的那把私钥就是正确的钥匙。
  N8 h2 j. W: y# |" w7 e5 P5 F+ [    因此单签名账户就是权限的阈值和钥匙的权重都为1的一种账户类型。使用某个权限,只需要一把对应的私钥就行了
1 G( j. o+ Y& k) [. w* ^    多重签名账户5 @- y  z& p' x* H$ ^/ B3 y
    顾名思义,就是一个权限绑定了多个账户或公钥,权重之和大于等于owner权限的阈值,才能使用这个权限。) \  K5 j' H! z) J5 w1 S$ ?
    使用一个权限,可能需要不只一个公钥的签名了,也可能是两个、三个、五个。" l  k% x; O% Y  m. Y
    命令操作. U  j: f/ E* D- q* M  B
    EOS版本号:v1.0.6# Q) R2 Y$ Q7 f7 m
    环境:私有链
, Q9 `9 K3 S0 ^' u- h9 m) G    操作系统:centos79 l) _/ f( J; @
    参考资料:https://developers.eos.io/eosio-cleos/reference#cleos-set-account
3 I; V0 ~6 m0 {4 A* C: C    查看账号权限: y7 n$ `* B0 t, K
    cleosgetaccounteosioddztest
" z3 I/ }5 S; A- S& e' x    permissions:* ]7 y/ U$ m$ o9 H  {8 c# K
    owner1:1EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f9
! E3 c7 ~4 j+ k2 }    active1:1EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f9
: D8 w* X4 u6 P8 ?2 ?$ b    memory:
. d$ M3 _8 \) a, c' ]1 [' d    quota:unlimitedused:2.66KiB
; C  N) b% i; Y  P: V% j    netbandwidth:
, x$ i1 f4 t# O% F    used:unlimited3 y1 [0 T$ z/ H: I( s5 Z
    available:unlimited
+ m( q6 A" ^1 H: z4 l0 ]* @( _    limit:unlimited
) l2 p* _  `2 V% D- U/ o6 O- `8 g2 `    cpubandwidth:
6 K4 W# N5 b" V) v    used:unlimited
* {  c1 ?, F) ?) E    available:unlimited
. B3 C; s. o' a* h    limit:unlimited2 g- }# q% W! H3 h' O
    设置权限
- J; B* ^6 R% ]7 d( J    //修改权限4 s8 L2 O  P# u
    cleossetaccountpermission$ACCOUNT_NAME$PERMISSION_NAME$PUBKEY_OR_ACCOUNT_NAMEactive-psandwichfarm@active' O. J# f4 k( T) }# Y
    参数; j: M6 |- N) [' ~5 ]
    accountTEXT-为其设置/删除权限授权的帐户
3 U1 ^* M7 t4 Z0 z    permissionTEXT-设置/删除权限的权限名称
* F6 X9 Q. [& `% _5 H    authorityTEXT-[delete]NULL,[create/update]公钥,JSON字符串或定义权限的文件名
3 x" ]; s  Q+ O; J2 {7 f; S    parentTEXT-[创建]此父母权限的权限名称(默认为:“active”)* x2 X2 Z& E+ r4 e5 b' [0 e
    选项" C. C8 ^# ~- D
    -h,–help打印此帮助信息并退出
; H% g: Q& H9 a    -x,–expirationTEXT-设置交易到期之前的秒数,默认为30秒0 y. R! y' M& ~3 H1 y- P6 X
    -s,–skip-sign指定是否应使用解锁的钱包密钥来签署交易
# f5 ?8 c, n, o    -d,–dont-broadcast-不要向网络广播交易(只需打印到标准输出)
$ k8 P6 r: ~$ d  G) ^1 b5 a5 O    -p,–permissionTEXT-要授权的帐户和权限级别,如’account@permission’(默认为’account@active’)' J$ V/ O9 P' T; d& J
    –max-cpu-usage-msUINT-设置CPU使用预算的毫秒数上限,用于执行交易(默认为0,表示无限制)
% D/ X6 j( ~) N) f    –max-net-usageUINT-为交易设置净使用预算的上限(以字节为单位)(默认为0,表示无限制)2 ]3 G1 f$ i/ p
    用法
! w3 i! x4 w) N2 U+ }    要修改帐户的权限,您必须拥有该帐户的权限和您正在修改的权限。+ V) v. E: U* J4 J3 L
    //example
* h1 V  ]6 Y. k6 S  B! R/ a    //修改权限3 H; }% {: P  e( {2 E& j
    cleossetaccountpermissioneosioddztestactiveEOS69bTRDpiVr9wymPY3uKK9K28N1kh7kxR1wn6ynhbpWAasJKW1Kowner-peosioddztest@active: M6 x* B3 C+ V' ]
    //再次查看eosioddztest权限,发现active已经改变$ L9 E$ U8 T, w% q
    cleosgetaccounteosioddztest/ N) }; R9 M0 J" |$ d
    permissions:
8 H+ e7 o8 C$ Z2 C: E4 q7 x5 e    owner1:1EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f9
- u9 g2 J" p" p. H) H    active1:1EOS69bTRDpiVr9wymPY3uKK9K28N1kh7kxR1wn6ynhbpWAasJKW1K9 @3 Z; G, ]6 K. Z3 X
    memory:
1 w; u1 P1 E7 W0 q. G    quota:unlimitedused:2.66KiB0 h- q* ]# I( q. ^3 u
    netbandwidth:
0 L0 v7 D  l* Y& ]  j# w% w6 r    used:unlimited- j9 ~/ B" R& `& ~
    available:unlimited
+ x2 A( c( Q# u7 @    limit:unlimited1 J- E3 M" z0 v3 A, b# r
    cpubandwidth:
6 h  Z5 \* e7 \# R" K% i. a: O/ [    used:unlimited
1 {& p3 G. i: M4 R0 y* h' J4 \    available:unlimited
/ {8 h; c+ m. p    limit:unlimited
; I# q6 |- L3 S. c    权重和阈值模式, E+ J9 F5 z. Z& F
    //修改权限
* m9 Y, O" M9 `; {- @    cleossetaccountpermissioneosioddztestactive'{"threshold":1,"keys":[],"accounts":[{"permission":{"actor":"trustwallets","permission":"active"},"weight":1}]}'owner-peosioddztest@active
% c5 H* _3 ?( t1 X    查看权限,发现action已经改变为权重模式,如看详情可以-j,使用json方式
( i; E* ]" T) r+ K. u    cleosgetaccounteosioddztest" D' B$ W: w; _+ w$ A+ p& D, W2 g# g
    permissions:' s( G9 ^4 i* a- J) n
    owner1:1EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f9
0 H( w( l) f8 }, l* |    active1:1trustwallets@active," [. K' t; v' R% l# c# q) }. h$ F% p
    memory:' j; z1 |  [5 U4 k! G6 c; r) i
    quota:unlimitedused:2.643KiB
1 f8 C0 r+ P* H$ Y4 g% I    netbandwidth:5 ~# i/ N, `* X3 r
    used:unlimited5 x8 {8 c4 k  b& o6 W
    available:unlimited6 b! l* Y5 Q4 j+ h% X6 o
    limit:unlimited
* s) Q8 u, q& }7 G- y4 H( {- Z, b4 r    cpubandwidth:% `0 @) E7 {" T+ J5 e! j
    used:unlimited
9 G+ Z$ _) |4 ?8 Y' F    available:unlimited
* b! U" q$ p  [+ Q" ?% K    limit:unlimited; q- s6 X- ?/ i1 r3 i9 f' D
    参数
! G/ M" j5 ^% d    accounts
# A7 c: T5 I! ~1 n    {
$ i# {2 g/ D2 v* d4 H7 B    "threshold":100,/*签名需要权重值达到多少的一个整数*// J. |+ O6 N! u2 g- W% }0 L3 H
    "keys":[],/*包含eos风格的公约和权重*/+ _2 a3 S, F" E' I! _4 H
    "accounts":[]/*包含eos账号和权限,权重*/9 T- ]4 _. m+ P$ C& Z5 y6 j+ M0 W
    }
0 F& Q7 [9 d, C* k+ D    keys
, N4 {( z7 a+ V  G8 F( Q. q    {
; ]1 ?$ g( H3 ~/ Z2 u    "permission":{0 L# R: z; s2 i; x5 X, _% Q
    "actor":"sandwich",
$ v# t2 ]' G0 T+ o. l    "permission":"active", o; T& b8 A# k( }3 d5 ~% [- e: s
    },7 G; _2 J, U2 h  n* i
    "weight":75
3 d: N4 o8 D; X4 k8 U5 A& y" d    }
/ ^9 }$ p) K' y' q# `3 c    添加权限4 s8 Z- N5 R! B+ U4 X5 D  T
    cleossetaccountpermissioneosioddztesttest'{"threshold":1,"keys":[{"key":"EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f9","weight":1}],"accounts":[]}'active
' ^  G1 V9 s" N3 O$ u4 J2 C    查看权限多了一个test
" }4 G' e: h# @& {( I7 p    cleosgetaccounteosioddztest% {; g% `* A  Z
    permissions:
5 {  E; f- }" }# S% o8 Y, i    owner1:1EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f9
" s. p: q; ?) B" H    active1:1EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f9
! x9 e, K  w0 V5 s( l    test1:1EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f92 g2 d/ g9 D' v! a# b
    memory:: h0 ^) |4 y4 @6 q& g
    quota:unlimitedused:2.99KiB! @* {# R' _+ Y
    netbandwidth:! Q8 y9 x9 S7 A+ S7 k) J/ \5 A6 h
    used:unlimited
& B+ X& M$ G4 ?  @# u# [    available:unlimited- K7 m  F' \7 H+ n! I9 U
    limit:unlimited, g# _/ o3 G" s5 R1 X6 a
    cpubandwidth:
7 x# r. G! e0 X    used:unlimited: t  W9 E) N7 P" I
    available:unlimited% |- q1 C# F/ W) ?0 Z8 y6 M% u( x
    limit:unlimited- _7 W3 X, F0 A( `9 ^
    删除权限
) b! m* l7 k4 L/ c    //删除权限
6 f$ {0 B! A. _7 S2 `2 r; s, p    cleossetaccountpermissioneosioddztesttest'NULL'active* \2 V7 s# D% q, ^
    cleosgetaccounteosioddztest; j6 _5 M3 b( v' A% M, [& N3 @
    permissions:
$ K+ s( c* a9 m2 h$ O    owner1:1EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f9/ |  y. c& E% p1 S
    active1:1EOS8Lbyk31K78BaMGuP8WHiC1tL8tphrQjRir8pGccxxbg9zVA4f9; m; A9 L2 h  p+ A( Z# x
    memory:
- _6 ^* Y; ?7 P: H5 z" X    quota:unlimitedused:2.99KiB
" S) _9 K% G, |  h0 a  i4 D' @6 W    netbandwidth:4 |7 [) s$ \0 e; T3 ^3 t$ y
    used:unlimited
4 e, I; l+ l. N    available:unlimited
8 k% S& j3 {$ T8 e0 ]    limit:unlimited( d9 J9 W( x. E' L" ]
    cpubandwidth:6 V& G; _, X& g  {$ v- {
    used:unlimited4 d+ B1 d. }) p4 X+ E7 {
    available:unlimited
: N/ _( i8 Y6 e5 {- _    limit:unlimited
; A3 {( |4 L' K' ]* x    权限绑定action* |3 [3 d5 z5 s; n5 N3 a
    //将之前创建的test权限绑定交易事件
8 _. @. p7 z& r1 R  B7 k! e/ V- m5 h  X    cleossetactionpermissioneosioddztesteosio.tokentransfertest
' Q) G$ R, Y/ K0 e    //使用test权限进行交易% g- N. S  Y+ D3 p% Z& A: q
    cleospushactioneosio.tokentransfer'["eosioddztest","trustwallets","100.0000EOS","transfer"]'-peosioddztest@hello# R/ ^# Q0 z" ?6 o1 {6 G6 E5 m. D
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

要的某少要kv 小学生
  • 粉丝

    0

  • 关注

    0

  • 主题

    7