Ethereum 以太坊合同功能是否安全?

Ethereum 以太坊合同功能是否安全?,ethereum,solidity,truffle,Ethereum,Solidity,Truffle,我正在使用testrpc和web3 我使用下面的习惯用法来确保只有先前定义的用户才能执行某些操作: function doSomethingProtected() { if ( msg.sender != authorizedUser ) throw; flagSomething = true; } 在使用web3对实例化合同调用函数时,如下所示: myContract.doSomethingProtected( { fr

我正在使用testrpc和web3

我使用下面的习惯用法来确保只有先前定义的用户才能执行某些操作:

function doSomethingProtected() {
        if ( msg.sender != authorizedUser )
                throw;

        flagSomething = true;
   }
在使用web3对实例化合同调用函数时,如下所示:

myContract.doSomethingProtected( { from: "0x..." } );
成功了。起初我很高兴,但后来我意识到Web3API并不要求我提供任何私钥或类似密码短语

任何对某人公钥/地址有简单了解的人都可以调用此函数吗


在示例中使用这个成语使我相信以太坊合同的一个好处是它确保了msg.sender是加密的

如果看不到更多的代码,就很难确定,但似乎您是在本地节点上调用合约,而不是发送事务。交易只能由使用帐户私钥的人签名,这意味着您可以依靠
msg.sender
来确保准确,但在本地节点上执行的消息不会强制执行这一点。但是,它们所做的任何更改都会回滚,并且不会应用于状态,因此本地调用的作用无关紧要。

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

我猜您的帐户在调用该函数时已经解锁。我不记得您的帐户在web3中解锁后的确切解锁时间。不过我可能错了。本应将此添加为注释,但我现在不被允许。

我猜您的帐户在调用该函数时已解锁。我不记得您的帐户在web3中解锁后的确切解锁时间。不过我可能错了。本应将此添加为注释,但我现在不被允许。

一般来说,有两种方法可以从web3.js调用函数:使用事务或仅使用“调用”。只有在交易中,您才能实际修改区块链内容(阅读始终是可能的)。事务始终需要有效的签名,因此需要访问私钥


没有要求您输入密码的原因可能是您已解锁该帐户。此外,授权用户以外的用户可以调用该函数,只有更改将被丢弃。

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


没有要求您输入密码的原因可能是您已解锁该帐户。此外,授权用户以外的用户可以调用该函数,只有更改将被丢弃。

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

如果要使用geth执行此操作,则需要在发送之前解锁帐户


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

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

如果要使用geth执行此操作,则需要在发送之前解锁帐户


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

我正在对testrpc节点运行它。也许这就是问题所在。我正在对testrpc节点运行它。也许这就是问题所在。