/watcher

Work with Crypto.Tickets Blockchain

Primary LanguageJavaScript

Watcher

Deployment

Configuration

Copy config-example.json to config.json and change the values as you needed.

Compile SmartContract Sources

apt-get install solc
solc -o contracts/build/bin --optimize --bin contracts/source/Event.sol
solc -o contracts/build/abi --optimize --abi contracts/source/Event.sol

Run

git clone git@github.com:cryptoticket/watcher.git
npm install
npm install -g pm2
pm2 start index.js

API Description

Contracts

GET contract/:event/info

Return contract metadata and tickets processing events

Request
Parameters
Parameter Type Required Description
event string Yes Contract Address in Ethereum Network
Response
Parameters
Parameter Type Required Description
metadata object Yes Event metadata from IPFS
tickets array Yes All tickets processing events
Example

200 OK

{
    "metadata": {
        "name": "400 les coups, Truffaut",
        "description": "K I N O",
        "start": "1527764400",
        "end": "1528311600",
        "language": "ru",
        "currency": "RUB",
        "venue": {
            "address": "пр. Энгельса, 30",
            "city": "498817",
            "country_code": "RU",
            "lat": "60.00711782796839",
            "lon": "30.327372550964355",
            "name": "Шурпа на Энгельса",
            "region": "",
            "zip_code": ""
        },
        "organizer": {
            "created": "1527593035",
            "external_id": "5b0d374f0944c10017fcce16",
            "id": "650",
            "is_active": "true",
            "name": "Дед купи конфет",
            "updated": "1527593036",
            "wallet": "0x631ef5701545e006a07a50b4536ef009442a0a86"
        },
        "legals": {
            "bank": "",
            "detail": "ООО \"Первая Развлекательная компания\", , г. Москва, Графский переулок, дом 14, строение 2, 4 этаж, ОГРН: 3452340982112, ИНН: 2345423521, КПП: 245345223",
            "name": "ООО \"Первая Развлекательная компания\"",
            "ssn": ""
        }
    },
    "tickets": [
        {
            "event": "TicketAllocated",
            "ticket": "0x71a41f8125c40fe23179007c8f61e69aad39ab4f743a738fd5492e80f587a735",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "ipfs": "QmVzFvvyc2dmMYE3nLRf5wTPXQjvq9S6dtmCjwjUSvdMmW",
            "metadata": {
                "category": "Танцпол или ВИП",
                "created": "1527593122",
                "external_id": "5b0d37cde9879a0001b604f3",
                "price": {
                    "currency": "RUB",
                    "nominal": "150"
                },
                "type": "common"
            }
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x933fdaa1e2169cc87082e010e40b106209f7f7372e2d898f46ebb0034fc4b6da",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "ipfs": "QmYFT7ZYVd3JhrsBWmxe45BkEfNEsBaGizQENGYfRKMHZT",
            "metadata": {
                "category": "Танцпол или ВИП",
                "created": "1527593125",
                "external_id": "5b0d37cde9879a0001b604f0",
                "price": {
                    "currency": "RUB",
                    "nominal": "150"
                },
                "type": "common"
            }
        },
        {
            "event": "TicketAllocated",
            "ticket": "0xab8dbcaa2a6df5fe64d1a3c17a606c4a4fe0437d2586e68a3d0205c9a5fb8f23",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "ipfs": "QmZtKn7yLdJVuZXxYUEfK4xx3DWBeLCMxTwFepYBaxNuir",
            "metadata": {
                "category": "Танцпол или ВИП",
                "created": "1527593130",
                "external_id": "5b0d37cde9879a0001b604f5",
                "price": {
                    "currency": "RUB",
                    "nominal": "150"
                },
                "type": "common"
            }
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x2975764896425c86585f43d60cc8208935f89b1d971d1f0470ed03fea59c9548",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "ipfs": "QmR8VJtKEqrHCEvAwJVsr14vxyFEPiBghcjc4aNM6yBcas",
            "metadata": {
                "category": "Танцпол или ВИП",
                "created": "1527593134",
                "external_id": "5b0d37cde9879a0001b604ef",
                "price": {
                    "currency": "RUB",
                    "nominal": "150"
                },
                "type": "common"
            }
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x7500b8ff97920f60628ab10b0d95944dd95f3fb82af1aab5e399c25310d14c0a",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "ipfs": "QmWDP3p4xeCCxf8C6oFhpyTdVWMYQ8kDykGqK5J8srZuKP",
            "metadata": {
                "category": "Танцпол или ВИП",
                "created": "1527593137",
                "external_id": "5b0d37cde9879a0001b604f4",
                "price": {
                    "currency": "RUB",
                    "nominal": "150"
                },
                "type": "common"
            }
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x881f56a1ae45f9b0472456ed8f9cfcc0c38ddab5d5d8266cb1c34e07288a8f08",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "ipfs": "QmXW1sYbQ5mhBgTD31gzziwDTLcRk9EE3A3nMEoBMRfABH",
            "metadata": {
                "category": "Танцпол или ВИП",
                "created": "1527593144",
                "external_id": "5b0d37cde9879a0001b604f2",
                "price": {
                    "currency": "RUB",
                    "nominal": "150"
                },
                "type": "common"
            }
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x647872e066d1bc03559b69c32d5b4bfd7ac0245c4c98846670c806da8a6708f1",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "ipfs": "QmV6r1EMgrEK4cKTdKC7Um75KPqbRs4f319FDGGL74Qx2t",
            "metadata": {
                "category": "Танцпол или ВИП",
                "created": "1527593149",
                "external_id": "5b0d37cde9879a0001b604f6",
                "price": {
                    "currency": "RUB",
                    "nominal": "150"
                },
                "type": "common"
            }
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x05d4fa9fe590ac61b384045a1a27e4af6ff8f97c39f0e4744643278c3257f712",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "ipfs": "QmNjR7CgEAFNhhzzsjkoyoHWCrfn5jtSaKrzggeRppCsLu",
            "metadata": {
                "category": "Танцпол или ВИП",
                "created": "1527593157",
                "external_id": "5b0d37cde9879a0001b604f1",
                "price": {
                    "currency": "RUB",
                    "nominal": "150"
                },
                "type": "common"
            }
        }
    ]
}

