In my experience it is easier to use test networks, like Rinkeby or Ropsten. Your state would be saved for later use. You just need to have ether for those networks. Just search for faucet for Rinkeby for example and you will find a website that gives you a fake ether to use on this network.
Then set the truffle-config like this:
rinkeby: {<
provider: () => new HDWalletProvider(mnemonic, `https://rinkeby.infura.io/v3/${INFURA_KEY}`),
network_id: 4, // Rinkeby's id
gas: 5500000, // Rinkeby has a lower block limit than mainnet
confirmations: 1, // # 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 )
}
And then run truffle deploy --network rinkeby
Note: you can define your own private network here too. Just define a name for your network and assign the ip, port and other things. Here I use Infra to access Rinkeby, which is, again, easier for development purposes.