No contract is created from localhost:7500

Dear, I follow the examples in the tutorials in which I am testing the examples, but when I want to interact via the web it does not create the contract.

My project has this sequence:

  1. daml create-daml-app myapp
  2. daml build
  3. daml start
  4. invoke from the browser localhost:7500 loads the web
  5. I choose the contract, I fill in the data but it is not created.

When I look at the ui/ folder I only see the daml.js file.
how to solve this problem?

Thanks for your help.

1 Like

Do you expect something to be created in the ui/ folder?

1 Like

After step 1 run the following command:

daml codegen js .daml/dist/xxxxxx.dar -o ui/daml.js

Load the application on the web, login with the user Bob, I see the templates but the contract is not created.

Thanks

1 Like

Can you go a little bit more in detail regarding the error? It’s unclear to me whether you’re expecting some file to be created in the ui/ directory when you create a contract (which is not the case) or if you are diagnosing the failed contract creation in some other way. :slightly_smiling_face:

1 Like

When executing the java example, I see that the ui/ folder contains many files that have been created (I don’t know if automatically or manually) since this example is created from a template from your repositories.
If I run this java example, I compile, deploy, load the web, log in and when I create the contract there is a check on the top right side that confirms the creation of the contract.

In this example, I follow the tutorial, I create the project, the ui/ is created but there is only daml.js.
I compile, deploy, log in to the web and when I create a contract in the upper part of the browser instead of a check box, an icon like an “O” with a line in the center is displayed, indicating that the contract has not been created.

What should I do so that the web interface can communicate with the ledger and the contract can be created.

1 Like

Hi @magzupao,

It looks like you may have one of two issues. Either the Navigator you’re using is not part of the same project, or you’ve not filled in the contract with valid values.

If you follow these steps:

$ daml create-daml-app myapp
Created a new project in "myapp" based on the template "create-daml-app".
$ cd myapp              
$ daml build                       
Compiling myapp to a DAR.          
Created .daml/dist/myapp-0.1.0.dar
$ daml start
Compiling myapp to a DAR.                                                                                                                                    Created .daml/dist/myapp-0.1.0.dar                                                                                                                           
Generating 057eed1fd48c238491b8ea06b9b5bf85a5d4c9275dd3f6183e0e6b01730cc2ba
[...]

then you do not end up with a running Navigator. Opening a browser on http://localhost:7500 at this point should result in a “cannot connect to the server” error.

If you do see a website on :7500 at this stage, this is likely running from another project. Check any other open terminal and kill that process if needed. If you cannot find where that stray Navigator is coming from, rebooting may be your best option.

If you do want a Navigator as part of your create-daml-app project (it should not be required), you can, before running daml start, open up the daml.yaml file under myapp and change line 16 from:

start-navigator: false

to

start-navigator: true

You should then be able to use Navigator to create a “following” relationship. Do note that you have to fill in a non-empty list of “following”. This will fail to create, as you described (barred O in the top right):

But this should succeed (if you are talking to a Navigator in the right project):

2 Likes
  1. I create the project
daml new bikeshopdemo1 --template empty-skeleton

cd bikeshopdemo1
daml studio
  1. I create the file BikeShop.daml file in the path ./daml/

BikeShop.daml – file contents:

module BikeShop where

import Daml.Script
import DA.Date

data Currency = USD | EUR | GBP | CHF
  deriving (Eq, Show)

template Cash
  with
    issuer: Party
    owner: Party
    currency: Currency
    amount: Decimal
  where
    signatory issuer
    controller owner can
      Transfer : ContractId Cash
        with
          newOwner: Party
        do
          create this with owner=newOwner

template BikeRepair
  with
    bikeShop: Party
    bikeOwner: Party
    description: Text
    price: Decimal
    paymentDue: Date
  where
    signatory bikeShop, bikeOwner
    controller bikeOwner can
      Pay : ContractId Cash
        with
          cashCid: ContractId Cash
        do
          exercise cashCid Transfer with newOwner=bikeShop    

template BikeRepairProposal
  with
    proposer: Party
    receiver: Party
    proposal: BikeRepair
  where
    signatory proposer
    controller receiver can
      Accept : ContractId BikeRepair
        do
          create proposal