POST contract/:address/events

Return contract tickets processing events for certain blocks.

Request
Parameters
Parameter Type Required Description
address string Yes Contract Address in Ethereum Network
from string Yes Start block
to string Yes End block
Response
Parameters
Parameter Type Required Description
events object Yes Ticket processing Events
filter array Yes Filtered block numbers
Example

200 OK

{
    "events": [
        {
            "event": "TicketAllocated",
            "ticket": "0x71a41f8125c40fe23179007c8f61e69aad39ab4f743a738fd5492e80f587a735",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "block": 2368206
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x933fdaa1e2169cc87082e010e40b106209f7f7372e2d898f46ebb0034fc4b6da",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "block": 2368206
        },
        {
            "event": "TicketAllocated",
            "ticket": "0xab8dbcaa2a6df5fe64d1a3c17a606c4a4fe0437d2586e68a3d0205c9a5fb8f23",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "block": 2368206
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x2975764896425c86585f43d60cc8208935f89b1d971d1f0470ed03fea59c9548",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "block": 2368206
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x7500b8ff97920f60628ab10b0d95944dd95f3fb82af1aab5e399c25310d14c0a",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "block": 2368208
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x881f56a1ae45f9b0472456ed8f9cfcc0c38ddab5d5d8266cb1c34e07288a8f08",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "block": 2368208
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x647872e066d1bc03559b69c32d5b4bfd7ac0245c4c98846670c806da8a6708f1",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "block": 2368208
        },
        {
            "event": "TicketAllocated",
            "ticket": "0x05d4fa9fe590ac61b384045a1a27e4af6ff8f97c39f0e4744643278c3257f712",
            "to": "0x4da0e910505d8678d774154096d619fe6515f3b0",
            "block": 2368208
        }
    ],
    "filter": {
        "from": 2368206,
        "to": 2378206
    }
}

Tickets Methods

POST /ticket/:ticket/info

Return ticket information

Request
Parameters
Parameter Type Required Description
ticket string Yes Ticket Identifier
event string Yes Contract Address in Ethereum Network
Example
{
	"event": "0x94585c22cddfe4723c1175feccbfb213d5016d38"
}
Response
Parameters
Parameter Type Required Description
owner string Yes Customer address in Ethereum Network
metadata object Yes Ticket metadata from IPFS
Example

200 OK

    {
        "owner": "0x4da0e910505d8678d774154096d619fe6515f3b0",
        "metadata": {
            "category": "Танцпол или ВИП",
            "created": "1527593122",
            "external_id": "5b0d37cde9879a0001b604f3",
            "price": {
                "currency": "RUB",
                "nominal": "150"
            },
            "type": "common"
        }
    }

POST ticket/:ticket/verify

Method to verify ticket ownership

Request
Parameters
Parameter Type Required Description
ticket string Yes Ticket Identifier
event string Yes Contract Address in Ethereum Network
signature string Yes Message signature
Example
{
	"event": "0x94585c22cddfe4723c1175feccbfb213d5016d38",
	"signature": "0x2aa6adef43d4c386b3c3be21a4726a1a03b01ebc5a2e1fb79c6fc16f3d94e6a072cf81e43bea3ec6d65c1ad1efd240c02245dca8e0e2d887c676c8768baa73ee01"
}
Response
Parameters
Parameter Type Required Description
isValid boolean Yes Signature verifying result
signer string Yes Customer address signed message
owner string Yes Customer address in Ethereum Network
metadata object Yes Ticket metadata from IPFS
Example

200 OK

{
    "isValid": true,
    "signer": "0x4da0e910505d8678d774154096d619fe6515f3b0",
    "owner": "0x4da0e910505d8678d774154096d619fe6515f3b0",
    "metadata": {
        "category": "Танцпол или ВИП",
        "created": "1527593122",
        "external_id": "5b0d37cde9879a0001b604f3",
        "price": {
            "currency": "RUB",
            "nominal": "150"
        },
        "type": "common"
    }
}