Eos: Why different trx format

Created on 27 Aug 2018  ยท  6Comments  ยท  Source: EOSIO/eos

Run command:

cleos -u http://mainnet.genereos.io get block 12397949

We can see outputs:

{ "timestamp": "2018-08-22T04:59:29.000", "producer": "eosfishrocks", "confirmed": 0, "previous": "00bd2d7c2b9000f69588a9300662f4801a4804df9713bf472c9adb692b2e0cda", "transaction_mroot": "750ef4c2e454490096a413644b1ebc4cadcbd8e0012cb7351827c8e70abf121c", "action_mroot": "835a6d57ca3aa273ec3c336515d9d88f225e5d9de3b81d9b9b24030c86a29dc3", "schedule_version": 301, "new_producers": null, "header_extensions": [], "producer_signature": "SIG_K1_KbKNx2ZSeJt3sA5SG1V3FnpU62RetoUq1WFMQZ2Bn1RXNW7CVURvMjdYk3nunpBJLjrhAZfmmmtM1iodgnsePgzvYexPS3", "transactions": [{ "status": "executed", "cpu_usage_us": 1363, "net_usage_words": 0, "trx": "3c044e94bba3dda027144cb5d18d3c4a8ffe19a564d52a3b95df98da860cb1d2" },{ "status": "executed", "cpu_usage_us": 597, "net_usage_words": 0, "trx": "65c978595f81d7763e5edafb132aab03f8256e9e33cb449b8c7ee35942076e47" },{ "status": "executed", "cpu_usage_us": 1435, "net_usage_words": 17, "trx": { "id": "b8d6666a20360395f6d4d0448fd18820eaf056979e44643436e84f521f2bd001", "signatures": [ "SIG_K1_KVuumczKQku8k4UVtqYM1RTMaT5uogU3SHL88ixSKrPZcg8dVGAszNxXrboisUch35c4y54X49FXStUYpG9z9tpEnQ9tgg" ], "compression": "none", "packed_context_free_data": "", "context_free_data": [], "packed_trx": "ceed7c5b2f2ca14893eb000000000100a6823403ea3055000000572d3ccdcd0180a9ba7451d7556200000000a8ed32322580a9ba7451d7556210426053d5a9b891102700000000000004454f5300000000046764657800", "transaction": { "expiration": "2018-08-22T04:59:58", "ref_block_num": 11311, "ref_block_prefix": 3952298145, "max_net_usage_words": 0, "max_cpu_usage_ms": 0, "delay_sec": 0, "context_free_actions": [], "actions": [{ "account": "eosio.token", "name": "transfer", "authorization": [{ "actor": "gdexioforeos", "permission": "active" } ], "data": { "from": "gdexioforeos", "to": "mawenpeng111", "quantity": "1.0000 EOS", "memo": "gdex" }, "hex_data": "80a9ba7451d7556210426053d5a9b891102700000000000004454f53000000000467646578" } ], "transaction_extensions": [] } } },{ "status": "executed", "cpu_usage_us": 6580, "net_usage_words": 32, "trx": { "id": "c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536", "signatures": [ "SIG_K1_K8ytR9hjDeWp8rRrM51f3jiqQQpgdJNAoitvFiGP4fYHCACBEEoyvmTLNgETEdPJeFHbjmenP5yAmwis5erU56ixnfrzj7" ], "compression": "none", "packed_context_free_data": "", "context_free_data": [], "packed_trx": "eaed7c5b2f2ca14893eb00000000011082422e6575305500405647ed48b1ba0140a7c3066575305500000000489aa6b94abdfb000000000000002009d4875dcda2218f9c50fc983e0743a86d43329212ffaea7c6d173d94c35ec422a80597ce8fb7b78f1eb906e1e6e17b38a57ba8b0ee533eef7bccf101923412c00", "transaction": { "expiration": "2018-08-22T05:00:26", "ref_block_num": 11311, "ref_block_prefix": 3952298145, "max_net_usage_words": 0, "max_cpu_usage_ms": 0, "delay_sec": 0, "context_free_actions": [], "actions": [{ "account": "eosbetdice11", "name": "resolvebet", "authorization": [{ "actor": "eosbetcasino", "permission": "random" } ], "data": { "bet_id": 64445, "sig": "SIG_K1_KW2uhvjDgCA2pfiE3cKzTbV6dGraBrCttPyPhehtbDVjtCUvF36PugoEkcLFode9LHrHi41vRC9HCFjgomWWC3XqcS3nQR" }, "hex_data": "bdfb000000000000002009d4875dcda2218f9c50fc983e0743a86d43329212ffaea7c6d173d94c35ec422a80597ce8fb7b78f1eb906e1e6e17b38a57ba8b0ee533eef7bccf101923412c" } ], "transaction_extensions": [] } } } ], "block_extensions": [], "id": "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb", "block_num": 12397949, "ref_block_prefix": 1790494133 }

