从可支付地址到请求字节内存的隐式转换无效.这个函数需要一个字节参数


function setBasicDetails(string memory _registrationNo,
string memory _farmerName,
string memory _farmAddress,
string memory _exporterName,
string memory _importerName

) public onlyAuthCaller returns(address) {

uint tmpData = uint(keccak256(msg.sender));
address batchNo = address(tmpData);

basicDetailsData.registrationNo = _registrationNo;
basicDetailsData.farmerName = _farmerName;
basicDetailsData.farmAddress = _farmAddress;
basicDetailsData.exporterName = _exporterName;
basicDetailsData.importerName = _importerName;

batchBasicDetails[batchNo] = basicDetailsData;

nextAction[batchNo] = 'FARM_INSPECTION';   


return batchNo;
}

这是我的solid函数代码这里有错误这是代码

uint tmpData = uint(keccak256(msg.sender));
address batchNo = address(tmpData);

错误消息:函数调用的参数类型无效。从可支付地址到请求的字节内存的隐式转换无效。这个函数需要一个字节参数。使用ABI . encodepack(…)来获得0.5.0之前的行为,或者使用ABI .encode(…)来使用ABI编码。

如果这是你代码中唯一的错误()

keccak256(msg.sender)

keccak256将返回32字节的哈希值。但是地址是20字节。所以你应该用uint160

代替int
uint tmpData = uint160(keccak256(msg.sender))