Quest Operation Matching

The indexer can iterate through all the operations within a block to see if they match specific criteria. The Criteria is pre-defined with a specific format. The specific criteria for each game can all be seen at in API quests endpoint. The criteria much be defined as JSON in a specific way.

  • each property of the operation representated as a string seperated by the : character
  • If the operation property is an arrary it becomes flattened into an object

See Block Example for how the JSON of a block looks like when returned from the RPC endpoint

For example: the below criteria will match all operations in a block where the chain_id is NetXm8tYqnMWky1

  "operations": [
    [
      {
        ...
        "chain_id": "NetXm8tYqnMWky1"
        ...
      }
    ]
  ]

Below is a sample of possible criteria that can be used:

[
    {
        name: 'transfer XTZ',
        description: 'easy filters to pass; any transaction over 1 XTZ',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXm8tYqnMWky1',
            'operations:contents:kind': 'transaction',
            'operations:contents:amount': {
                eval: 'value >= 1000000'
            },
        }
    },
    {
        name: 'to-dirauth',
        description: 'Use Kukai wallet to send >= x amount of tez to a DirectAuth Kukai account',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXm8tYqnMWky1',
            'operations:contents:kind': 'transaction',
            'operations:contents:destination': {
                eval: 'value.substr(0,3) == "tz2"',
            },
            'operations:contents:amount': {
                eval: 'value >= 1000000'
            },
        }
    },
    {
        name: 'from-dirauth',
        description: 'Use Kukai to send tez from a DirectAuth account to any recipient',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXm8tYqnMWky1',
            'operations:contents:kind': 'transaction',
            'operations:contents:source': {
                eval: 'value.substr(0,3) == "tz2"',
            },
            'operations:contents:amount': {
                eval: 'value >= 1000000'
            },
        }
    },
    // https://docs.tezos.domains/deployed-contracts/delphinet
    // https://delphinet.tezos.domains/
    {
        name: 'register-domain',
        description: 'Register a domain with Tezos Domains',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXm8tYqnMWky1',
            'operations:contents:kind': 'transaction',
            'operations:contents:destination': 'KT1Av7mi7s2tm7The7xZGQB5rX5g8sZTNrqN',
            'operations:contents:parameters:entrypoint': 'buy',
        }
    },
    {
        name: 'send-FA2',
        description: 'Send Any FA2 token to a friend',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXm8tYqnMWky1',
            'operations:contents:kind': 'transaction',
            'operations:contents:destination': {
                eval: 'value.substr(0,3) == "KT1"'
            },
            'operations:contents:parameters:entrypoint': 'transfer',
        }
    },
    {
        name: 'send-contrct',
        description: 'Send an FA2 token in a defined contract X to any recipient',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXm8tYqnMWky1',
            'operations:contents:kind': 'transaction',
            'operations:contents:destination': '<KT1...>',
            'operations:contents:parameters:entrypoint': 'transfer',
        }
    },
    {
        name: 'contrct-to-dauth',
        description: 'Send an FA2 token in a defined contract X to a Twitter (DirectAuth) user',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXm8tYqnMWky1',
            'operations:contents:kind': 'transaction',
            'operations:contents:source': {
                eval: 'value.substr(0,3) == "tz2"',
            },
            'operations:contents:destination': '<KT1...>',
            'operations:contents:parameters:entrypoint': 'transfer',
        }
    },

    // https://quipuswap.com/
    {
        name: 'quipuswap-swap',
        description: 'Perform a swap on Quipuswap',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXm8tYqnMWky1',
            'operations:contents:kind': 'transaction',
            'operations:contents:amount': {
                eval: 'value >= 1000000'
            },
            'operations:contents:destination': {
                eval: `[${quipuswap.map(d => `"${d.account}"`)}].includes(value)`
            },
            'operations:contents:parameters:entrypoint': 'use',
        }
    },
    {
        name: 'quipuswap-liquidity',
        description: 'Provide liquidity on Quipuswap',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXm8tYqnMWky1',
            'operations:contents:kind': 'transaction',
            'operations:contents:destination': {
                eval: `[${quipuswap.map(d => `"${d.contract}"`)}].includes(value)`
            },
            'operations:contents:parameters:value:args:string': {
                eval: `[${quipuswap.map(d => `"${d.account}"`)}].includes(value)`
            },
            'operations:contents:parameters:entrypoint': 'approve',
        }
    },

    /* This would be for delphinet */
    // https://test.app.dexter.exchange/
    {
        name: 'dexter-swap',
        description: 'Perform a swap on Dexter',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXdQprcVkpaWU',
            'operations:contents:kind': 'transaction',
            'operations:contents:destination': {
                eval: `[${dexterDelphi.map(d => `"${d.account}"`)}].includes(value)`
            },
            'operations:contents:parameters:entrypoint': {
                eval: '["xtzToToken","tokenToXtz","tokenToToken"].includes(value)'
            },
        }
    },
    {
        name: 'dexter-liquidity',
        description: 'Provide liquidity on Dexter',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXdQprcVkpaWU',
            'operations:contents:kind': 'transaction',
            'operations:contents:amount': {
                eval: 'value >= 1000000'
            },
            'operations:contents:destination': {
                eval: `[${dexterDelphi.map(d => `"${d.account}"`)}].includes(value)`
            },
            'operations:contents:parameters:entrypoint': 'addLiquidity',
        }
    },
    /* This would be for mainnet */
    // https://app.dexter.exchange/
    // https://better-call.dev/mainnet/KT1DrJV8vhkdLEj76h1H9Q4irZDqAkMPo1Qf/code
    {
        name: 'dexter-swap',
        description: 'Perform a swap on Dexter',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXdQprcVkpaWU',
            'operations:contents:kind': 'transaction',
            'operations:contents:destination': {
                eval: `[${dexter.map(d => `"${d.account}"`)}].includes(value)`
            },
            'operations:contents:parameters:entrypoint': {
                eval: '["xtzToToken","tokenToXtz","tokenToToken"].includes(value)'
            },
        }
    },
    {
        name: 'dexter-liquidity',
        description: 'Provide liquidity on Dexter',
        reward: 'operations:contents:0:source',
        criteria: {
            'operations:chain_id': 'NetXdQprcVkpaWU',
            'operations:contents:kind': 'transaction',
            'operations:contents:amount': {
                eval: 'value >= 1000000'
            },
            'operations:contents:destination': {
                eval: `[${dexter.map(d => `"${d.account}"`)}].includes(value)`
            },
            'operations:contents:parameters:entrypoint': 'addLiquidity',
        }
    },
]