test = do
  bank <- allocateParty "SwissBank"
  martin <- allocateParty "Martin"
  bikeshop <- allocateParty "BikeShop"
  
  let
    cash = Cash
      with
        issuer = bank
        owner = martin
        currency = CHF
        amount = 200.0
  cashCid <- submit bank do
    createCmd cash
    
  let
    bikeRepair = BikeRepair
      with
        bikeShop = bikeshop
        bikeOwner = martin
        description = "fix the bike"
        price = 200.0
        paymentDue = date 2021 Feb 17
        
  proposalCid <- submit bikeshop do
    createCmd BikeRepairProposal
      with
        proposer = bikeshop
        receiver = martin
        proposal = bikeRepair
        
  repairCid <- submit martin do
    exerciseCmd proposalCid Accept
    
  submit martin do
    exerciseCmd repairCid Pay with cashCid        

  pure()
  1. I compile the project
daml build
  1. I create the ui/ interface
daml codegen js .daml/dist/bikeshopdemo1-0.0.1.dar -o ui/daml.js
  1. Deploy
daml start

vagrant@vagrant:~/daml/bikeshopdemo1$ cd .daml/
dist/             interfaces/       package-database/ 
vagrant@vagrant:~/daml/bikeshopdemo1$ daml start
SDK 1.11.1 has been released!
See https://github.com/digital-asset/daml/releases/tag/v1.11.1 for details.

SDK 1.11.1 has been released!
See https://github.com/digital-asset/daml/releases/tag/v1.11.1 for details.

Compiling bikeshopdemo1 to a DAR.
Created .daml/dist/bikeshopdemo1-0.0.1.dar
Waiting for sandbox to start: 
INFO: Slf4jLogger started
INFO: Listening on localhost:6865 over plain text.
   ____             ____
  / __/__ ____  ___/ / /  ___ __ __
 _\ \/ _ `/ _ \/ _  / _ \/ _ \\ \ /
/___/\_,_/_//_/\_,_/_.__/\___/_\_\

INFO: Initialized sandbox version 1.8.0 with ledger-id = 87e12448-1bc6-4dc9-9035-a1afb831fe26, port = 6865, dar file = List(.daml/dist/bikeshopdemo1-0.0.1.dar), time mode = wall-clock time, ledger = in-memory, auth-service = AuthServiceWildcard$, contract ids seeding = strong
Waiting for navigator to start: 
   _  __          _           __
  / |/ /__ __  __(_)__ ____ _/ /____  ____
 /    / _ `/ |/ / / _ `/ _ `/ __/ _ \/ __/
/_/|_/\_,_/|___/_/\_, /\_,_/\__/\___/_/
                 /___/
