“send“ and “transfer“ are only available for objects of type “address payable“, not “address

address public buyer;
buyer.transfer(amount);

错误原因:

在Solidity 0.5.x中,地址类型被细分为​​address​​​和​​address payable​

如果该地址根本不需要接收以太币,那么就应当使用address类型。当地址被声明为address类型后,如果开发者试图向该地址转入以太币,就会导致编译时类型错误。

address payable表示可用于支付的地址,因此在address payable类型的变量上,你可以使用.transfer()和.send()方法,但是address类型的变量则不能使用这些方法。

修改方式:
将 address 改为 address payable

address  payable public buyer;