首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >合同功能安全吗?

合同功能安全吗?
EN

Stack Overflow用户
提问于 2016-04-15 13:31:48
回答 4查看 371关注 0票数 0

我正在使用testrpc和web3。

我使用下面的成语来确保只有先前定义的用户才能做一些事情:

代码语言:javascript
复制
function doSomethingProtected() {
        if ( msg.sender != authorizedUser )
                throw;

        flagSomething = true;
   }

在使用web3实例化的合同上调用函数时,如下所示:

代码语言:javascript
复制
myContract.doSomethingProtected( { from: "0x..." } );

啊,真灵。起初,我很高兴,但后来我意识到,web3 API没有要求我为私钥或类似的东西提供任何密码。

任何人只要了解某个人的公钥/地址,就能调用这个函数吗?

这个成语在例子中的使用使我相信Ethereum合同的一个好处是它确保了msg.sender在密码上得到了保证。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-15 14:14:02

原因是您使用的是testRPC,它不锁定帐户,因此不需要密码。

如果您要使用geth进行此操作,则需要在发送帐户之前将其解锁。

如果没有私钥,该函数将抛出一个错误,因此您使用该授权方法是正确的。

票数 2
EN

Stack Overflow用户

发布于 2016-04-15 13:48:04

在不看到更多代码的情况下很难确定,但似乎您是在本地节点上调用契约,而不是发送事务。事务只能由拥有帐户私钥的人签名,这意味着您可以依赖msg.sender才能准确,但是在本地节点上执行的消息不会强制执行。但是,它们所做的任何更改都会回滚,而不会应用于状态,因此您的本地调用做什么并不重要。

票数 2
EN

Stack Overflow用户

发布于 2016-04-15 13:54:36

通常,从web3.js调用函数有两种方法:使用事务或只使用“调用”。只有在事务中,才能实际修改区块链内容(读取始终是可能的)。事务总是需要有效的签名,因此需要访问私钥。

您没有被要求提供密码的原因可能是您已经解锁了帐户。此外,除了授权用户之外,其他用户可以调用该函数,只有更改才会被丢弃。

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

https://stackoverflow.com/questions/36648596

复制
相关文章

相似问题

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