在实体契约代码中,通过ecrecover获取签名者地址的代码块与Ethereum一起运行良好,但是在TRON中,它返回错误的地址,我的合同端代码是
function validate(string memory strTest,uint8 v, bytes32 r, bytes32 s) public view returns(address){
bytes32 prefixedHash = keccak256(strTest);
return ecrecover(keccak256(prefixedHash),v,r,s);
// return ecrecover(prefixedHash,v,r,s):
}而dapp的侧码是
msg = tronWeb.sha3("this is test string");
var signature = await tronWeb.trx.sign(msg);
var r=signature.substr(0,66);
var s= "0x" + signature.substr(66,64);
var v="0x" + signature.substr(signature.length-2);
retValue = await thisContractInstance.validate("this is test string",v,r,s).call();但在这两种情况下(合同端代码中有一种情况被注释),TRON shasta网络中的签名者地址出错。
发布于 2020-06-07 20:53:17
取自here
智能合同代码:
contract Verifier {
function recoverAddr(bytes32 msgHash, uint8 v, bytes32 r, bytes32 s) returns (address) {
return ecrecover(msgHash, v, r, s);
}
function isSigned(address _addr, bytes32 msgHash, uint8 v, bytes32 r, bytes32 s) returns (bool) {
return ecrecover(msgHash, v, r, s) == _addr;
}
}客户端代码:
const ethers = tronWeb.utils.ethersUtils;
let contract = await tronWeb.contract().at(contract_address);
let signingKey = new ethers.SigningKey(tronWeb.defaultPrivateKey);
let message = "This is some message";
let messageBytes = ethers.toUtf8Bytes(message);
let messageDigest = ethers.keccak256(messageBytes);
let signature = signingKey.signDigest(messageDigest);
let hexAddress = await contract.recoverAddr(messageDigest, signature.v, signature.r, signature.s).call();发布于 2020-05-12 12:11:12
你是想签字符串还是签交易?@ashwin
我也遇到了同样的问题,签署一个字符串,下面的帮助我解决了。Tronweb使用不同的方法对事务和字符串进行签名。
1)对于事务,您可以引用以下内容:https://github.com/TRON-US/tronweb/blob/master/src/lib/trx.js#L651,
( 2)对于签名字符串,它使用
ethers.utils.SigningKey.signDigest ()
https://docs.ethers.io/ethers.js/html/api-advanced.html?highlight=signingkey#id8,请注意,最终的v字节将始终被命名为Solidity ( 27或28)
如果您正试图像这里提到的那样签署msg,
var签名=等待tronWeb.trx.sign(msg);
你可以跟着第二个。
发布于 2020-05-13 17:50:39
您可以参考文章https://medium.com/@coredevs/verifying-elliptic-curve-digital-signature-with-tron-smart-contract-5d11347e7b5b。这将有助于完成对字符串的签名,以及@Aldo提供的上述答案。编码愉快。
https://stackoverflow.com/questions/61222017
复制相似问题