Version 1.8.0
Frontend running at http://localhost:7500.
...........Waiting for JSON API to start: 
13:51:25.110 [main] INFO  com.daml.http.Main$ - Config(ledgerHost=localhost, ledgerPort=6865, address=127.0.0.1, httpPort=7575, portFile=None, packageReloadInterval=5 seconds, packageMaxInboundMessageSize=None, maxInboundMessageSize=4194304, tlsConfig=TlsConfiguration(false,None,None,None,REQUIRE,false), jdbcConfig=None, staticContentConfig=None, allowNonHttps=true, accessTokenFile=None, wsConfig=None)
13:51:25.786 [http-json-ledger-api-akka.actor.default-dispatcher-5] INFO  akka.event.slf4j.Slf4jLogger - Slf4jLogger started
13:51:29.027 [http-json-ledger-api-akka.actor.default-dispatcher-6] INFO  com.daml.http.HttpService$ - Connected to Ledger: 87e12448-1bc6-4dc9-9035-a1afb831fe26
13:51:29.029 [http-json-ledger-api-akka.actor.default-dispatcher-6] INFO  com.daml.http.HttpService$ - contractDao: None
13:51:31.971 [http-json-ledger-api-akka.actor.default-dispatcher-6] INFO  com.daml.http.PackageService - new package IDs loaded: 305f88952990a57bdefb3a8556ba65d7951606397564270186108157f73e95e1, c1f1f00558799eec139fb4f4c76f95fb52fa1837a5dd29600baa1c8ed1bdccfd, 733e38d36a2759688a4b2c4cec69d48e7b55ecc8dedc8067b815926c917a182a, 02da7f6b391f26e5a4c6e1e120b84d3a570fb0e0781e50a60b1085cce7c265cc, bfcd37bd6b84768e86e432f5f6c33e25d9e7724a9d42e33875ff74f6348e733f, 518032f41fd0175461b35ae0c9691e08b4aea55e62915f8360af2cc7a1f2ba6c, cc348d369011362a5190fe96dd1f0dfbc697fdfd10e382b9e9666f0da05961b7, 6839a6d3d430c569b2425e9391717b44ca324b88ba621d597778811b2d05031d, 7cbb10d2488454034d290b8c16b7cfa4fc59c749ca379696c54f74bf453f52b3, 99a2705ed38c1c26cbb8fe7acf36bbf626668e167a33335de932599219e0a235, a8ea38e5992fb992237db9973af9ce63fa78ba8fb103cea3a5d739ac313c909c, 76bf0fd12bd945762a01f8fc5bbcdfa4d0ff20f8762af490f8f41d6237c6524f, e22bce619ae24ca3b8e6519281cb5a33b64b3190cc763248b4c3f9ad5087a92c, d58cf9939847921b2aab78eaa7b427dc4c649d25e6bee3c749ace4c3f52f5c97, 6c2c0667393c5f92f1885163068cd31800d2264eb088eb6fc740e11241b2bf06, d14e08374fc7197d6a0de468c968ae8ba3aadbf9315476fd39071831f5923662, 057eed1fd48c238491b8ea06b9b5bf85a5d4c9275dd3f6183e0e6b01730cc2ba, e491352788e56ca4603acc411ffe1a49fefd76ed8b163af86cf5ee5f4c38645b, 40f452260bef3f29dede136108fc08a88d5a5250310281067087da6f0baddff7, 8a7806365bbd98d88b4c13832ebfa305f6abaeaf32cfa2b7dd25c4fa489b79fb
13:51:32.996 [http-json-ledger-api-akka.actor.default-dispatcher-5] INFO  com.daml.http.Main$ - Started server: ServerBinding(/127.0.0.1:7575)
......................
Press 'r' to re-build and upload the package to the sandbox.
Press 'Ctrl-C' to quit.
  1. load in the project by invoking it from the browser http://localhost:7500

  2. The application loads in the web browser, I log in, I choose a template, I enter the data but the contract is not created.

  3. when I check the ui/ folder there is only one daml.js file
    so my questions are;

  • do I need to create other files and if so how do I do it, is there an example (a guide)?
  • or what is the error because the contract is not created.

RESUMEN
in other examples I have seen that the ui/ folder has more files and also when the contract is created an icon appears for a few seconds at the top right of the browser indicating that the contract is created, a check is displayed and then disappears.

In this example the check does not appear but an icon appears that is like a zero with a diagonal inside and the contract is not created.

The empty-skeleton is meant to be ultra-minimalist; the presumption is that you are using this because you know what files you need to create to start getting a complete project.

This doesn’t create a UI; it only generates Typescript types that make it easier to interact with your template and other data types from Typescript. So for example when you query for contracts from your Typescript code, you have types representing what will actually be in those contracts. If you do not write any Typescript code that uses this output, it does nothing.

Since empty-skeleton is meant for someone who already is comfortable with this, the best place to start is to use the create-daml-app template and follow the Getting Started guide. The extra contents you see in ui from this template are [mostly] not boilerplate that belongs in every project; they are examples of how to do practical things when building a UI frontend with @daml/react. The getting started guide then shows how you would add features, what that would look like.

Once you are comfortable with what is going on in create-daml-app, that is the time to use empty-skeleton if you want to build everything your way, yourself.

2 Likes

Hi @magzupao,

If you do see a list of templates in the templates tab of Navigator, it means it is correctly connected to the sandbox. This leaves just one possible issue, which is that the contract creation failed because you entered invalid data.

If I run

daml new t
cd t

then replace daml/Main.daml with the code you provided, remove the init-script entry of daml.yaml (line 7), and run

daml start

I get a seemingly working Navigator on port 7500. I can log in as Alice, and create a Cash contract:

which, after a few seconds, appears in the contracts view:

Note that there is no need to run daml codegen js at this point, and nothing is expected to happen to the ui folder. Contracts are stored in the memory of the sandbox application, not as files in the project.

If you are still seeing failures, please share a screenshot of the contract form before clicking submit so we can take a look at the data your are submitting.

2 Likes

Thank you very much for your comments.
I am closing the queries and will continue testing D

1 Like