Method transferOwnership don't work on Rinkeby

:1234: Code to reproduce

I was testing transfer the ownership of a contract to another account, but did work though. no error , no output, just did not work. Can someone tell me what wrong?
my token contract:

pragma solidity ^0.8.0;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

contract DaTongToken is ERC20, Ownable {
  uint256 private _SUPPLY_CAP;

  /**
   * @notice constructor
   * @param _cap supply cap
   */
  constructor(uint256 _cap) ERC20("My Token", "MYT") {
    _SUPPLY_CAP = _cap;
    _mint(msg.sender, 1024000000000);
  }

  /**
   * @notice mint MYT tokens
   * @param _to address to receive tokens
   * @param _amount amount to mint
   * @return status true if mint successful, false if failed
   */
  function mint(address _to, uint256 _amount)
    external
    override
    onlyOwner
    returns(bool status)
  {
    if (totalSupply() + _amount <= _SUPPLY_CAP) {
      _mint(_to, _amount);
      return true;
    }
    return false;
  }

  function supply_cap() external view override returns(uint256) {
    return _SUPPLY_CAP;
  }
}

when i test it with transferOwnership, did not work though, here is my test script:

var Web3 = require("web3);
const web3 = new Web3(ALCHEMY_API);
const myToken = new web3.eth.Contract(MyTokenABI, MyTokenAddress);

await function main() {
  await myToken.methods.transferOwnership(another_accout)
    .call({from: deployer.address})
    .then(console.log);

  await myToken.methods.owner().call().then(console.log)
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  })

The result show that MyToken's owner is still the old one. Did anyone show know what i did wrong?

:computer: Environment

I'm using Hardhat 2.8.4, deploying the contract on Rinkeby via Alchemy.

Hi, welcome to the community! :wave:

Can you compile this contract? I think you should remove the keyword override for the function mint and supply_cap , and in your test case, I think you can change your function named main as following:

async function main() {
  await myToken.methods.transferOwnership(another_accout)
    .send({from: deployer.address})

  let currentOwner = await myToken.methods.owner().call();
  console.log("currentOwner", currentOwner);
}

And I am not sure what is the deployer .

Did not work. The send(eth_sendTransaction) method is not supported by Alchemy. So i thinks i need to ask Alchemy team for help. Btw, the deployer is the account I deployed my contract.

After searching around, i figure out the problem. First of all, I made a mistake with the call and send methods, i thought they are similar. But the truth is not, the call method does not change the state of blockchain while the send does, that's why i got nothing, and can not change the ownership.

And for my second error, i should sign the transaction before sending it, cause the third party's node does not store my private key. After making these two changes, it works very well.