Typescript SDK
Let's generate a Typescript SDK for KT1Fjiwsmo49yM7jch6KG4ETLFkatF3Qj8of and interact with it. See section SDK generation for the details about this contract. The Typescript SDK relies on the Taquito library for forging and signing operations.
Import a KT1 from the Tezos blockchain
To generate the SDK of the contract in the current directory, run:
factori import kt1 . KT1Fjiwsmo49yM7jch6KG4ETLFkatF3Qj8of \
--typescript \
--name my_contract \
--network ghostnet \
--force
Compile deps and SDK
You will need to have Node installed.
Then you want to install the necessary Typescript dependencies, compile your SDK, and cleanly format the generated code:
make ts-deps
make format-ts # optional but recommended
make ts
You are ready to use the Typescript SDK!
Hello world example
First, you may want to have a look at the content of src/typescript_sdk/src/
directory.
ls src/typescript_sdk/src/
Create a file src/typescript_sdk/src/test.ts
with the following content:
import * as C from "./my_contract_interface"
import * as functolib from "./functolib"
import {
TezosToolkit,
} from "@taquito/taquito"
var config = functolib.ghostnet_config;
const tezosKit = new TezosToolkit(config.node_addr)
const debug = false
async function main(tezosKit: TezosToolkit){
functolib.setSigner(tezosKit, functolib.alice_flextesa.sk);
let hello_kt1 = "KT1Fjiwsmo49yM7jch6KG4ETLFkatF3Qj8of"
let res = await C.call_hello(tezosKit, hello_kt1, "Hello from typescript", 0, "", true);
console.log("Operation sent to a node. Its hash is: " + res.hash);
console.log("Check its status: https://ghostnet.tzkt.io/" + res.hash);
// TODO: Add a await inclusion here.
return;
}
main(tezosKit)
Recompile with
make ts
Run with
node src/typescript_sdk/dist/test.js
If everything goes well, you should see your transaction at: https://ghostnet.tzkt.io/KT1Fjiwsmo49yM7jch6KG4ETLFkatF3Qj8of
Quick Deploy
If you want to quickly re-originate the contract, you can run
factori deploy --typescript --network ghostnet --storage blockchain my_contract
This will deploy the contract on Ghostnet, using Flextesa's Alice account, and with as initial storage the storage on the blockchain at the moment of importation.
Remark
If you run into the error
TypeError: Do not know how to serialize a BigInt
at JSON.stringify (<anonymous>)
when using JSON.stringify
in your code, the file functolib.ts
exports a variable JSONbig
which has a stringify
method that will
solve this error (thanks to the json-bigint
library). You can hence
simply use JSONbig.stringify
.
Note that, if no language is specified, the SDK generated by Factori is the Typescript one.