code: func CallSim(reader acmstate.Reader, tip bcm.BlockchainInfo, fromAddress, address crypto.Address, data []byte,
  	logger *logging.Logger) (*exec.TxExecution, error) {
  
  	cache := acmstate.NewCache(reader)
  	exe := contexts.CallContext{
  		RunCall:     true,
  		StateWriter: cache,
  		Blockchain:  tip,
  		Logger:      logger,
  	}
  
  	txe := exec.NewTxExecution(txs.Enclose(tip.ChainID(), &payload.CallTx{
  		Input: &payload.TxInput{
  			Address: fromAddress,
  		},
  		Address:  &address,
  		Data:     data,
  		GasLimit: contexts.GasLimit,
  	}))
  	err := exe.Execute(txe, txe.Envelope.Tx.Payload)
  	if err != nil {
  		return nil, err
  	}
  	return txe, nil
  }
docs: // Run a contract's code on an isolated and unpersisted state
  // Cannot be used to create new contracts