Socket
Socket
Sign inDemoInstall

@subsquid/ink-typegen

Package Overview
Dependencies
65
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    @subsquid/ink-typegen

Generates TypeScript API for decoding ink! events, messages and constructors


Version published
Weekly downloads
20
decreased by-47.37%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

@subsquid/ink-typegen

Generates next code units:

  • TypeScript functions and all the necessary type definitions for type-safe decoding of ink! events, messages and constructors.
  • Class Contract that contains contracts_call queries to the contract's state.

Usage

npm i @subsquid/ink-abi # Generated code will reference this package
npm i @subsquid/ink-typegen --save-dev
Options:
  --abi <path>     path to a JSON metadata file
  --output <path>  path for output typescript file
  -h, --help       display help for command

Typegen might be started as follows:
squid-ink-typegen --abi erc20.json --output src/erc20.ts

Decoding

Generated fuctions allow to decode scale-encoded data for 3 different kind of ink! objects:

  • constructor - it's arguments that the contract receives on instantiation
  • message - it's arguments that the contract receives on call execution
  • event - it's data that the contract emittes on call execution
// Generated code:
const _abi = new Abi(metadata)

export function decodeEvent(hex: string): Event {
  return _abi.decodeEvent(hex)
}

export function decodeMessage(hex: string): Message {
  return _abi.decodeMessage(hex)
}

export function decodeConstructor(hex: string): Constructor {
  return _abi.decodeConstructor(hex)
}

// Usage example:
let event = decodeEvent(item.event.args.data)
if (event.__kind === 'Transfer') {
    // event is of type `Event_Transfer`
}

Reading state

Contract class provides state calls for an every message that doesn't mutate the contract's state. The info about mutability is taken from the metadata.

// Generated code:
export class Contract {
    total_supply(): Promise<Balance> {
        return this.stateCall('0xdb6375a8', [])
    }

    balance_of(owner: AccountId): Promise<Balance> {
        return this.stateCall('0x0f755a56', [owner])
    }

    allowance(owner: AccountId, spender: AccountId): Promise<Balance> {
        return this.stateCall('0x6a00165e', [owner, spender])
    }
}

// Usage example:
let contract = new Contract(ctx, contractAddress)
let totalSupply = await contract.total_supply()

FAQs

Last updated on 09 Apr 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc