OpenZeppelin / openzeppelin-test-environment

[Not actively maintained] One-line setup for blazing-fast smart contracts tests
https://docs.openzeppelin.com/test-environment
MIT License
90 stars 39 forks source link

Issue with simple owner tutorial #170

Closed Benjythebee closed 2 years ago

Benjythebee commented 2 years ago

Hey so, I just discovered this and I tried running it using an Ownable contract using the simple example from docs:

const { accounts, contract } = require('@openzeppelin/test-environment');
const [ admin,owner ] = accounts;

const { expect } = require('chai');

const MyContract = contract.fromArtifact('MyContract'); // Loads a compiled contract

describe('MyContract -test', function () {
  it('deployer is owner', async function () {
    const myContract = await MyContract.new({ from: owner });
    expect(await myContract.owner()).to.equal(owner);
  });

});

This failed on first try:


  0 passing (651ms)
  1 failing

  1) MyContract -test
       deployer is owner:

      AssertionError: expected '0xfFE4F5402572690aA3e9bd5506bDA86F609007c7' to equal '0x22685263387BcdE0B5364aeAaf0334E7775dC7A0'
      + expected - actual

      -0xfFE4F5402572690aA3e9bd5506bDA86F609007c7
      +0x22685263387BcdE0B5364aeAaf0334E7775dC7A0

Did i miss something?

The ownable contract:


abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

At first I thought _msgSender() must be wrong, but changing that to msg.sender doesn't help

frangio commented 2 years ago

The address is random and the default seed must have changed in one of the dependencies.

We're no longer actively maintaining this project so apologies for the inconvenience.