我在Chrome上运行Metamask。
当我在开发人员控制台中随机运行以下内容时,甚至Etherdelta Metamask会提示我签名一条消息,这就是预期的行为。
web3.personal.sign('0x68656c6c6f', web3.eth.accounts[0], console.log)但是,当我试图在由$ truffle init webpack创建的基本Dapp上的dev控制台中运行相同时,我会看到一个错误,它说:
Uncaught TypeError: web3.personal.sign is not a function个人没有一个功能“标志”,但只有["_requestManager", "newAccount", "unlockAccount", "sendTransaction", "lockAccount", "listAccounts", "getListAccounts"]上的松露dapp,但有以下其他网站的["_requestManager", "newAccount", "importRawKey", "unlockAccount", "ecRecover", "sign", "sendTransaction", "lockAccount", "listAccounts", "getListAccounts"]。
注意:不过,web3.eth.sign(web3.eth.coinbase, '0x68656c6c6f', console.log)仍然有效。
为什么会发生这种情况?
复制这一问题的步骤:
web3.personal.sign('0x68656c6c6f', web3.eth.accounts[0], console.log)。发布于 2017-09-14 19:33:36
摘要中的
使用web3.eth.sign()代替。
web3.personal?尽管在某些实现中定义了web3.personal,但据我所知,它不是一个标准。
v0 web3.jsAPI没有列出个人API。v1也是如此,除了web3.eth.personal之外,这可能是您想要的。
我相信Metamask正在揭露非标准的API web3.personal。( web3也包括在geth attach中)
的确认
在元询问的响应中,对于我的问题,“web3.personal是以哪种规范为基础的?”
kumavis 15分钟前评论@carver等 geth线程:以太/转-埃瑟姆#2940 our implementation:https://github.com/metamask/eth-sig-util用法示例:https://github.com/flyswatter/js-eth-personal-sign-example
这证实了我对web3.personal不是一个标准的怀疑。有些客户在模仿其他客户的做法。这意味着你不能假设它在任何地方都会以同样的方式进行。
中的比较
松露最近提到web3.js的释放说明是:
3.4.6 ..。内部:我们现在使用的是web3 v0.20.1
因此,您必须使用v0 web3.js实现web3.eth.sign,直到它们更新到v1为止。V1还在测试阶段,所以它可能不会马上发生。
https://ethereum.stackexchange.com/questions/26016
复制相似问题