亿婴天使娱乐计次卡:手把手教你使用EOS多重签名 – ?;つ愕淖什?/h1>

冯雅杰 发布在 技术指南 7 8844

秘密天使娱乐无极限 www.7j6mr.com.cn 最近频繁曝出用户 EOS 被盗的事件,作为一个刚上线才 1 个多月的项目,在各种设施都不太齐全的情况下,这种新闻一旦流出,都会让人感到 FUD(Fear、Uncertainty、Doubt),不仅你会怕,我也怕,我会想 XX 钱包会不会偷偷把私钥上传到服务器了?如果是这样,我会不会被中间人攻击???它们的服务器会不会被拖库???我的剪切板不会也被某某软件监听了吧?万一我的私钥被「彩虹攻击」了怎么办?……简而言之,任何人都害怕自己的资产被盗,虽然这是小概率事件,但它一定会发生,要不然也不会有「墨菲定律」存在。

使用 Open Blockchain 系统,我们需要具备?;ぷ约鹤什哪芰?,因为这个系统不具备挂失、冻结、回滚等功能。这篇文章的目的,就是在 BM 的团队做出基于 iPhone 的硬件钱包之前,教你如何在去中心化的世界里?;ぷ约旱牟撇?。

相信你已经猜到了,提高钱包安全性的办法就是多重签名(Multiple Signatures),背后的逻辑也很简单,如果 1 个秘钥被破解的概率是?10^{-n}10?n,那么使用 2 个就变成了?10^{-2n}10?2n,以此类推。你可能会说,多签技术在 Bitcoin 诞生的时候——10年前就有了,这可不是 EOS 的专利和创新。确实如此,不过 EOS 在此基础之上做了一些优化,在我看来,这些优化足以让多重签名技术更为普及,乃至于在大范围内提升了账户的安全性。

3

EOS 对钱包的优化主要体现在两点:

  1. 引进了账户的概念,让原本抽象的事物更为具体,在过去,谁会把一个256位的数字(私钥)和一个账户对应起来???如果一个数字对应一个账户,那谁会意识到用多个数字(私钥)对同一个账户去签名呢?但有了账户的概念之后,一切变得非常自然和清晰。
  2. 当你创建一个账户的时候,它天然的就对应了两个秘钥,也就是说,这个体系一开始就给你灌输了:你至少要用两个秘钥来?;つ愕?EOS 及其他 Tokens。

在动手之前,我再来给你普及下 EOS 账户的设计逻辑,下表是我的 EOS 账户的设定:

12

上表中,除了权限(Permission)和秘钥(Keys)之外,还有两栏,一个是权重(Weight),另一个是域值(Threshold),这两个概念也至关重要,还是拿大家熟悉的转账来举个例子吧,按照上表的配置,如果你想转账给?vitalikoneos?这个账户,你需要将秘钥的权重相加,如果结果不小于域值,该笔交易才被认为是合法的,即?EOS7...?和?EOS8...?对应的私钥都得对该笔交易签名,它们的权重和才不小于域值 2 。同样的道理,如果你想修改?@Active?的秘钥,你需要用?EOS6...?和?EOS5...?所对应的秘钥同时对这个操作进行签名??梢钥吹轿矣昧?4 对秘钥对来管理我的账户,这个安全性已经非常高了。当你创建一个账户时,你的账户默认包含两种权限:@owner?和?@active,其中?@owner主要用来管理其他权限的变更,例如修改?@active?对应的 Keys,新建或删除一个?@publish?权限等;而?@active?权限在创建之初主要用来执行转账等合约操作,即如果你要转出 EOS,你需要?@active?下的 Keys 对该笔交易签名。

好了,原理讲清楚了,下面我会手把手教你怎么操作。在 BM 的钱包没有发布之前,最安全的钱包当然是?github?上的「命令行钱包」了,这个钱包由两个组件组成:keosd和?cleos,其中?keosd?用来保管私钥,而?cleos?提供交互命令行,并在?keosd?和?nodeos(全节点) 之间建立通信,它们的关系如下:

2

准备工作

首先,你要安装 EOSIO 软件,推荐你使用 docker,下载 EOSIO docker 镜像,这个镜像是官方打包的,可以放心使用

$ docker pull eosio/eos-dev

完成后,运行?keosd

sudo docker run -d --restart=unless-stopped --name keosd   \
    -v /your/eosio-wallet/path:/opt/eosio/bin/data-dir  \
    -v /your/eosio-wallet/path:/root/eosio-wallet \
    -t eosio/eos /opt/eosio/bin/keosd  \
    --wallet-dir /opt/eosio/bin/data-dir \
    --http-server-address=127.0.0.1:8900

上面的命令中,/your/eosio-wallet/path?需要你自行配置,keosd?管理的钱包文件会放在该路径下。

设置?cleos?的别名,你可以将?alias?命令加到?~/.zshrc(macOS)或?~/.bashrc(Linux) 中,接着执行?cleos get info?命令获取主网信息

