Interacting with a user-deployed token on ganache by other Smart Contract


In order to allow BUSD payments on my Smart Contract (SC) I am declaring

address constant _tokenBUSD_CA = address(0x0Ca2fec84fAB02eE11882Bcca1982c6e72Ae8Ad1);

in order to let transact like (1)

   busd.transfer(account, reward);

I am deploying the Busd clone like:

// contracts/BEP20.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

contract Busd is ERC20 {
    constructor() ERC20("Busd", "BUSD") {
        _mint(msg.sender, 1000000 ether);
        _mint(0x5595889316eDF0C50AcdB689ff785f88EB5b60f4, 1000000 ether);
        _mint(0x380772d13c6501622bb1eFBc01f3EAa98557BE24, 1000000 ether);
        _mint(0xEfD55A463626D5b012839D220Cd57B8bb9286e51, 1000000 ether);

But although I can check my balance is about 1000000 Fake Busd's on different accounts when I run the transaction (1) I always get the same error: Transfer amount exceeds balance

reason: 'ERC20: transfer amount exceeds balance',
  hijackedStack: 'StatusError: Transaction: 0x5f7dafcccb64e0d0dfe922d0821aba7da69b1fbe27d8d73069844e728cb324e5 exited with an error (status 0). Reason given: ERC20: transfer amount exceeds balance.\n' +

I think you can check the contract address and the caller address.
And you can share your script at here if possible.

I think that approve call is not necessary at all because always transfer begins on msg.sender, but I just tried in order to make it work..

Also, as you see the way of declaration of the token I am interacting with on Local Blockchain differs from my first post to this... That was another try.

None of them work by now.

A reason I was wondering as cause is the indirect call from payReferrals, from buyNFT, as that indirect call could make the contract believe is being called from another contract but from the msg.caller...

I tried several things and i am full stucked.

Thank in advance!!