ETIMEDOUT error when I want to deploy my contracts on binance smart chain testnet

Hey community, I deployed my ERC 721 contract and NFT marketplace contract on binance smart chain testnet everything was ok then I would like to try something new with the same codes and I got error ETIMEDOUT. is there any limit on bcc testnet ? I tried also this truffle deploy --network BSCTestNet --reset --compile-nonebut it did not work. after 5-6 confirmations I got this error sometimes I could deploy ERC721 token and when it start to deploy Marketplace contract , this issue came out . I will try also different testnet but anyway I would like to fix the error . Thank you so much

Are you using your Moralis Speedy Node url for BSC Testnet in the truffle config? Truffle can be rather spammy when deploying contracts. Some public node providers can’t handle it and hit rate limits or timeout.

  • If you’re using a different node provider try using the websocket connection (Moralis nodes will support websockets very soon)
  • You can try increasing the timeouts in the truffle config see the truffe docs

thank you for fast responding.ok I see the problem now. yes I use Moralis Speedy Node for BSC Testnet , for sure I tried to increase timeouts in my truffle-config.js but I did not work well. what would be solution for it ? to use different node ?

please post your truffle config and migration code.

Migration code

// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;

contract Migrations {
  address public owner = msg.sender;
  uint public last_completed_migration;

  modifier restricted() {
    require(
      msg.sender == owner,
      "This function is restricted to the contract's owner"
    );
    _;
  }

  function setCompleted(uint completed) public restricted {
    last_completed_migration = completed;
  }
}

/

**
 * Use this file to configure your truffle project. It's seeded with some
 * common settings for different networks and features like migrations,
 * compilation and testing. Uncomment the ones you need or modify
 * them to suit your project as necessary.
 *
 * More information about configuration can be found at:
 *
 * trufflesuite.com/docs/advanced/configuration
 *
 * To deploy via Infura you'll need a wallet provider (like @truffle/hdwallet-provider)
 * to sign your transactions before they're sent to a remote public node. Infura accounts
 * are available for free at: infura.io/register.
 *
 * You'll also need a mnemonic - the twelve word phrase the wallet uses to generate
 * public/private key pairs. If you're publishing your code to GitHub make sure you load this
 * phrase from a file you've .gitignored so it doesn't accidentally become public.
 *
 */

const HDWalletProvider = require('@truffle/hdwallet-provider');
// const infuraKey = "fj4jll3k.....";
//
// const fs = require('fs');
const mnemonic = require("./secrets.json").mnemonic

module.exports = {
  /**
   * Networks define how you connect to your ethereum client and let you set the
   * defaults web3 uses to send transactions. If you don't specify one truffle
   * will spin up a development blockchain for you on port 9545 when you
   * run `develop` or `test`. You can ask a truffle command to use a specific
   * network from the command line, e.g
   *
   * $ truffle test --network <network-name>
   */

  networks: {
    // Useful for testing. The `development` name is special - truffle uses it by default
    // if it's defined here and no other network is specified at the command line.
    // You should run a client (like ganache-cli, geth or parity) in a separate terminal
    // tab if you use this network and you must also set the `host`, `port` and `network_id`
    // options below to some value.
    //
    // development: {
    //  host: "127.0.0.1",     // Localhost (default: none)
    //  port: 8545,            // Standard Ethereum port (default: none)
    //  network_id: "*",       // Any network (default: none)
    // },
    // Another network with more advanced options...
    // advanced: {
    // port: 8777,             // Custom port
    // network_id: 1342,       // Custom network
    // gas: 8500000,           // Gas sent with each transaction (default: ~6700000)
    // gasPrice: 20000000000,  // 20 gwei (in wei) (default: 100 gwei)
    // from: <address>,        // Account to send txs from (default: accounts[0])
    // websocket: true        // Enable EventEmitter interface for web3 (default: false)
    // },
    // Useful for deploying to a public network.
    // NB: It's important to wrap the provider as a function.
    BSCTestNet: {
     provider: () => new HDWalletProvider(mnemonic, `https://speedy-nodes-nyc.moralis.io/4a7bb064f4ec9a2b9f650726/bsc/testnet`),
     network_id: 97,       // Ropsten's id
     gas: 5500000,     // Ropsten has a lower block limit than mainnet
     confirmations: 10,    // # of confs to wait between deployments. (default: 0)
     timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50)
     skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
    },
    // Useful for private networks
    // private: {
    // provider: () => new HDWalletProvider(mnemonic, `https://network.io`),
    // network_id: 2111,   // This network is yours, in the cloud.
    // production: true    // Treats this network as if it was a public net. (default: false)
    // }
  },

  // Set default mocha options here, use special reporters etc.
  mocha: {
    // timeout: 100000
  },

  // Configure your compilers
  compilers: {
    solc: {
      version: "0.8.0",    // Fetch exact version from solc-bin (default: truffle's version)
      // docker: true,        // Use "0.5.1" you've installed locally with docker (default: false)
      // settings: {          // See the solidity docs for advice about optimization and evmVersion
      //  optimizer: {
      //    enabled: false,
      //    runs: 200
      //  },
      //  evmVersion: "byzantium"
      // }
    }
  },

  // Truffle DB is currently disabled by default; to enable it, change enabled: false to enabled: true
  //
  // Note: if you migrated your contracts prior to enabling this field in your Truffle project and want
  // those previously migrated contracts available in the .db directory, you will need to run the following:
  // $ truffle migrate --reset --compile-all

  db: {
    enabled: false
  }
};