$ alias cleos='sudo docker exec -i keosd /opt/eosio/bin/cleos \
 --wallet-url //127.0.0.1:8900  -u //mainnet.eoscanada.com '
$ cleos get info
{
  "chain_id":"aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906",
  ...
}

确定?chain_id?的值,正确无误后,就可以开始“试验”了——一定要先在小额账号上操作,避免误操作导致的损失。

创建钱包、秘钥、账户

要实现多签,你至少需要 2 对秘钥,秘钥存在钱包里,所以这里最好也创建两个钱包,每个钱包管理一对秘钥,这样你的钱包就可以分开保管,避免一个钱包泄露后两个秘钥都丢失的情况。

$ cleos wallet create -n w1
Creating wallet: w1
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KRMedja6trXRT9Pi4z4gLN5YLE95mxQBuBKvy9UCkBaGWMNUEx"
$
$ cleos wallet create -n w2
Creating wallet: w2
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KT6RSfSm5cSBQ4jujBc8N8yXG6KwyphnYe8Rm1uMfFFUS5qkjF"
$
$ ls /your/eosio-wallet/path
w1.wallet        w2.wallet

上面的命令为你创建了 2 个钱包 w1 和 w2,在?/your/eosio-wallet/path?路径下,你可以看到这两个钱包文件,注意:?PW?开头的密码你一定要记录下来,和钱包分开保管,钱包解锁(unlock)的时候需要这个密码。

为每个钱包创建和导入秘钥对

$ cleos wallet create_key -n w1
Created new private key with a public key of: "EOS7bePjtecDvVwRj937B3aaaXyph1vGdAkgu5jibYJ1vfWNaCUWk"
$ cleos wallet create_key -n w2
Created new private key with a public key of: "EOS4z4VM5QH4NWAGf2BpYKhHxhqM7Dti2Ssmk6XXk1v7U1kjaVPgS"

使用过老版本 EOSIO 的同学一定注意到了这个差异:新版本的 EOS 在创建秘钥的过程中把私钥隐藏了,且直接将私钥导入到了钱包,这一步优化将你犯错的可能性降至 0——让你没有机会复制私钥(如果某软件监听了你的剪切板,再把监听结果上传到他们的服务器,你的私钥就泄露了),干得漂亮!

现在秘钥和钱包都准备好了,还差账号,这里要分两种情况考虑:

  1. 没有账号的情况下,需要创建新账号
  2. 已有账号的情况

1. 创建新账号

如果你之前没有账号,就需要先创建账号,同时用 EOS 来抵押计算(CPU)和带宽(Bandwidth)资源、购买存储资源(RAM),然后再执行第 2 步(如果你已有账号,直接到第 2 步),先创建账号:

$ cleos system newaccount --stake-net '0.1 EOS' --stake-cpu '0.1 EOS' \
> --buy-ram-kbytes 4 friends_account vitalikoneos \ 
> EOS4z4VM5QH4NWAGf2BpYKhHxhqM7Dti2Ssmk6XXk1v7U1kjaVPgS

上面的参数里,friends_account?是其他人的账号,你可以找个朋友帮你创建,这一步里,抵押了 0.2 个 EOS,同时还购买了 4K 的内存,最后两个参数分别是新账号名?vitalikoneos?和该账号对应的初始公钥,完成这一步后,你就可以根据第 2 步来修改权限了。

2. 已有账号

如果你已有账号,只需将现有账号转移到新创建的秘钥下即可,假设你的账号为?vitalikoneos?,下面的命令会设置该账号下的?@owner?秘钥,

$ cleos set account permission vitalikoneos owner '{
    "keys": [{
        "key": "EOS7bePjtecDvVwRj937B3aaaXyph1vGdAkgu5jibYJ1vfWNaCUWk",
        "weight": 1
    },
    {
        "key": "EOS4z4VM5QH4NWAGf2BpYKhHxhqM7Dti2Ssmk6XXk1v7U1kjaVPgS",
        "weight": 1
    }],
    "threshold": 2
}' -p [email protected]
executed transaction: 4e309dc8c3e0535a4d9fec7eb575d...  208 bytes  1201 us
warning: transaction executed locally, but may not be confirmed by the network yet
#         eosio <= eosio::updateauth            {"account":"vitalikoneos","permission":"owner","parent":"","auth":{"threshold":2,"keys":[{"key":"EOS...

@owner?权限设置完后,同样的方法再设置下?@active?的权限,差异是修改?@active?权限时,需要指定?@owner?这个“拥有者”(倒数第 2 个参数),因为只有它才可以修改?@active?:

