@gravi-labs/lift
TypeScript icon, indicating that this package has built-in type declarations

0.1.0 • Public • Published

Lift

The aim of Lift is to have unified and chain agnostic tool that helps with local development and production deployment of CosmWasm smart contracts and dApps.

Commands

Usage: lift [options] [command]

Options:
  -V, --version                         output the version number
  -h, --help                            display help for command

Commands:
  init <CHAIN>                          Initialize config
  build [options]                       Build and optimize workspace contracts
  upload [options] <CONTRACT>           Upload contract
  instantiate [options] <CONTRACT>      Instantiate contract
  execute [options] <CONTRACT>          Execute contract message
  query [options] <CONTRACT>            Query data from contract
  state [options] <CONTRACT>            Dump contract state
  ts-gen [options]                      Generate TypeScript type definitions and clients
  script [options] <SCRIPT> [CONTRACT]  Run a script with workspace context and optionally contract
  task:new <name>                       Create new task
  task:new:contract <name>              Create new contract task
  task:run                              Run task
  help [command]                        display help for command

General arguments for most of the commands:

  • -n / --network <NETWORK_NAME>: Name of the network to use, based on networks defined in Lift.toml config (default: local)
  • -a / --account <ACCOUNT_NAME>: Name of the account to use as transaction signer, based on accounts defined in Lift.toml config (default: first account defined in Lift.toml config)

lift init <CHAIN>

Initialize lift config

Arguments:

  • <CHAIN> Chain name - sei, osmosis, neutron, injective

lift build

Build and optimize workspace contracts

lift upload <CONTRACT>

Upload contract to the chain

Arguments:

  • <CONTRACT> Name of the contract to upload

lift instantiate <CONTRACT>

Instantiate contract

Arguments:

  • <CONTRACT> Name of the contract to instantiate
  • -i / --instance <CONTRACT_INSTANCE>: Contract instance name, could be used in case you want to create more than one contract instance (default: default)

lift execute <CONTRACT>

Execute contract message

Arguments:

  • <CONTRACT> Name of the contract
  • -m / --msg <MSG>: Execute message
  • -i / --instance <CONTRACT_INSTANCE>: Contract instance name (default: default)

lift query <CONTRACT>

Query data from contract

Arguments:

  • <CONTRACT> Name of the contract
  • -m / --msg <MSG>: Query message
  • -i / --instance <CONTRACT_INSTANCE>: Contract instance name (default: default)

lift state <CONTRACT>

Dump contract state

Arguments:

  • <CONTRACT> Name of the contract
  • -i / --instance <CONTRACT_INSTANCE>: Contract instance name (default: default)

lift ts-gen

Generate TypeScript type definitions and clients based on contracts defined in the Lift.toml config, [ts-gen] section

lift task:new <NAME>

Create new task

Arguments:

  • <NAME> Task name

lift task:new:contract <NAME>

Create new contract task

Arguments:

  • <NAME> Task name

lift task:run <NAME> [CONTRACT]

Run task

Arguments:

  • <NAME> Task name
  • [CONTRACT] Optional contract name

Configuration

Lift.toml

name = 'the-game'
gas_price = '0.01usei'
account_prefix = 'sei'

[networks.local]
chain_id = 'sei-chain'
network_variant = 'Local'
rpc_endpoint = 'http://localhost:26657'

[networks.testnet]
chain_id = 'atlantic-2'
network_variant = 'Shared'
rpc_endpoint = 'https://rpc.atlantic-2.seinetwork.io'

[networks.mainnet]
chain_id = 'pacific-1'
network_variant = 'Shared'
rpc_endpoint = 'https://sei-rpc.polkachu.com'

[accounts.test1]
mnemonic = 'famous vast bullet upgrade dynamic raven help mistake omit enrich kitchen learn clutch code rule wood cream crystal work enable hamster ticket general mouse'

[accounts.test2]
mnemonic = 'primary trash mirror husband food sand lake razor expire pair ocean tackle carpet offer regret space small fantasy fiscal orphan coral key panda void'

[wasm]
contract_dir = 'contracts'
optimizer_version = '0.12.13'

[ts-gen]
out_path = 'app/src/contracts'
contracts = ["counter", "the-game"]

State

State is stored in .lift folder of your repository.

Local state is stored in .lift/state.local.json file and it's recommend to add state.local.json file to .gitignore since it's machine specific.

Shared state is stored in .lift/state.json file

Tasks

Lift supports custom tasks for implementing custom logic or executing multiple commands. Tasks are located in the tasks folder of your repository.

General Task

import { task } from '@gravi-labs/lift'

task((context) => {
  console.log('Hello from task!')
})

Contract task

import { contractTask } from '@gravi-labs/lift'

contractTask((context, contract) => {
  console.log('Hello from contract task!')
})

Task with custom command line arguments

import { task, workspaceCommand } from '@gravi-labs/lift'

const command = workspaceCommand()
command.option('-l, --log', 'log')

task(command, (context) => {
  const options = command.opts()
  if (options.log) {
    console.log('Hello from task!')
  }
})

TODO

  • app template - scaffold a template smart contract and frontend
  • integrate chain-registry (https://github.com/cosmos/chain-registry)
  • interactive console
  • multichain dApp support
  • plugins
    • load tasks from plugin
    • load other smart contracts (nft, dex, money market)
    • load mainnet / testnet contract state

Readme

Keywords

none

Package Sidebar

Install

npm i @gravi-labs/lift

Weekly Downloads

0

Version

0.1.0

License

SEE LICENSE IN LICENSE

Unpacked Size

56.7 kB

Total Files

55

Last publish

Collaborators

  • gravitybuilders