The "trx" value formats are different. The former 2 "trx" values are plain strings, while the latter 2 are json strings.

......"trx": "3c044e94bba3dda027144cb5d18d3c4a8ffe19a564d52a3b95df98da860cb1d2"...... ......"trx": "65c978595f81d7763e5edafb132aab03f8256e9e33cb449b8c7ee35942076e47"...... ......"trx": { "id": "b8d6666a20360395f6d4d0448fd18820eaf056979e44643436e84f521f2bd001",...... ......"trx": { "id": "c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536",......

This looks weird and hard to process in programming.
Is this by design?

All 6 comments

This is by design. The "trx" field in the transaction receipts in a block is a templated type that is used to store either a submitted packed transaction or a generated transaction. Generated transactions are stored in a different format.

But...why? This isn't really a good practice. The whole point of an API is to provide a standardized format responses to queries. If the result is sometimes going to be a hash, and sometimes a string, its a nightmare for everyone.
Store it internally however you like, but please provide a consistent response format in your APIs.

To expand on @jgiszczak's response: blocks don't include transactions generated in previous blocks; they just include the hash. nodeos doesn't normally have the necessary data to expand these transactions in memory; adding it would greatly expand ram usage.

I appreciate the response, could you please expand on that a little bit @tbfleming ? Does that mean that such transactions are seen elsewhere in previous blocks? I'm actually unable to look up any of these transactions by hash on various blockchain explorers

Yes. Current block explorers tend to get thrown off by:

  • deferred transactions: created and live in previous blocks
  • inline actions: don't appear in blocks at all

Both of these appear in action traces. Action traces are transient; nodeos doesn't store them. The mongodb plugin does report the action traces, but I don't know of any block explorers which use it yet.

Here are the first and last of that list:

> db.action_traces.find({"trx_id":"3c044e94bba3dda027144cb5d18d3c4a8ffe19a564d52a3b95df98da860cb1d2"}).pretty()
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d6d"),
    "receipt" : {
        "receiver" : "eosio.token",
        "act_digest" : "a703fe89b2039d38d5f245f8ab51c4dcc60d9f47dbeab6d0ac921e80dc3f886a",
        "global_sequence" : 291350301,
        "recv_sequence" : 4232457,
        "auth_sequence" : [
            [
                "eosbetdice11",
                491871
            ]
        ],
        "code_sequence" : 2,
        "abi_sequence" : 2
    },
    "act" : {
        "account" : "eosio.token",
        "name" : "transfer",
        "authorization" : [
            {
                "actor" : "eosbetdice11",
                "permission" : "active"
            }
        ],
        "data" : {
            "from" : "eosbetdice11",
            "to" : "eosbetdicerf",
            "quantity" : "0.1000 EOS",
            "memo" : "Referral reward! Play: dice.eosbet.io"
        },
        "hex_data" : "1082422e65753055b0ae422e65753055e80300000000000004454f530000000025526566657272616c207265776172642120506c61793a20646963652e656f736265742e696f"
    },
    "elapsed" : 392,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "3c044e94bba3dda027144cb5d18d3c4a8ffe19a564d52a3b95df98da860cb1d2",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [ ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.408Z")
}
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d6e"),
    "receipt" : {
        "receiver" : "eosbetdice11",
        "act_digest" : "a703fe89b2039d38d5f245f8ab51c4dcc60d9f47dbeab6d0ac921e80dc3f886a",
        "global_sequence" : 291350302,
        "recv_sequence" : 314295,
        "auth_sequence" : [
            [
                "eosbetdice11",
                491872
            ]
        ],
        "code_sequence" : 2,
        "abi_sequence" : 2
    },
    "act" : {
        "account" : "eosio.token",
        "name" : "transfer",
        "authorization" : [
            {
                "actor" : "eosbetdice11",
                "permission" : "active"
            }
        ],
        "data" : {
            "from" : "eosbetdice11",
            "to" : "eosbetdicerf",
            "quantity" : "0.1000 EOS",
            "memo" : "Referral reward! Play: dice.eosbet.io"
        },
        "hex_data" : "1082422e65753055b0ae422e65753055e80300000000000004454f530000000025526566657272616c207265776172642120506c61793a20646963652e656f736265742e696f"
    },
    "elapsed" : 159,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "3c044e94bba3dda027144cb5d18d3c4a8ffe19a564d52a3b95df98da860cb1d2",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [ ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.408Z")
}
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d6f"),
    "receipt" : {
        "receiver" : "eosbetdicerf",
        "act_digest" : "a703fe89b2039d38d5f245f8ab51c4dcc60d9f47dbeab6d0ac921e80dc3f886a",
        "global_sequence" : 291350303,
        "recv_sequence" : 2088,
        "auth_sequence" : [
            [
                "eosbetdice11",
                491873
            ]
        ],
        "code_sequence" : 2,
        "abi_sequence" : 2
    },
    "act" : {
        "account" : "eosio.token",
        "name" : "transfer",
        "authorization" : [
            {
                "actor" : "eosbetdice11",
                "permission" : "active"
            }
        ],
        "data" : {
            "from" : "eosbetdice11",
            "to" : "eosbetdicerf",
            "quantity" : "0.1000 EOS",
            "memo" : "Referral reward! Play: dice.eosbet.io"
        },
        "hex_data" : "1082422e65753055b0ae422e65753055e80300000000000004454f530000000025526566657272616c207265776172642120506c61793a20646963652e656f736265742e696f"
    },
    "elapsed" : 6,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "3c044e94bba3dda027144cb5d18d3c4a8ffe19a564d52a3b95df98da860cb1d2",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [ ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.408Z")
}
> 
> 
> 
> 
> 
> db.action_traces.find({"trx_id":"c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536"}).pretty()
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d75"),
    "receipt" : {
        "receiver" : "eosbetdice11",
        "act_digest" : "7535c1f76eb45a3e94926ccf8a44bbc28c2ffe0a66d087259757c660dbdb6a2f",
        "global_sequence" : 291350309,
        "recv_sequence" : 314297,
        "auth_sequence" : [
            [
                "eosbetcasino",
                65061
            ]
        ],
        "code_sequence" : 6,
        "abi_sequence" : 6
    },
    "act" : {
        "account" : "eosbetdice11",
        "name" : "resolvebet",
        "authorization" : [
            {
                "actor" : "eosbetcasino",
                "permission" : "random"
            }
        ],
        "data" : {
            "bet_id" : 64445,
            "sig" : "SIG_K1_KW2uhvjDgCA2pfiE3cKzTbV6dGraBrCttPyPhehtbDVjtCUvF36PugoEkcLFode9LHrHi41vRC9HCFjgomWWC3XqcS3nQR"
        },
        "hex_data" : "bdfb000000000000002009d4875dcda2218f9c50fc983e0743a86d43329212ffaea7c6d173d94c35ec422a80597ce8fb7b78f1eb906e1e6e17b38a57ba8b0ee533eef7bccf101923412c"
    },
    "elapsed" : 1263,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [
        [
            "eosbetdice11",
            697
        ]
    ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.409Z")
}
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d76"),
    "receipt" : {
        "receiver" : "eosio.token",
        "act_digest" : "85e56f86b524c3ec87bfa45d0fd6e8ca82c9006aa050b4c34d815e4d1f05e496",
        "global_sequence" : 291350310,
        "recv_sequence" : 4232459,
        "auth_sequence" : [
            [
                "eosbetdice11",
                491876
            ]
        ],
        "code_sequence" : 2,
        "abi_sequence" : 2
    },
    "act" : {
        "account" : "eosio.token",
        "name" : "transfer",
        "authorization" : [
            {
                "actor" : "eosbetdice11",
                "permission" : "active"
            }
        ],
        "data" : {
            "from" : "eosbetdice11",
            "to" : "xupengfeieos",
            "quantity" : "0.1036 EOS",
            "memo" : "Winner! Play: dice.eosbet.io"
        },
        "hex_data" : "1082422e6575305580a9726ab1a9aaee0c0400000000000004454f53000000001c57696e6e65722120506c61793a20646963652e656f736265742e696f"
    },
    "elapsed" : 275,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [ ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.409Z")
}
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d77"),
    "receipt" : {
        "receiver" : "eosbetdice11",
        "act_digest" : "85e56f86b524c3ec87bfa45d0fd6e8ca82c9006aa050b4c34d815e4d1f05e496",
        "global_sequence" : 291350311,
        "recv_sequence" : 314298,
        "auth_sequence" : [
            [
                "eosbetdice11",
                491877
            ]
        ],
        "code_sequence" : 2,
        "abi_sequence" : 2
    },
    "act" : {
        "account" : "eosio.token",
        "name" : "transfer",
        "authorization" : [
            {
                "actor" : "eosbetdice11",
                "permission" : "active"
            }
        ],
        "data" : {
            "from" : "eosbetdice11",
            "to" : "xupengfeieos",
            "quantity" : "0.1036 EOS",
            "memo" : "Winner! Play: dice.eosbet.io"
        },
        "hex_data" : "1082422e6575305580a9726ab1a9aaee0c0400000000000004454f53000000001c57696e6e65722120506c61793a20646963652e656f736265742e696f"
    },
    "elapsed" : 124,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [ ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.409Z")
}
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d78"),
    "receipt" : {
        "receiver" : "xupengfeieos",
        "act_digest" : "85e56f86b524c3ec87bfa45d0fd6e8ca82c9006aa050b4c34d815e4d1f05e496",
        "global_sequence" : 291350312,
        "recv_sequence" : 8330,
        "auth_sequence" : [
            [
                "eosbetdice11",
                491878
            ]
        ],
        "code_sequence" : 2,
        "abi_sequence" : 2
    },
    "act" : {
        "account" : "eosio.token",
        "name" : "transfer",
        "authorization" : [
            {
                "actor" : "eosbetdice11",
                "permission" : "active"
            }
        ],
        "data" : {
            "from" : "eosbetdice11",
            "to" : "xupengfeieos",
            "quantity" : "0.1036 EOS",
            "memo" : "Winner! Play: dice.eosbet.io"
        },
        "hex_data" : "1082422e6575305580a9726ab1a9aaee0c0400000000000004454f53000000001c57696e6e65722120506c61793a20646963652e656f736265742e696f"
    },
    "elapsed" : 6,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [ ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.409Z")
}
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d79"),
    "receipt" : {
        "receiver" : "betdividends",
        "act_digest" : "c21e7798297a5a2b44fe507b5a941d29321079c165ef931eb5b2f94d38562c5b",
        "global_sequence" : 291350313,
        "recv_sequence" : 43016,
        "auth_sequence" : [
            [
                "eosbetdice11",
                491879
            ]
        ],
        "code_sequence" : 4,
        "abi_sequence" : 4
    },
    "act" : {
        "account" : "betdividends",
        "name" : "transfer",
        "authorization" : [
            {
                "actor" : "eosbetdice11",
                "permission" : "active"
            }
        ],
        "data" : {
            "from" : "eosbetdice11",
            "to" : "xupengfeieos",
            "quantity" : "0.0200 BET",
            "memo" : "Enjoy airdrop! Play: dice.eosbet.io"
        },
        "hex_data" : "1082422e6575305580a9726ab1a9aaeec800000000000000044245540000000023456e6a6f792061697264726f702120506c61793a20646963652e656f736265742e696f"
    },
    "elapsed" : 272,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [ ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.409Z")
}
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d7a"),
    "receipt" : {
        "receiver" : "eosbetdice11",
        "act_digest" : "c21e7798297a5a2b44fe507b5a941d29321079c165ef931eb5b2f94d38562c5b",
        "global_sequence" : 291350314,
        "recv_sequence" : 314299,
        "auth_sequence" : [
            [
                "eosbetdice11",
                491880
            ]
        ],
        "code_sequence" : 4,
        "abi_sequence" : 4
    },
    "act" : {
        "account" : "betdividends",
        "name" : "transfer",
        "authorization" : [
            {
                "actor" : "eosbetdice11",
                "permission" : "active"
            }
        ],
        "data" : {
            "from" : "eosbetdice11",
            "to" : "xupengfeieos",
            "quantity" : "0.0200 BET",
            "memo" : "Enjoy airdrop! Play: dice.eosbet.io"
        },
        "hex_data" : "1082422e6575305580a9726ab1a9aaeec800000000000000044245540000000023456e6a6f792061697264726f702120506c61793a20646963652e656f736265742e696f"
    },
    "elapsed" : 28,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [ ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.409Z")
}
{
    "_id" : ObjectId("5b7ef5f8f9a2f323e8ce4d7b"),
    "receipt" : {
        "receiver" : "xupengfeieos",
        "act_digest" : "c21e7798297a5a2b44fe507b5a941d29321079c165ef931eb5b2f94d38562c5b",
        "global_sequence" : 291350315,
        "recv_sequence" : 8331,
        "auth_sequence" : [
            [
                "eosbetdice11",
                491881
            ]
        ],
        "code_sequence" : 4,
        "abi_sequence" : 4
    },
    "act" : {
        "account" : "betdividends",
        "name" : "transfer",
        "authorization" : [
            {
                "actor" : "eosbetdice11",
                "permission" : "active"
            }
        ],
        "data" : {
            "from" : "eosbetdice11",
            "to" : "xupengfeieos",
            "quantity" : "0.0200 BET",
            "memo" : "Enjoy airdrop! Play: dice.eosbet.io"
        },
        "hex_data" : "1082422e6575305580a9726ab1a9aaeec800000000000000044245540000000023456e6a6f792061697264726f702120506c61793a20646963652e656f736265742e696f"
    },
    "elapsed" : 3,
    "cpu_usage" : 0,
    "console" : "",
    "total_cpu_usage" : 0,
    "trx_id" : "c68b4890b464d6da418b6fb6b5d99ec7e27189c3c62ec9c4e68929ecb1ef6536",
    "block_num" : 12397949,
    "block_time" : "2018-08-22T04:59:29.000",
    "producer_block_id" : "00bd2d7dd7863593b5c5b86a36ed251a7cb5bb73b1d8ccbff367e6902bf62ddb",
    "account_ram_delta" : [ ],
    "trx_status" : "executed",
    "createdAt" : ISODate("2018-08-23T17:59:20.409Z")
}
Was this page helpful?
0 / 5 - 0 ratings