我的Solidity代码是否正确且可以安全使用

时间:2019-06-13 10:50:14

标签: ethereum solidity

我是使用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);
  }

 }

如前所述,在混音中一切正常,但是我的合同代码正确且可以安全使用吗?之后无法使用合同窃取资金或存在任何漏洞?

1 个答案:

答案 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
   }

}