code: func NewVM(params Params, origin crypto.Address, nonce []byte, logger *logging.Logger, options ...func(*VM)) *VM {
  	vm := &VM{
  		memoryProvider: DefaultDynamicMemoryProvider,
  		params:         params,
  		origin:         origin,
  		stackDepth:     0,
  		nonce:          nonce,
  		logger:         logger.WithScope("NewVM"),
  	}
  	for _, option := range options {
  		option(vm)
  	}
  	return vm
  }
docs: // Create a new EVM instance. Nonce is required to be globally unique (nearly almost surely) to avoid duplicate
  // addresses for EVM created accounts. In Burrow we use TxHash for this but a random nonce or sequence number could be
  // used.