Let me be a bore a little more ;) solidity ^0.8.10
posts[postCount] = Post(postCount, _content, 0, msg.sender);
to
posts[postCount] = Post(postCount, _content, 0, payable(msg.sender));
emit PostCreated(postCount, _content, 0, msg.sender);
to
emit PostCreated(postCount, _content, 0, payable(msg.sender));
address(_author).transfer(msg.value);
to
_author.transfer(msg.value);
Possible reentrancy vulnerabilities. Avoid state changes after transfer. I think you can do this:
function tipPost(uint _id) public payable {
//Ensure the id is not invalid
require(_id > 0 && _id <= postCount, "Valid id required");
//fetch post
Post memory _post = posts[_id];
address payable _author = _post.author; //fetch the author
address(_author).transfer(msg.value); //transfer Ether to the author
//We increment the tip amount
_post.tipAmount += msg.value;
posts[_id] = _post;
// let's trigger a post tipped event
emit PostTipped(_id, _post.content, _post.tipAmount, _author );
}
to
function tipPost(uint256 _id) public payable {
require(_id > 0 && _id <= postCount, "Valid id required");
posts[_id].tipAmount += msg.value;
posts[_id].author.transfer(msg.value);
emit PostTipped(_id, posts[_id].content, posts[_id].tipAmount, posts[_id].author);
}