web3.eth.sign
优质
小牛编辑
131浏览
2023-12-01
web3.eth.sign(address, dataToSign, [, callback])
使用指定帐户签名要发送的数据,帐户需要处于unlocked
状态。
参数:
String
- 签名使用的地址String
- 要签名的数据Function
-(可选)回调函数,用于支持异步的方式执行[async]。
返回值:
String
- 签名后的数据。
返回的值对应的是ECDSA(Elliptic Curve Digital Signature Algorithm)
12签名后的字符串。
r = signature[0:64]
s = signature[64:128]
v = signature[128:130]
需要注意的是,如果你使用ecrecover
,这里的v
值是00
或01
,所以如果你想使用他们,你需要把这里的v
值转成整数,再加上27
。最终你要用的值将是27
或28
13。
示例:
var result = web3.eth.sign("0x135a7de83802408321b74c322f8558db1679ac20",
"0x9dd2c369a187b4e6b9c402f030e50743e619301ea62aa4c0737d4ef7e10a3d49"); // second argument is web3.sha3("xyz")
console.log(result); // "0x30755ed65396facf86c53e6217c52b4daebe72aa4941d89635409de4c9c7f9466d4e9aaec7977f05e923889b33c0d0dd27d7226b6e6f56ce737465c5cfd04be400"
备注:如果你使用以太坊的客户端进行签名时,它们会在你要签名的数据前增加前缀\x19Ethereum Signed Message:\n
14,感谢读者@刘兵同学的反馈。
eth_sign
The sign method calculates an Ethereum specific signature with: sign(keccak256("\x19Ethereum Signed Message:\n" + len(message) + message))).
By adding a prefix to the message makes the calculated signature recognisable as an Ethereum specific signature. This prevents misuse where a malicious DApp can sign arbitrary data (e.g. transaction) and use the signature to impersonate the victim.