$ cleos set account permission vitalikoneos active '{
    "keys": [{
        "key": "EOS7bePjtecDvVwRj937B3aaaXyph1vGdAkgu5jibYJ1vfWNaCUWk",
        "weight": 1
    },
    {
        "key": "EOS4z4VM5QH4NWAGf2BpYKhHxhqM7Dti2Ssmk6XXk1v7U1kjaVPgS",
        "weight": 1
    }],
    "threshold": 2
}' owner -p [email protected]
executed transaction: 4e309dc8c3e0535a4d9fec7eb575d...  208 bytes  1201 us
warning: transaction executed locally, but may not be confirmed by the network yet
#         eosio <= eosio::updateauth            {"account":"vitalikoneos","permission":"active","parent":"owner","auth":{"threshold":2,"keys":[{"key":"EOS...

执行成功后,你可以通过?cleos get account vitalikoneos -j?命令查看修改是否生效,你还可以通过?https://scaneos.io/?区块浏览器来查看指定账号的权限信息。

亲自试一试

修改好权限后,你应该会迫不及待的想试一下了,我们先把 2 个钱包都解锁,然后执行?transfer?操作,可以看到转账成功了:

$ cleos transfer vitalikoneos other_account "0.0001 EOS" 'memo'
executed transaction: ba4e886fe9e49c9d3093585273341753e  144 bytes  1064 us
warning: transaction executed locally, but may not be confirmed by the network yet
#   eosio.token <= eosio.token::transfer        {"from":"vitalikoneos","to":"other_account","quantity":"0.0001 EOS","memo":"memo"}
#  vitalikoneos <= eosio.token::transfer        {"from":"vitalikoneos","to":"other_account","quantity":"0.0001 EOS","memo":"memo"}
#  other_account <= eosio.token::transfer        {"from":"vitalikoneos","to":"other_account","quantity":"0.0001 EOS","memo":"memo"}

接下来我们锁住任意一个钱包,例如 w1,然后再重复上面的转账操作

$ cleos wallet lock -n w1
$ cleos transfer vitalikoneos other_account '0.0001 EOS' 'memo'
Error 3090003: provided keys, permissions, and delays do not satisfy declared authorizations
Ensure that you have the related private keys inside your wallet and your wallet is unlocked.
Error Details:
transaction declares authority '{"actor":"vitalikoneos","permission":"active"}', but does not have signatures for it.

可以看到出错了,错误原因是没有满足转账权限,实验成功。至此,EOSIO 上的多重签名实操就结束了,理解了上述操作后,你就可以独立保管好自己的 EOS 了,同时再也不用担心钱包被贼惦记了,是不是既很赞又很简单的样子?

如果你觉得有帮助,别忘了将这篇文章转发给其他人,帮助更多人?;に堑氖肿什?。如有任何困惑,欢迎给我反馈,微信:weibo_fengyajie。

相关文章:

参考:

版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。
发文时比特币价格 ¥44589.66

评论:7

您需要登录后才可以回复 登录|注册
    Author Image
    梅梅_H3l 9天前

    ????????休息休息

    +1
    +1
    我要点评
    Author Image
    梅梅_H3l 9天前

    ????????休息休息

    +1
    +1
    我要点评
    Author Image
    梅梅_H3l 9天前

    ????????休息休息

    +1
    +1
    我要点评
    Author Image
    投资三十年 11天前

    搞这么复杂装什么B,能简单些嘛

    +1
    +1
    我要点评
    Author Image
    jorbin 11天前

    写的太好了,根本看不懂……

    +1
    +1
    我要点评
    Author Image
    ockmeta_bma_p7b 11天前

    很好很好看的

    +1
    +1
    我要点评
      Author Image
      Financer1121 11天前

      你能看懂?

      +1
      +1
      我要点评
  • 习近平:在同各界优秀青年代表座谈时的讲话 2018-12-17
  • 【波士通达奔驰车型报价】波士通达奔驰4S店车型价格 2018-12-17
  • 昔日国脚在中超升班马难登场 巅峰期曾是当红国脚 2018-12-16
  • 驴友探险失足摔伤被困深山 消防官兵抬着担架蹚河救人 2018-12-16
  • 兵团一集体一个人获誉全国非遗保护工作先进 2018-12-15
  • 苹果:明确禁用iPhone挖加密货币 2018-12-14
  • 在深入推动长江经济带发展座谈会上的讲话 2018-12-14
  • 的确,呆子七窍通了栁窍。[哈哈] 2018-12-13
  • 全国最美基层法官彭文忠最珍视当事人那一声声谢谢 2018-12-13
  • 广州市第十五届人大常委会第十一次会议第二次全体会议 2018-12-12
  • 言而无信似乎成了特朗普政府的特质与标致 2018-12-12
  • 【理上网来·喜迎十九大】Cheng Li:过去五年中国在多领域取得巨大成效 2018-12-11
  • 感受冬季渔猎奇观 30名专业冬捕师现场示范 2018-12-10
  • 即使中美贸易归零,中国也不会屈服美国的大棒政策 2018-12-10
  • 血管的寿命决定人的寿命!这几种行为最伤血管 2018-12-09
  • 73| 965| 728| 773| 717| 575| 363| 91| 712| 742|