Является ли мой код Solidity правильным и безопасным для использования - PullRequest
0 голосов
/ 13 июня 2019

Я очень новичок в использовании Solidity для создания контрактов Ethereum и хотел бы знать, является ли первый контракт, который я создал, правильным и безопасным для использования.

То, что я делаю в этом контракте, позволяет пользователюотправьте немного 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 Ответ

1 голос
/ 18 июня 2019

Да, ваш код довольно безопасен. Единственное, что я хотел бы добавить, это строка с условием require для поддержки кода

.

А если ваши переменные не подлежат изменению, лучше использовать 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
   }

}
...