1

I'm following the Plutus Env: Setup Starter Pack guideline to run a Plutus Playground Local Instance. At step 4, when running the command nix-shell, I got the error message error: invalid character in Base64 string: ''. Does anyone know how to fix it? I'm using WSL2 with Ubuntu 20.04 distro.

All the steps I did are:

  1. Download the plutus-apps repository: git clone https://github.com/input-output-hk/plutus-apps
  2. Go to the latest commit of the repository: git checkout 7f53f18dfc788bf6aa929f47d840efa1247e11fd
  3. Setup IOHK binary cache (https://github.com/input-output-hk/plutus-apps#iohk-binary-cache) and then at top of this repo, nix-build -A plutus-playground.server
  4. Enter nix-shell => error: invalid character in Base64 string: ''

Here are the outputs of nix-build, nix-shell, nix-shell --show-trace

nhaancs@NhanNguyen:~/Workspace/plutus-apps$ nix-build -A plutus-playground.server
/nix/store/3igf75n00amzcyfrk7wmh3kjp73bx6bp-plutus-playground-server-exe-plutus-playground-server-0.1.0.0
nhaancs@NhanNguyen:~/Workspace/plutus-apps$ nix-shell
error: invalid character in Base64 string: ''
(use '--show-trace' to show detailed location information)
nhaancs@NhanNguyen:~/Workspace/plutus-apps$ nix-shell --show-trace
error: invalid character in Base64 string: ''

       … while importing '/nix/store/9vsdalr213rjwh2810jdv1p2r7lifpsl-ghc810420210212-boot-packages-nix.nix/ghci.nix'

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/overlays/ghc-packages.nix:51:14:

           50|   importSrcAndNix = srcAndNix:
           51|       args: (import srcAndNix.nix args) // { inherit (srcAndNix) src; };
             |              ^
           52|

       … while evaluating 'importSrcAndNix'

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/overlays/ghc-packages.nix:51:7:

           50|   importSrcAndNix = srcAndNix:
           51|       args: (import srcAndNix.nix args) // { inherit (srcAndNix) src; };
             |       ^
           52|

       … from call site

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/modules/plan.nix:302:20:

          301|               then (abort "${name} has no revision!")
          302|               else revision (modArgs // { hsPkgs = hsPkgs // (mapAttrs (l: _: hsPkgs.${name}.components.sublibs.${l}) (m.components.sublibs or {})); });
             |                    ^
          303|       in

       … while evaluating anonymous lambda

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/modules/plan.nix:298:63:

          297|     inherit (module) compiler;
          298|     packages = lib.mapAttrs (name: { revision, ... }@revArgs: { system, compiler, flags, pkgs, hsPkgs, errorHandler, pkgconfPkgs, ... }@modArgs:
             |                                                               ^
          299|

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/types.nix:499:46:

          498|         coerce = unify: value: if isFunction value
          499|           then setFunctionArgs (args: unify (value args)) (functionArgs value)
             |                                              ^
          500|           else unify (if shorthandOnlyDefinesConfig then { config = value; } else value);

       … while evaluating 'unifyModuleSyntax'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:258:34:

          257|      of ‘options’, ‘config’ and ‘imports’ attributes. */
          258|   unifyModuleSyntax = file: key: m:
             |                                  ^
          259|     let

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/types.nix:499:39:

          498|         coerce = unify: value: if isFunction value
          499|           then setFunctionArgs (args: unify (value args)) (functionArgs value)
             |                                       ^
          500|           else unify (if shorthandOnlyDefinesConfig then { config = value; } else value);

       … while evaluating anonymous lambda

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/types.nix:499:33:

          498|         coerce = unify: value: if isFunction value
          499|           then setFunctionArgs (args: unify (value args)) (functionArgs value)
             |                                 ^
          500|           else unify (if shorthandOnlyDefinesConfig then { config = value; } else value);

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:312:8:

          311|       # works.
          312|     in f (args // extraArgs)
             |        ^
          313|   else

       … while evaluating 'applyIfFunction'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:288:29:

          287|
          288|   applyIfFunction = key: f: args@{ config, options, lib, ... }: if isFunction f then
             |                             ^
          289|     let

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:191:55:

          190|         if isFunction m || isAttrs m then
          191|           unifyModuleSyntax fallbackFile fallbackKey (applyIfFunction fallbackKey m args)
             |                                                       ^
          192|         else if isList m then

       … while evaluating 'unifyModuleSyntax'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:258:34:

          257|      of ‘options’, ‘config’ and ‘imports’ attributes. */
          258|   unifyModuleSyntax = file: key: m:
             |                                  ^
          259|     let

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:191:11:

          190|         if isFunction m || isAttrs m then
          191|           unifyModuleSyntax fallbackFile fallbackKey (applyIfFunction fallbackKey m args)
             |           ^
          192|         else if isList m then

       … while evaluating 'loadModule'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:189:53:

          188|       # Like unifyModuleSyntax, but also imports paths and calls functions if necessary
          189|       loadModule = args: fallbackFile: fallbackKey: m:
             |                                                     ^
          190|         if isFunction m || isAttrs m then

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:230:22:

          229|           let
          230|             module = loadModule args parentFile "${parentKey}:anon-${toString n}" x;
             |                      ^
          231|             collectedImports = collectStructuredModules module._file module.key module.imports args;

       … while evaluating anonymous lambda

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:247:31:

          246|           disabledKeys = map moduleKey disabled;
          247|           keyFilter = filter (attrs: ! elem attrs.key disabledKeys);
             |                               ^
          248|         in map (attrs: attrs.module) (builtins.genericClosure {

       … from call site

       … while evaluating 'filterModules'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:243:36:

          242|       # modules recursively. It returns the final list of unique-by-key modules
          243|       filterModules = modulesPath: { disabled, modules }:
             |                                    ^
          244|         let

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:254:7:

          253|     in modulesPath: initialModules: args:
          254|       filterModules modulesPath (collectStructuredModules unknownModule "" initialModules args);
             |       ^
          255|

       … while evaluating anonymous lambda

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:253:37:

          252|
          253|     in modulesPath: initialModules: args:
             |                                     ^
          254|       filterModules modulesPath (collectStructuredModules unknownModule "" initialModules args);

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:128:25:

          127|       merged =
          128|         let collected = collectModules
             |                         ^
          129|           (specialArgs.modulesPath or "")

       … while evaluating 'reverseList'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/lists.nix:393:17:

          392|   */
          393|   reverseList = xs:
             |                 ^
          394|     let l = length xs; in genList (n: elemAt xs (l - n - 1)) l;

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:132:33:

          131|           ({ inherit lib options config specialArgs; } // specialArgs);
          132|         in mergeModules prefix (reverseList collected);
             |                                 ^
          133|

       … while evaluating 'byName'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:364:25:

          363|       */
          364|       byName = attr: f: modules:
             |                         ^
          365|         foldl' (acc: module:

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:383:21:

          382|       # an attrset 'name' => list of submodules that declare ‘name’.
          383|       declsByName = byName "options" (module: option:
             |                     ^
          384|           [{ inherit (module) _file; options = option; }]

       … while evaluating 'flip'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/trivial.nix:138:16:

          137|   */
          138|   flip = f: a: b: f b a;
             |                ^
          139|

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:395:23:

          394|
          395|       resultsByName = flip mapAttrs declsByName (name: decls:
             |                       ^
          396|         # We're descending into attribute ‘name’.

       … while evaluating the attribute 'matchedOptions'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:427:14:

          426|     in {
          427|       inherit matchedOptions;
             |              ^
          428|

       … while evaluating 'recurse'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/attrsets.nix:295:23:

          294|     let
          295|       recurse = path: set:
             |                       ^
          296|         let

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/attrsets.nix:303:8:

          302|         in mapAttrs g set;
          303|     in recurse [] set;
             |        ^
          304|

       … while evaluating 'mapAttrsRecursiveCond'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/attrsets.nix:293:36:

          292|   */
          293|   mapAttrsRecursiveCond = cond: f: set:
             |                                    ^
          294|     let

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:140:28:

          139|           # For definitions that have an associated option
          140|           declaredConfig = mapAttrsRecursiveCond (v: ! isOption v) (_: v: v.value) options;
             |                            ^
          141|

       … while evaluating 'evalModules'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:63:17:

           62|      evalModules) and the less declarative the module set is. */
           63|   evalModules = { modules
             |                 ^
           64|                 , prefix ? []

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/types.nix:520:12:

          519|         merge = loc: defs:
          520|           (evalModules {
             |            ^
          521|             modules = allModules defs;

       … while evaluating 'merge'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/types.nix:519:22:

          518|         check = x: isAttrs x || isFunction x || path.check x;
          519|         merge = loc: defs:
             |                      ^
          520|           (evalModules {

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:559:59:

          558|       if isDefined then
          559|         if all (def: type.check def.value) defsFinal then type.merge loc defsFinal
             |                                                           ^
          560|         else let allInvalid = filter (def: ! type.check def.value) defsFinal;

       … while evaluating the attribute 'value'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/modules.nix:570:27:

          569|     optionalValue =
          570|       if isDefined then { value = mergedValue; }
             |                           ^
          571|       else {};

       … while evaluating anonymous lambda

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/types.nix:394:22:

          393|       merge = loc: defs:
          394|         mapAttrs (n: v: v.value) (filterAttrs (n: v: v ? value) (zipAttrsWith (name: defs:
             |                      ^
          395|             (mergeDefinitions (loc ++ [name]) elemType defs).optionalValue

       … from call site

       … while evaluating anonymous lambda

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/modules/component-driver.nix:95:14:

           94|     lib.mapAttrs
           95|       (name: pkg: if pkg == null then null else builder.build-package config pkg)
             |              ^
           96|       (config.packages // lib.genAttrs (config.nonReinstallablePkgs ++ config.bootPkgs) (_: null));

       … from call site

       … while evaluating anonymous lambda

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/lib/default.nix:103:49:

          102|   isLocalPackage = p: p.isLocal or false;
          103|   selectLocalPackages = ps: lib.filterAttrs (n: p: p != null && isLocalPackage p) ps;
             |                                                 ^
          104|

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/attrsets.nix:125:62:

          124|   filterAttrs = pred: set:
          125|     listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set));
             |                                                              ^
          126|

       … while evaluating anonymous lambda

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/attrsets.nix:125:29:

          124|   filterAttrs = pred: set:
          125|     listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set));
             |                             ^
          126|

       … from call site

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/attrsets.nix:125:18:

          124|   filterAttrs = pred: set:
          125|     listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set));
             |                  ^
          126|

       … while evaluating 'filterAttrs'

       at /nix/store/kawxd91ly09hlyqprqs7yn650s3cfvf6-source/lib/attrsets.nix:124:23:

          123|   */
          124|   filterAttrs = pred: set:
             |                       ^
          125|     listToAttrs (concatMap (name: let v = set.${name}; in if pred name v then [(nameValuePair name v)] else []) (attrNames set));

       … from call site

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/lib/default.nix:103:29:

          102|   isLocalPackage = p: p.isLocal or false;
          103|   selectLocalPackages = ps: lib.filterAttrs (n: p: p != null && isLocalPackage p) ps;
             |                             ^
          104|

       … while evaluating 'selectLocalPackages'

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/lib/default.nix:103:25:

          102|   isLocalPackage = p: p.isLocal or false;
          103|   selectLocalPackages = ps: lib.filterAttrs (n: p: p != null && isLocalPackage p) ps;
             |                         ^
          104|

       … from call site

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/builder/shell-for.nix:6:39:

            5|   # dependencies will be included in the shell's `ghc-pkg list`.
            6|   packages ? ps: builtins.attrValues (haskellLib.selectLocalPackages ps)
             |                                       ^
            7|   # `components` function selects components that will be worked on in the shell itself.

       … while evaluating anonymous lambda

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/builder/shell-for.nix:6:14:

            5|   # dependencies will be included in the shell's `ghc-pkg list`.
            6|   packages ? ps: builtins.attrValues (haskellLib.selectLocalPackages ps)
             |              ^
            7|   # `components` function selects components that will be worked on in the shell itself.

       … from call site

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/builder/shell-for.nix:26:22:

           25|
           26|   selectedPackages = packages hsPkgs;
             |                      ^
           27|   additionalPackages = additional hsPkgs;

       … while evaluating the attribute 'name'

       at /nix/store/8n76c1c3nz2wl6dzxmxdz2y5xrx70flw-source/builder/shell-for.nix:136:5:

          135|   mkShell (mkDrvArgs // {
          136|     name = mkDrvArgs.name or name;
             |     ^
          137|
2
  • Could you paste the entire output and tell us which option from the starter pack you chose?
    – Avatar33
    Commented Jan 13, 2022 at 6:41
  • @Avatar33 I updated the question with output Commented Jan 13, 2022 at 7:10

2 Answers 2

0

Some characters pasted from Windows are encoded in ways that your shell can't interpret. Either (1) type the command manually, or (2) after pasting the command into the shell, manually replace all whitespace with simple spaces before running it.

1
  • Thank @Hysteria, I typed the commands but it doesn't work. I updated my question with more information, can you take a look :D Commented Jan 13, 2022 at 7:12
0

don't know if it can help, but after cloning the plutus-apps repository, I ran cabal update, and then nix-shell. Once that was finished, I just followed the README and ran cabal build plutus-pab. I then followed the instructions on page 2 of this document -> https://docs.google.com/document/d/13112LHG9vVvNUs40oZSqZ-DF6_yFiT_SJZ2NaEmjMM4/edit# although I did not do step 3 (nix-build -A plutus-playground.server), and it seems to work fine. I hope you manage to find the issue

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.