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");