solidity服务器端数据签名
我实现的方法
function ethPacked(params){
return web3.utils.encodePacked(...params);
}
function msgToHashToSign(params){
// const message = "0x" + keccak256(str).toString('hex');
const packed = ethPacked(params);
const message = "0x" + keccak256(packed).toString('hex');
const signature = web3.eth.accounts.sign(message, pv);
return signature;
}
erc 1155 数组等参数实现方法
function encodeSyncFunction(
Ids,
Amounts,
) {
return web3.utils.keccak256(
web3.eth.abi.encodeParameters(
[
"uint256[]",
"uint256[]"
],
[
Ids,
Amounts
]
)
);
}
const encode = encodeSyncFunction(
[
200,
201
],
[
"11000000000000000000",
"2000000000000000000"
]
);
const signature = web3.eth.accounts.sign(encode, pv);
res.send(signature);
合约内验证
生成 相同的数据哈希 return keccak256(abi.encode()); 在传入msg.sender参数 require(verify(相同数据哈希, signature), "SunflowerLand: Unauthorised");