3.0.4 • Published 1 month ago

@subsquid/ink-typegen v3.0.4

Weekly downloads
-
License
GPL-3.0-or-later
Repository
github
Last release
1 month ago

@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()
3.0.4

1 month ago

3.0.3

6 months ago

3.0.2

8 months ago

3.0.1

8 months ago

3.0.0

9 months ago

2.0.1

10 months ago

2.0.0

10 months ago

1.2.0

12 months ago

1.0.0

1 year ago

0.2.1

1 year ago

0.2.0

1 year ago

0.1.1

1 year ago

0.1.0

1 year ago

0.0.5

1 year ago

0.0.1

2 years ago

0.0.3

1 year ago

0.0.2

2 years ago

0.0.4

1 year ago

0.0.0

2 years ago