我是使用Solidity创建以太坊合约的新手,我想知道我创建的合约是否首先正确且可以安全使用。
我在这份合同中所做的是允许用户将一些ETH从他们的钱包发送到朋友的钱包,但也要收取$ 0.05的费用(在撰写本文时为194740000000000 wei)以使用我的服务。
现在,当使用remix测试合同时,所有方法都可以正常工作,但是由于我是固态合同的新手,我只是想征询一些专家意见,以确保我正确且安全地进行了所有工作。
我的合同代码是:
pragma solidity ^0.5.1;
contract Forwarder {
address payable public receiversAddress = 0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C;
address payable public feeAddress = 0xdD870fA1b7C4700F2BD7f44238821C26f7392148;
constructor() payable public {
uint amountToSendReceiver = msg.value-194740000000000;
receiversAddress.transfer(amountToSendReceiver);
feeAddress.transfer(194740000000000);
}
}
如前所述,在混音中一切正常,但是我的合同代码正确且可以安全使用吗?之后无法使用合同窃取资金或存在任何漏洞?
答案 0 :(得分:1)
是的,您的代码非常安全。我唯一想添加的是符合require
条件的代码可维护性
如果您的var不可更改,最好使用constant
使您的合同更便宜以进行部署;)
函数可以声明为常量,在这种情况下,它们承诺不会 修改状态。
pragma solidity ^0.5.1;
contract Forwarder {
address payable public constant receiversAddress = 0x14723A09ACff6D2A60DcdF7aA4AFf308FDDC160C;
address payable public constant feeAddress = 0xdD870fA1b7C4700F2BD7f44238821C26f7392148;
uint256 constant feeAmount = 194740000000000;
constructor() payable public {
require(msg.value >= feeAmount); // for maintainability, your tx will be reverted anyway, just to show why
feeAddress.transfer(feeAmount); // transfer fee
receiversAddress.transfer(address(this).balance); // transfer remaining amount of msg.value
}
}