Version: 23.1.0

This documentation is for Taquito version 23.1.0 and is no longer being updated. Some information may be outdated. View the latest version .

Failing Noop

Written by Alireza Haghshenas

Introduction

There are use cases for allowing users to sign arbitrary data. It is important to ensure that data cannot be injected into the blockchain. The failing_noop operation can wrap arbitrary data and is guaranteed to fail.

Signing a failing_noop using the contract api

const signed = await Tezos.contract.failingNoop({
    arbitrary: "48656C6C6F20576F726C64", // Hex for: Hello World
    basedOnBlock: 'head', // Can also be 0, to be based on the genesis block
});

The params.arbitrary is a bytes string, with the hex representation of the payload to be signed. The field basedOnBlock is a BlockIdentifier:

type BlockIdentifier = 'head' | `head~${number}` | `B${string}` | number;

The payload can be signed on head, or a specified number of blocks before head, or a block referenced by hash, or a block referenced by level.

Signing a failing_noop using the wallet api

const signed = await Tezos.wallet.signFailingNoop({
    arbitrary: "48656C6C6F20576F726C64", // Hex for: Hello World
    basedOnBlock: 0,
});

Both APIs should return a signed object of the form:

{
    "signature": "spsig1QVVCiQ6aN2zmut2wKTg4zWLoP9ia4qUY2hBo21odA7P25gqfieFWJMyntaJWmyrd6v3mgjKF5n4d2wcaB3LxkLmd1MoJQ",
    "bytes": "df2788eed43ab680c8a2b79969ce4de93b9768cd2786a85ebdfba90ca7612638110000000b48656c6c6f20576f726c64",
    "signedContent": {
    "branch": "BMQZWtQjSpyJZBVHbABEmVP9VG8yEZPZ3wNftwZdXt6A33ZYatj",
    "contents": [
        {
        "kind": "failing_noop",
        "arbitrary": "48656C6C6F20576F726C64"
        }
    ]
    }
}

You can verify the signature:

//import { verifySignature } from "@taquito/utils";

verifySignature(signed.bytes, await Tezos.signer.publicKey(), signed.prefixSig, new Uint8Array([3]))