首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在智能契约中处理授权

如何在智能契约中处理授权
EN

Ethereum用户
提问于 2020-01-22 11:10:13
回答 2查看 1.2K关注 0票数 3

我已经在Azure区块连锁服务上部署了一个仲裁网络,以供特定邀请的财团成员使用。我还没有探索提供的隐私特性。但是我注意到某些行为让我想知道授权是如何在任何基于Ethereum的块链中处理的。

  1. 互联网上的任何人,如果知道网络中任何节点的RPC (HTTPS访问密钥),并具有已部署的契约地址& ABI,可以使用web3.eth.accounts.create()在其笔记本上创建一个帐户,并开始发送签名消息来读取状态变量,并执行部署在网络上的任何智能契约的任何功能。
  2. 互联网上任何知道网络中任何节点的RPC URL(HTTPS访问密钥)并具有已部署的契约地址& ABI的人,都可以通过使用存储在geth节点本身上的帐户来读取状态变量并执行部署在网络上的任何智能契约的get函数。

授权是通过将授权帐户硬编码到合同中并在每个功能范围内进行检查完成的吗?如果是,当帐户的私钥丢失时会发生什么?聪明的合同会变得不可用吗?

EN

回答 2

Ethereum用户

回答已采纳

发布于 2020-01-22 16:35:06

Azure提供了一个RPC安全层,它强制对网络的访问控制。为了向RPC接口提供身份验证,可以使用基本身份验证、基于证书的身份验证或链接到身份提供程序。

在您成为网络(rpc )的一部分之后,您就拥有了仲裁状态授权层(称为许可模型),这个授权层将加强私有状态和公共状态之间的分离(更容易理解,可以说是私有的还是公共的)。但是,除了私有状态和公共状态之间的分离之外,此层不强制授权。

目前,智能契约开发人员需要提供一个适合其应用程序的基于函数的授权模型(最常用的是“所有者模式”),

从角度来看,RPC安全、->、仲裁、状态授权层、->自定义构建了智能契约授权层。

仲裁基于智能契约的执行框架提供了一种通用的管理许可网络的方法,但是它在私有/公共状态授权层运行,而不是智能契约功能级别。

互联网上的任何人,如果知道网络中任何节点的RPC,并具有已部署的契约地址& ABI,可以使用web3.eth.accounts.create()在他们的笔记本上创建一个帐户,并开始发送签名消息来读取状态变量,并执行部署在网络上的任何智能契约的任何功能。

如果您的RPC接口不安全(不需要身份验证并绑定到0.0.0.0),那么是的,任何人都可以与网络交互并询问网络,但这并不意味着他们将能够与私有状态交互。只有当公开的节点是特定契约的私有电路的一部分时,才会发生这种情况。

互联网上的任何人,如果知道网络中任何节点的RPC,并具有已部署的契约地址& ABI,就可以通过使用存储在geth节点本身上的帐户来读取状态变量并执行部署在网络上的任何智能协议的get函数。

不,帐户必须被解锁,为了解锁帐户,你需要密码。

授权是通过将授权帐户硬编码到合同中并在每个功能范围内进行检查完成的吗?

是的,如果使用“所有者模式”

当帐户的私钥丢失时会发生什么情况?聪明的合同会变得不可用吗?

如果您丢失了一个帐户的私钥,并且您有一个依赖于来自该帐户的签名的资源,那么游戏就结束了。

我建议你阅读以下内容:

http://docs.goquorum.com/en/latest/Security/Framework/Overview/ https://solidity.readthedocs.io/en/v0.4.24/common-patterns.html#restricting-access https://blog.trailofbits.com/2018/09/05/contract-upgrade-anti-patterns/

票数 3
EN

Ethereum用户

发布于 2020-01-22 13:58:28

你是对的-任何有地址的人都可以打电话给公共合同。防止这种情况的唯一方法是在契约中有检查来自授权地址的呼叫的代码。

如果私钥丢失,则需要更新合同以替换该授权地址。

我建议你看看昆仑的基于智能契约的权限模型

票数 3
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/79214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档