Skip to content

Bug: improper typing of contract execution result #5993

@TorstenStueber

Description

@TorstenStueber

I'm submitting a ...

  • Bug report

What is the current behavior and expected behavior?

The return result of executing a smart contract of pallet-contracts via the RPC method call is of type ContractExecResult.

This type contains an entry of type ContractReturnFlags. This type is defined as

export interface ContractReturnFlags extends Set {
  readonly isRevert: boolean;
}

However, the actual value returned changed between version 13.1.1 and version 13.2.1. Given a value flags of type ContractReturnFlags and executing the following line:

console.log(flags.toHuman(), flags.bits?.toNumber(), flags.isRevert)

results in the following output:

  • at version 13.1.1

    • if the contract did not revert: [] undefined false
    • if the contract reverted: [ 'Revert' ] undefined true
  • On version 13.2.1 I get the output instead:

    • if the contract did not revert: { bits: '0' } 0 undefined
    • if the contract reverted: { bits: '1' } 1 undefined

This suggests that the decoding has an unintended breaking change or the typings should be adapted. Possibly other bitflag types are affected as well.

Please tell us about your environment:

  • Version: 13.1.1 and 13.2.1

  • Environment:

    • Node.js
    • Browser
    • Other (limited support for other environments)
  • Language:

    • JavaScript
    • TypeScript (include tsc --version)
    • Other

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugTracks issues causing errors or unintended behavior, critical to fix for reliability.P2 - MediumImportant but not urgent. Enhances functionality and value, scheduled after higher priorities.

    Type

    No type

    Projects

    Status

    P2 - Medium

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions