Deploying a Smart Contact
In the dapp-offer-up tutorial you just went through you saw how quick and easy it was to deploy a contact on Agoric using the yarn start:contract command. Let's take a look at how this command works and what's going on behind the scenes.
How it Works
Running the yarn start:contract command in the tutorial runs a script which accomplishes several things:
- The script bundled the contract with the
agoric runcommand - The script collected some ATOM with the
agd tx bank sendcommand - The script then used the ATOM to open a vault. This vault was used to mint enough IST to pay to install the bundles on chain with
agops vaults opencommand - The script then installed the bundles on chain with the
agd tx swingset install-bundlecommand - From there the script collected enough BLD to pay for a governance deposit with the
agd tx bank sendcommand - Next, the script made a governance proposal to start the contract with the
agd tx gov submit-proposal swingset-core-evalcommand - Finally, the script voted for the proposal and waited for the proposal to pass.
Once again, we can reference the project's package.json file to learn a bit more about what yarn start:contract is doing behind the scenes.
"scripts": {
"start:docker": "cd contract && docker compose up -d",
"docker:logs": "cd contract; docker compose logs --tail 200 -f",
"docker:bash": "cd contract; docker compose exec agd bash",
"docker:make": "cd contract; docker compose exec agd make -C /workspace/contract",
"make:help": "make -C contract list",
"start:contract": "cd contract && yarn start",
"start:ui": "cd ui && yarn dev",
"lint": "yarn workspaces run lint",
"test": "yarn workspaces run test",
"test:e2e": "yarn workspace offer-up-ui test:e2e",
"build": "yarn workspaces run build"
}Note the calling the yarn start:contract command is the same as running yarn start from the contract directory. We can look at package.json from the contract directory to learn even more:
"scripts": {
"start:docker": "docker compose up -d",
"docker:logs": "docker compose logs --tail 200 -f",
"docker:bash": "docker compose exec agd bash",
"docker:make": "docker compose exec agd make -C /workspace/contract",
"make:help": "make list",
"start": "yarn docker:make clean start-contract",
"build": "agoric run scripts/build-contract-deployer.js",
"test": "ava --verbose",
"lint": "eslint '**/*.js'",
"lint:fix": "eslint --fix '**/*.js'"
},In the json snippet above note that the start command is running yarn docker:make clean start-contract.
Video Walkthrough
As you're going through this explainer it may be helpful to watch this video walkthrough.