Солидность: почему из-за неправильного ввода мой логический параметр устанавливается в "true"? - PullRequest
1 голос
/ 12 февраля 2020

Я использую ремикс. ethereum .org

Я написал этот очень простой умный контракт:

pragma solidity ^0.4.19;

contract TicTacToe {
    bool myBool = false;

    uint8 myUint8;
    uint256 myUint256;

    string myString = "myString";
    bytes myBytes = "myString";

    function setMyBoolean(bool myBoolArgument) public {
        myBool = myBoolArgument;
    }

    function getMyBoolean() public view returns(bool) {
      return myBool;
    }

}

Как видите, значение по умолчанию для myBool равно false Я могу изменить это, вызвав функцию setMyBoolean.

Если я использую этот аргумент и введу true , myBool будет установлен на true Если я использую этот аргумент и введите false , myBool будет установлен на false

Но если я введу любую другую комбинацию букв, myBool будет установлен на true . Это удивляет меня, потому что значение по умолчанию для myBool равно false .

Почему это происходит?

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Работает как задумано, потому что именно так ремикс и кодировщик abi решили работать с логическими значениями

  // "false" will be converting to `false` and "true" will be working
  // fine as abiCoder assume anything in quotes as `true`
  if (type === 'bool' && args[i] === 'false') {
     args[i] = false
  }

https://github.com/ethereum/remix/blob/807ffd9772b07dafb343c08faf44c78ee456de77/remix-lib/src/execution/txHelper.js#L18

0 голосов
/ 12 февраля 2020

Я предполагаю, что значение ввода оценивается как строка и, поскольку строка существует и не является пустой, она оценивается как истина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...