Skip to main content
Last updated

Contract-based interaction using @kadena/client

We wanted @kadena/client to be independent so this is a tool that can be used with arbitrary contracts. That is also why you have to generate the interfaces used by @kadena/client. You can use smart contracts from the blockchain or your own local ones.

For the template based interaction we will provide a repository with templates that can be used.

Generate interfaces from the blockchain

Generate types directly from a contract on the blockchain:

sh
pactjs contract-generate --contract "coin" --api "https://api.chainweb.com/chainweb/0.0/mainnet01/chain/1/pact"
sh
pactjs contract-generate --contract "coin" --api "https://api.chainweb.com/chainweb/0.0/mainnet01/chain/1/pact"

The log shows what has happened. Inside the node_modules directory, a new package has been created: .kadena/pactjs-generated. This package is referenced by @kadena/client to give you type information.

NOTE: Make sure to add the new types to compilerOptions in tsconfig.json:

json
{  "compilerOptions": {    "types": [".kadena/pactjs-generated"]  }}
json
{  "compilerOptions": {    "types": [".kadena/pactjs-generated"]  }}

Generate interfaces locally

You can create your own smart contract or download it from the blockchain using pactjs.

Using the contract we'll now generate all the functions (defun) with their (typed) arguments and capabilities (defcap).

sh
pactjs contract-generate --file "./contracts/coin.module.pact"
sh
pactjs contract-generate --file "./contracts/coin.module.pact"

Downloading contracts from the blockchain

Let's download the contracts you want to create Typescript interfaces for:

sh
mkdir contractsnpx pactjs retrieve-contract --out "./contracts/coin.module.pact" --module "coin"
sh
mkdir contractsnpx pactjs retrieve-contract --out "./contracts/coin.module.pact" --module "coin"

There are several options to retrieve contracts from another network or chain.

Use --help to get information on retrieve-contract:

txt
> pactjs retrieve-contract --helpUsage: pactjs retrieve-contract [options]Retrieve contract from a chainweb-api in a /local call (see also: https://github.com/kadena-io/chainweb-node#configuring-running-and-monitoring-the-health-of-a-chainweb-node).Options:  -m, --module <module>    The module you want to retrieve (e.g. "coin")  -o, --out <file>         File to write the contract to  --api <url>              API to retrieve from (e.g. "https://api.chainweb.com/chainweb/0.0/mainnet01/chain/8/pact")  -n, --network <network>  Network to retrieve from (default "mainnet") (default: "mainnet")  -c, --chain <number>     Chain to retrieve from (default 1) (default: 1)  -h, --help               display help for command
txt
> pactjs retrieve-contract --helpUsage: pactjs retrieve-contract [options]Retrieve contract from a chainweb-api in a /local call (see also: https://github.com/kadena-io/chainweb-node#configuring-running-and-monitoring-the-health-of-a-chainweb-node).Options:  -m, --module <module>    The module you want to retrieve (e.g. "coin")  -o, --out <file>         File to write the contract to  --api <url>              API to retrieve from (e.g. "https://api.chainweb.com/chainweb/0.0/mainnet01/chain/8/pact")  -n, --network <network>  Network to retrieve from (default "mainnet") (default: "mainnet")  -c, --chain <number>     Chain to retrieve from (default 1) (default: 1)  -h, --help               display help for command