Thank you so much

I did not solve the problem exactly but I deployed the contracts. I chanced my internet from wifi to mobil and It went much better , I don’t know definitely why then I used truffle deploy --compile-none after connected with network and contracts start to deploy again where it stopped.i tried a couple times and it works.

1 Like

Hey @aliekber1976, hope you are ok.

Glad to know that you solved, but I do think is not an issue from your side only, neither our speedy nodes, there are also other users that are facing the same issue.

Some suggest to add the option --compile-none, others by adding networkCheckTimeout to the truffle config.

you can follow more of those suggestions here: https://github.com/trufflesuite/truffle/issues/3356

Carlos Z

3 Likes

thank you I hope you ok too :slight_smile: , I see now the problem. I will try also adding networkCheckTimeout maybe works better.

1 Like

@thecil , @aliekber1976

Hey guys, So what was the final solution to this problem? Im having the error issue in ETH Game Programing course. Trying to deploy on testnet Kovan, any leads?

Hey @TotalingArc, try to increase the timeout parameter in truffle-config.js or you can truffle migrate again if it fails, usually it will continue where the migrations stop previously

1 Like

@YosephKS
Hey man, Thanks for tip, but for some reason I didnt do that. I figured out what was the issue , thank again.

1 Like

Hey, @YosephKS,

Im currently trying to create a migration file that put (ERC1155)tokens inside a marketplace to be sold to player. Im trying to complete my ETH Game Programming course. You think you can help me out? Thanks

ERC1155 Mintable.
Solidity 0.8.0

I can try my best, but please specify more in here :raised_hands: also when you mean put ERC1155 inside the marketplace contract does it mean you want to mint the tokens first then pass it as a parameter in the contract or maybe have the ERC1155 as a child contract of the marketplace contract?

thanks for your answer, i had same issue and when i used wss it worked
can you tell me what is the diffrence of using wss or https when we use speedy node on Binance testnet and main net ? thanks alot

I think that it shouldn’t be a difference for deploy

okay thanks, cuz i see wss better for deployment and i dont get any error
thanks for the answer

the thing is i tried 10 times deploying with http node and i get timeout always with truffle

bsc_testnet: {

  provider: () => new HDWalletProvider(

    privateKeys.split(','),

    `https://speedy-nodes-nyc.moralis.io/asdfaf/bsc/testnet`

  ),

  network_id: 97,

  confirmations: 10,

  timeoutBlocks: 30000,

  skipDryRun: true,

  networkCheckTimeout: 5000000,

},

i want http and not wss

you could use the official http RPC from Binance too