Pembangunan : Panduan - drihsanmy/Osmosis-Malaysia-Translation-Team GitHub Wiki

#Struktur Transaksi Setiap blok pada blockchain, termasuk yang berasaskan Cosmos seperti Osmosis, dibina daripada satu siri transaksi. Setiap transaksi, pada gilirannya, mempunyai struktur dalaman sendiri. Dokumen ini menerangkan struktur urus niaga tersebut. #

Mendapatkan semula blok

Anda boleh mendapatkan semula mana-mana satu blok daripada:

  1. menggunakan API RPC
  2. menggunakan API REST
  3. menjalankan nod penuh (menggunakan osmosisd)

Untuk contoh kami, kami gunakan osmosisd untuk mendapatkan satu blok:

osmosisd query block 2836990

Kod di atas akan mendapatkan semula blok 2836990. Hasilnya biasanya dalam json tanpa sebarang pemformatan, jadi kami menjalankannya jq untuk membersihkannya:

osmosisd query block 2836990 | jq '.'

Hasilnya ialah fail json yang besar. Untuk memastikan dokumen ini boleh dibaca, kami tidak akan mengeluarkan semula keseluruhannya di sini, hanya strukturnya. Keseluruhan fail tersedia di block-2836990.json .

Rangka utama adalah seperti berikut:

{
  "block_id": {
    "hash": "CC3F7B8C711393E0A6BF42F743C1E96A5E147C03CD2ACF50E15DF93515E4DCC5",
    "parts": {
      "total": 2,
      "hash": "EB26807B983730D1B87D821D4A7E8BFDC83E78CDB4E5B89DD5A28C78CAE1931E"
    }
  },
  "block": {
    "header": {
      "version": {
        "block": "11",
        "app": "1"
      },
      "chain_id": "osmosis-1",
      "height": "2836990",
      "time": "2022-01-17T17:14:01.589129908Z",
      "last_block_id": {
        "hash": "10419816E363D36492987AA2FBC1F09653DB026B2A6787F01B69C98EA54ADAEF",
        "parts": {
          "total": 3,
          "hash": "468EAE52F145F55319BD41B6A62629E2424CF53B91D7AE28BD7E2C07D9B2F7B3"
        }
      },
      "last_commit_hash": "D17D43C66F440B7B0FD23D085A195B839D022D8365B318B27484DACACC718F30",
      "data_hash": "4C5F9C3A26A245945D5F6C7BB3854C2A8E8A2A54C3459DA135E93C5A5F916D6F",
      "validators_hash": "6CE355CD08D5B5C775845B87F04C295E6F35FA6FD5353DA668482406B7360F45",
      "next_validators_hash": "DE379515F7B35ABB57E5FECA27EB485731058EE045F26DE8AB9C8555B3FFD83D",
      "consensus_hash": "A967D55FACBBA19AB96149048F2476C4657EC03D25B78A81AF5B8F0A08F61DFF",
      "app_hash": "7356565B67989D373662FC5553E97A206BB8A58385FF42698F1A411C698555F3",
      "last_results_hash": "DE3F62111363F655A6596B6DE8E1348FF46FE9A7859F695CCE59E4EA0F98253F",
      "evidence_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
      "proposer_address": "1B002B6EBEB8653C721301B1B56472B1B4DE7247"
    },
    "data": {
      "txs": [
        "Cp0CCpoCCiovb3Ntb3Npcy5nYW1tLnYxYmV0YTEuTXNnU3dhcEV4YWN0QW1vdW50SW4S6wEKK29zbW8xZTBkbXpkeGRtcnd5ZjQ2bmNtNXNxY2xrZGFuM21hcTVrNWp2ZHgSSQjcBBJEaWJjLzk4N0MxN0IxMUFCQzJCMjAwMTkxNzhBQ0U2MjkyOUZFOTg0MDIwMkNFNzk0OThFMjlGRThFNUNCMDJCN0MwQTQSSQjjBBJEaWJjLzI3Mzk0RkIwOTJEMkVDQ0Q1NjEyM0M3NEYzNkU0QzFGOTI2MDAxQ0VBREE5Q0E5N0VBNjIyQjI1RjQxRTVFQjISCQgBEgV1b3NtbxoRCgV1b3NtbxIIMTUwMDAwMDAiCDE1MDAwMDAwEmYKUgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQI3Vc8hzNbQdpBrbHj8hELzzBskwVqQrad15VgsFn1RtBIECgIIARi+9AMSEAoKCgV1b3NtbxIBMBCAiXoaQD9uPzOcom2NJGzrHEkgytg585ybULi93PnLNKMsECGCNH5gH46Cmiv504ULlyMsTfiyYInMGo39jYIahbDcDLk=",
        "Cp0CCpoCCiovb3Ntb3Npcy5nYW1tLnYxYmV0YTEuTXNnU3dhcEV4YWN0QW1vdW50SW4S6wEKK29zbW8xbDR1NTZsN2N2eDhuMG42Yzd3NjUwazAydno2N3F1ZGpsY3V0ODkSSQjcBBJEaWJjLzk4N0MxN0IxMUFCQzJCMjAwMTkxNzhBQ0U2MjkyOUZFOTg0MDIwMkNFNzk0OThFMjlGRThFNUNCMDJCN0MwQTQSSQjjBBJEaWJjLzI3Mzk0RkIwOTJEMkVDQ0Q1NjEyM0M3NEYzNkU0QzFGOTI2MDAxQ0VBREE5Q0E5N0VBNjIyQjI1RjQxRTVFQjISCQgBEgV1b3NtbxoRCgV1b3NtbxIIMTUwMDAwMDAiCDE1MDAwMDAwEmYKUgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQK1cR2MtFWdtiyO/qORycJYvhuEqF1W9howno2FFP/11xIECgIIARjM8wMSEAoKCgV1b3NtbxIBMBCAiXoaQHCrHmPW89D7BdROgVeDs0Uz4jz95MW/abhLOrsOT/fdS6UQ+Qvzj+htQe7TtKYGRfuK9UsyjcV6gIN7I8K0fbQ=",
        "CpsCCpgCCiovb3Ntb3Npcy5nYW1tLnYxYmV0YTEuTXNnU3dhcEV4YWN0QW1vdW50SW4S6QEKK29zbW8xZTBkbXpkeGRtcnd5ZjQ2bmNtNXNxY2xrZGFuM21hcTVrNWp2ZHgSSQjcBBJEaWJjLzk4N0MxN0IxMUFCQzJCMjAwMTkxNzhBQ0U2MjkyOUZFOTg0MDIwMkNFNzk0OThFMjlGRThFNUNCMDJCN0MwQTQSSQjjBBJEaWJjLzI3Mzk0RkIwOTJEMkVDQ0Q1NjEyM0M3NEYzNkU0QzFGOTI2MDAxQ0VBREE5Q0E5N0VBNjIyQjI1RjQxRTVFQjISCQgBEgV1b3NtbxoQCgV1b3NtbxIHMTUwMDAwMCIHMTUwMDAwMBJmClIKRgofL2Nvc21vcy5jcnlwdG8uc2VjcDI1NmsxLlB1YktleRIjCiECN1XPIczW0HaQa2x4/IRC88wbJMFakK2ndeVYLBZ9UbQSBAoCCAEYv/QDEhAKCgoFdW9zbW8SATAQgIl6GkD7MtpJPRKqLCvv6b+1LXPjwq+tx/dk5qZDh9AIFbGdDDTptSLBuId7tzXeIqf9hXt6UqOzxbU/OrMAJ/LvOnEY",
        "Cu8DCuwDCiovb3Ntb3Npcy5nYW1tLnYxYmV0YTEuTXNnU3dhcEV4YWN0QW1vdW50SW4SvQMKK29zbW8xMDI2anQycjl5ZnhtbmMzcm12cDBoZ2VlOWd3a215azl1M2t0aHESSQjQAxJEaWJjLzFEQzQ5NUZDRUZEQTA2OEEzODIwRjkwM0VEQkQ3OEI5NDJGQkQyMDREN0U5M0QzQkEyQjQzMkU5NjY5RDFBNTkSSQjNAxJEaWJjLzU5NzNDMDY4NTY4MzY1RkZGNDBERURDRjFBMUNCNzU4MkI2MTE2QjczMUNEMzFBMTIyMzFBRTI1RTIwQjg3MUYSCgjhAxIFdW9zbW8SSAgHEkRpYmMvN0M0RDYwQUE5NUU1QTc1NThCMEEzNjQ4NjA5NzlDQTM0QjdGRjhBQUYyNTVCODdBRjlFODc5Mzc0NDcwQ0VDMBJICAgSRGliYy8yNzM5NEZCMDkyRDJFQ0NENTYxMjNDNzRGMzZFNEMxRjkyNjAwMUNFQURBOUNBOTdFQTYyMkIyNUY0MUU1RUIyGk8KRGliYy8yNzM5NEZCMDkyRDJFQ0NENTYxMjNDNzRGMzZFNEMxRjkyNjAwMUNFQURBOUNBOTdFQTYyMkIyNUY0MUU1RUIyEgcxMDAwMDAwIgcxMDAwMDAwEloKUgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQNutTEMkmT7rngHNX19j0uA2419X1nPhqlDkZ/cqAk2exIECgIIARjMig8SBBCAiXoaQIoIWm3CI9esFCLaeQF9Aj6bEjgm1WItBdDnHeye5DJgEBBbaoc8iQQ3oC1pCX+BtxZVP8NpTLCeW6O/pW84jds=",
        ...
        ...

        "CqQDCqEDCiovb3Ntb3Npcy5nYW1tLnYxYmV0YTEuTXNnU3dhcEV4YWN0QW1vdW50SW4S8gIKK29zbW8xNng5cmhqeTZ0ZjJkNDJ2MzRucXBna3B1d2tzY2d2dG0yYTBndDISSAgKEkRpYmMvRTY5MzFGNzgwNTdGN0NDNURBMEZENkNFRjgyRkYzOTM3M0E2RTA0NTJCRjFGRDc2OTEwQjkzMjkyQ0YzNTZDMRIJCAkSBXVvc21vEkkI3AQSRGliYy85ODdDMTdCMTFBQkMyQjIwMDE5MTc4QUNFNjI5MjlGRTk4NDAyMDJDRTc5NDk4RTI5RkU4RTVDQjAyQjdDMEE0EkkI4wQSRGliYy8yNzM5NEZCMDkyRDJFQ0NENTYxMjNDNzRGMzZFNEMxRjkyNjAwMUNFQURBOUNBOTdFQTYyMkIyNUY0MUU1RUIyGk8KRGliYy8yNzM5NEZCMDkyRDJFQ0NENTYxMjNDNzRGMzZFNEMxRjkyNjAwMUNFQURBOUNBOTdFQTYyMkIyNUY0MUU1RUIyEgc0MDg5MzU0Igc0MDg5MzU0EloKUgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQMQpu8Flaqd04iiBIBzIIqj4QDB8Lvgf8aMsLlQeX33nBIECgIIARjV5AsSBBCAiXoaQBFa9dKWBzls4GjqeEukgDTNZ9UYoXEa7vLfD5dzJ+HHFkZKGLsTP9brRdSOlMuq0iF9EGvMnoInd7leRYMQEl0="
      ]
    },
    "evidence": {
      "evidence": null
    },
    "last_commit": {
      "height": "2836989",
      "round": 0,
      "block_id": {
        "hash": "10419816E363D36492987AA2FBC1F09653DB026B2A6787F01B69C98EA54ADAEF",
        "parts": {
          "total": 3,
          "hash": "468EAE52F145F55319BD41B6A62629E2424CF53B91D7AE28BD7E2C07D9B2F7B3"
        }
      },
      "signatures": [
        {
          "block_id_flag": 2,
          "validator_address": "CB5A63B91E8F4EE8DB935942CBE25724636479E0",
          "timestamp": "2022-01-17T17:14:01.597493021Z",
          "signature": "/HG0b07XVaIDfBScZyT1tQ4iWvIvvvOeFAD58VvF46QMDh7F9ytxXlviso60bPmvrN/RXblgRB5G7XVEH0s9Cg=="
        },
        {
          "block_id_flag": 2,
          "validator_address": "16A169951A878247DBE258FDDC71638F6606D156",
          "timestamp": "2022-01-17T17:14:01.679151429Z",
          "signature": "cOh/DCVUfRMjhz5uEjmPUvr6YzM0rrjBSPYrcCIYExB+R2B/PmoctvE3HrYsXTTvPQOKEEGNpYf2Z9TaanyPDQ=="
        },
        ...
        {
          "block_id_flag": 2,
          "validator_address": "A677203440E86562D6DD475D0C2CA555EC01F803",
          "timestamp": "2022-01-17T17:14:01.620734893Z",
          "signature": "zONA/uGCfiOaRpHTMkMCtsnwUqmo1NnjRdQketHTZq6iCNbiGM5lI4QmPZtyg3bmk0GMNZ1kW06p1jrdAojkCQ=="
        }
      ]
    }
  }
}

Oleh kerana tujuan dokumen ini adalah untuk menerangkan struktur urus niaga dan bukannya struktur blok, kami tidak akan menghabiskan terlalu banyak masa pada struktur blok.

Secara ringkas:

  • block_id: mengandungi cincangan blok
  • block : data blok itu sendiri
  • block.header: maklumat penting tentang blok, terutamanya: * block.header.chain_id * block.header.height * block.header.last_block_id
  • block.data.txs: urus niaga yang akan kami fokuskan
  • block.last_commit: maklumat tentang komit terakhir sebelum yang ini

Urus niaga itu sendiri ada di dalam block.data.txs. Ini adalah tata-susunan. setiap entri merupakan transaksi individu.

Blok yang telah kami pilih, 2836990, mengandungi 64 transaksi:

$ osmosisd query block 2836990 | jq -r '.block.data.txs | length'
64

Setiap transaksi adalah data berkod base64. Sebagai contoh, dua yang pertama ialah:

"Cp0CCpoCCiovb3Ntb3Npcy5nYW1tLnYxYmV0YTEuTXNnU3dhcEV4YWN0QW1vdW50SW4S6wEKK29zbW8xZTBkbXpkeGRtcnd5ZjQ2bmNtNXNxY2xrZGFuM21hcTVrNWp2ZHgSSQjcBBJEaWJjLzk4N0MxN0IxMUFCQzJCMjAwMTkxNzhBQ0U2MjkyOUZFOTg0MDIwMkNFNzk0OThFMjlGRThFNUNCMDJCN0MwQTQSSQjjBBJEaWJjLzI3Mzk0RkIwOTJEMkVDQ0Q1NjEyM0M3NEYzNkU0QzFGOTI2MDAxQ0VBREE5Q0E5N0VBNjIyQjI1RjQxRTVFQjISCQgBEgV1b3NtbxoRCgV1b3NtbxIIMTUwMDAwMDAiCDE1MDAwMDAwEmYKUgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQI3Vc8hzNbQdpBrbHj8hELzzBskwVqQrad15VgsFn1RtBIECgIIARi+9AMSEAoKCgV1b3NtbxIBMBCAiXoaQD9uPzOcom2NJGzrHEkgytg585ybULi93PnLNKMsECGCNH5gH46Cmiv504ULlyMsTfiyYInMGo39jYIahbDcDLk=",
"Cp0CCpoCCiovb3Ntb3Npcy5nYW1tLnYxYmV0YTEuTXNnU3dhcEV4YWN0QW1vdW50SW4S6wEKK29zbW8xbDR1NTZsN2N2eDhuMG42Yzd3NjUwazAydno2N3F1ZGpsY3V0ODkSSQjcBBJEaWJjLzk4N0MxN0IxMUFCQzJCMjAwMTkxNzhBQ0U2MjkyOUZFOTg0MDIwMkNFNzk0OThFMjlGRThFNUNCMDJCN0MwQTQSSQjjBBJEaWJjLzI3Mzk0RkIwOTJEMkVDQ0Q1NjEyM0M3NEYzNkU0QzFGOTI2MDAxQ0VBREE5Q0E5N0VBNjIyQjI1RjQxRTVFQjISCQgBEgV1b3NtbxoRCgV1b3NtbxIIMTUwMDAwMDAiCDE1MDAwMDAwEmYKUgpGCh8vY29zbW9zLmNyeXB0by5zZWNwMjU2azEuUHViS2V5EiMKIQK1cR2MtFWdtiyO/qORycJYvhuEqF1W9howno2FFP/11xIECgIIARjM8wMSEAoKCgV1b3NtbxIBMBCAiXoaQHCrHmPW89D7BdROgVeDs0Uz4jz95MW/abhLOrsOT/fdS6UQ+Qvzj+htQe7TtKYGRfuK9UsyjcV6gIN7I8K0fbQ=",

Kita boleh menyahkod ini dengan menghantarnya melalui penyahkod base64. Argumen yang betul bergantung pada platform anda, tetapi secara amnya adalah dalam bentuk base64 -D . Kami tidak mengesyorkan hanya menghantarnya ke terminal, kerana ini adalah data berkod binari, khususnya protobuf.

osmosisd query block 2836990 | jq '.block.data.txs[0]' | base64 -D > outfile

Fail outfile mengandungi data protobuf mentah. Data Protobuf tidak mengandungi struktur sendiri. Ia memerlukan .protofail untuk memahami dan mentafsir medan, termasuk menukarnya kepada format json yang boleh dibaca.

Nasib baik, osmosisd menyediakan beberapa alat asas untuk menyoal transaksi individu. Walau bagaimanapun, ia tidak membenarkan anda mendapatkan semula sebarang transaksi sewenang-wenangnya. Ini kerana, anda mesti lulus "peristiwa" itu:

osmosisd query txs --events '<type>.<key>=<value>' [--height <height>]

Jika anda sudah mengetahui peristiwa tersebut, anda boleh mendapatkan semula transaksi individu. Nasib baik, jika anda berurusan dengan blok individu, anda boleh mendapatkan urus niaga dan menggunakan osmosisd untuk menyahkod protobuf untuk anda, dengan menjadikan acara itu sebagai ketinggian blok:

osmosisd query txs --height 2836990 --events 'tx.height=2836990' -o json

Hasilnya harus sepadan dengan bilangan transaksi yang kami ada dalam blok:

{
  "total_count": "64",
  "count": "30",
  "page_number": "1",
  "page_total": "3",
  "limit": "30",
  "txs": [
      ...

total_count nya adalah 64, seperti yang kita jangkakan. 'osmosisd query txs` adalah dinomborkan, jadi ia hanya akan mengembalikan 30 jawapan pertama daripada 64, dengan ini adalah halaman 1.

Dengan melepaskan jumlah transaksi untuk mendapatkan semula data, kita boleh mengelakkan penomboran:

osmosisd query txs --height 2836990 --events 'tx.height=2836990' -o json --limit 64

Untuk kemudahan, kami akan menggunakan jq1 untuk pemformatan dan menyimpan hasilnya ke fail:

osmosisd query txs --height 2836990 --events 'tx.height=2836990' -o json --limit 64 | jq '.' > outfile.json

Keseluruhan transaksi blok tersedia di txs-block-2836990.json .

Kami kini mempunyai keupayaan untuk melihat transaksi:

# to see all transactions
cat outfile.json | jq '.txs'
# to see an individual transaction
cat outfile.json | jq '.txs[1]'

Di bawah adalah sebahagian daripada transaksi di indeks 1 blok di atas.

{
  "height": "2836990",
  "txhash": "5BBC27779EA33FC99C319D74CFE730DC2A3102277D75410E75F2F9F5ED259BFE",
  "codespace": "",
  "code": 0,
  "data": "0A2C0A2A2F6F736D6F7369732E67616D6D2E763162657461312E4D7367537761704578616374416D6F756E74496E",
  "raw_log": "<raw data>",
  "logs": [
    {
      "msg_index": 0,
      "log": "",
      "events": [
        {
          "type": "coin_received",
          "attributes": [
            {
              "key": "receiver",
              "value": "osmo1thscstwxp87g0ygh7le3h92f9ff4sel9y9d2eysa25p43yf43rysk7jp93"
            },
            {
              "key": "amount",
              "value": "15000000uosmo"
            },
            {
              "key": "receiver",
              "value": "osmo1l4u56l7cvx8n0n6c7w650k02vz67qudjlcut89"
            },
            {
              "key": "amount",
              "value": "289236271ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4"
            },
            ...
          ]
        },
        {
          "type": "coin_spent",
          "attributes": [
            {
              "key": "spender",
              "value": "osmo1l4u56l7cvx8n0n6c7w650k02vz67qudjlcut89"
            },
            {
              "key": "amount",
              "value": "15000000uosmo"
            },
            {
              "key": "spender",
              "value": "osmo1thscstwxp87g0ygh7le3h92f9ff4sel9y9d2eysa25p43yf43rysk7jp93"
            },
            {
              "key": "amount",
              "value": "289236271ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4"
            },
            ...
          ]
        },
        {
          "type": "message",
          "attributes": [
            {
              "key": "action",
              "value": "/osmosis.gamm.v1beta1.MsgSwapExactAmountIn"
            },
            {
              "key": "sender",
              "value": "osmo1l4u56l7cvx8n0n6c7w650k02vz67qudjlcut89"
            },
            {
              "key": "sender",
              "value": "osmo1thscstwxp87g0ygh7le3h92f9ff4sel9y9d2eysa25p43yf43rysk7jp93"
            },
            ...
          ]
        },
        {
          "type": "token_swapped",
          "attributes": [
            {
              "key": "module",
              "value": "gamm"
            },
            {
              "key": "sender",
              "value": "osmo1l4u56l7cvx8n0n6c7w650k02vz67qudjlcut89"
            },
            {
              "key": "pool_id",
              "value": "604"
            },
            {
              "key": "tokens_in",
              "value": "15000000uosmo"
            },
            {
              "key": "tokens_out",
              "value": "289236271ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4"
            },
            {
              "key": "module",
              "value": "gamm"
            },
            {
              "key": "sender",
              "value": "osmo1l4u56l7cvx8n0n6c7w650k02vz67qudjlcut89"
            },
            {
              "key": "pool_id",
              "value": "611"
            },
            {
              "key": "tokens_in",
              "value": "289236271ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4"
            },
            {
              "key": "tokens_out",
              "value": "3802225ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2"
            },
            ...
          ]
        },
        {
          "type": "transfer",
          "attributes": [
            {
              "key": "recipient",
              "value": "osmo1thscstwxp87g0ygh7le3h92f9ff4sel9y9d2eysa25p43yf43rysk7jp93"
            },
            {
              "key": "sender",
              "value": "osmo1l4u56l7cvx8n0n6c7w650k02vz67qudjlcut89"
            },
            {
              "key": "amount",
              "value": "15000000uosmo"
            },
            {
              "key": "recipient",
              "value": "osmo1l4u56l7cvx8n0n6c7w650k02vz67qudjlcut89"
            },
            {
              "key": "sender",
              "value": "osmo1thscstwxp87g0ygh7le3h92f9ff4sel9y9d2eysa25p43yf43rysk7jp93"
            },
            {
              "key": "amount",
              "value": "289236271ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4"
            },
            ...
          ]
        }
      ]
    }
  ],
  "info": "",
  "gas_wanted": "2000000",
  "gas_used": "183726",
  "tx": {
    "@type": "/cosmos.tx.v1beta1.Tx",
    "body": {
      "messages": [
        {
          "@type": "/osmosis.gamm.v1beta1.MsgSwapExactAmountIn",
          "sender": "osmo1l4u56l7cvx8n0n6c7w650k02vz67qudjlcut89",
          "routes": [
            {
              "poolId": "604",
              "tokenOutDenom": "ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4"
            },
            {
              "poolId": "611",
              "tokenOutDenom": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2"
            },
            {
              "poolId": "1",
              "tokenOutDenom": "uosmo"
            }
          ],
          "tokenIn": {
            "denom": "uosmo",
            "amount": "15000000"
          },
          "tokenOutMinAmount": "15000000"
        }
      ],
      "memo": "",
      "timeout_height": "0",
      "extension_options": [],
      "non_critical_extension_options": []
    },
    "auth_info": {
      "signer_infos": [
        {
          "public_key": {
            "@type": "/cosmos.crypto.secp256k1.PubKey",
            "key": "ArVxHYy0VZ22LI7+o5HJwli+G4SoXVb2GjCejYUU//XX"
          },
          "mode_info": {
            "single": {
              "mode": "SIGN_MODE_DIRECT"
            }
          },
          "sequence": "63948"
        }
      ],
      "fee": {
        "amount": [
          {
            "denom": "uosmo",
            "amount": "0"
          }
        ],
        "gas_limit": "2000000",
        "payer": "",
        "granter": ""
      }
    },
    "signatures": [
      "cKseY9bz0PsF1E6BV4OzRTPiPP3kxb9puEs6uw5P991LpRD5C/OP6G1B7tO0pgZF+4r1SzKNxXqAg3sjwrR9tA=="
    ]
  },
  "timestamp": "2022-01-17T17:14:01Z"
}

Setiap transaksi mempunyai struktur yang sama. Perbezaannya adalah dalam butiran di dalam setiap struktur:

{
  "height": "2836990",
  "txhash": "5BBC27779EA33FC99C319D74CFE730DC2A3102277D75410E75F2F9F5ED259BFE",
  "codespace": "",
  "code": 0,
  "data": "0A2C0A2A2F6F736D6F7369732E67616D6D2E763162657461312E4D7367537761704578616374416D6F756E74496E",
  "raw_log": "<raw data>",
  "logs": [
    {
      "msg_index": 0,
      "log": "",
      "events": [
        { ... },
        { ... },
        ...
      ]
    }
  ],
  "info": "",
  "gas_wanted": "2000000",
  "gas_used": "183726",
  "tx": {
    "@type": "/cosmos.tx.v1beta1.Tx",
    "body": {
      "messages": [
        {
          "@type": "/osmosis.gamm.v1beta1.MsgSwapExactAmountIn",
          "sender": "osmo1l4u56l7cvx8n0n6c7w650k02vz67qudjlcut89",
          "routes": [
            {
              "poolId": "604",
              "tokenOutDenom": "ibc/987C17B11ABC2B20019178ACE62929FE9840202CE79498E29FE8E5CB02B7C0A4"
            },
            {
              "poolId": "611",
              "tokenOutDenom": "ibc/27394FB092D2ECCD56123C74F36E4C1F926001CEADA9CA97EA622B25F41E5EB2"
            },
            {
              "poolId": "1",
              "tokenOutDenom": "uosmo"
            }
          ],
          "tokenIn": {
            "denom": "uosmo",
            "amount": "15000000"
          },
          "tokenOutMinAmount": "15000000"
        }
      ],
      "memo": "",
      "timeout_height": "0",
      "extension_options": [],
      "non_critical_extension_options": []
    },
    "auth_info": {
      "signer_infos": [
        {
          "public_key": {
            "@type": "/cosmos.crypto.secp256k1.PubKey",
            "key": "ArVxHYy0VZ22LI7+o5HJwli+G4SoXVb2GjCejYUU//XX"
          },
          "mode_info": {
            "single": {
              "mode": "SIGN_MODE_DIRECT"
            }
          },
          "sequence": "63948"
        }
      ],
      "fee": {
        "amount": [
          {
            "denom": "uosmo",
            "amount": "0"
          }
        ],
        "gas_limit": "2000000",
        "payer": "",
        "granter": ""
      }
    },
    "signatures": []
  },
  "timestamp": "2022-01-17T17:14:01Z"
}

Setiap urus niaga distrukturkan daripada elemen utama berikut. Huraian terperinci adalah seperti berikut:

  • height: ketinggian blok di mana transaksi disertakan
  • txhash: hash urus niaga, jelasnya tidak termasuk yang txhash sendiri
  • raw_log: data mentah mesej; dimampatkan, format asal bagi semua kandungan .logs
  • logs : tatasusunan mesej log individu yang membentuk kandungan transaksi; butiran di bawah
  • gas_wanted: berapa banyak gas yang dibenarkan oleh pengirim transaksi
  • gas_used: berapa banyak gas sebenarnya telah digunakan
  • tx: transaksi asal yang dihantar, daripada pengirim; ini akan mencetuskan pelbagai mesej yang terdiri daripada transaksi; akan diterangkan secara terperinci di bawah
  • timestamp: cap masa transaksi asal

Mari kita terokai lebih lanjut. Di samping itu, untuk contoh praktikal, kami akan memaut kepada analisis individu bagi beberapa transaksi.

#

tx

Medan tx mengandungi urus niaga asal yang dihantar ke rantaian blok dan akan mencetuskan mesej selebihnya. 'tx' boleh jadi sesuatu yang mudah - pindahkan 10osmo daripada akaun A ke akaun B - atau sesuatu yang lebih kompleks, seperti menukar token melalui kolam kecairan atau ikatan. Apabila anda menggunakan Aplikasi webOsmosis atau osmosisd untuk menghantar transaksi, ia mengarang dan menghantar mesej tunggal dalam medan tx .

"@type": "/cosmos.tx.v1beta1.Tx",
"body": {
  "messages": [
    {
      "@type": "<transaction type>",
      "sender": "<sender account>",
      ...
      // fields that are unique to the transaction type
    }
  ],
  "memo": "",
  "timeout_height": "0",
  "extension_options": [],
  "non_critical_extension_options": []
},
"auth_info": {
  "signer_infos": [
    {
      "public_key": {
        "@type": "/cosmos.crypto.secp256k1.PubKey",
        "key": "ArVxHYy0VZ22LI7+o5HJwli+G4SoXVb2GjCejYUU//XX"
      },
      "mode_info": {
        "single": {
          "mode": "SIGN_MODE_DIRECT"
        }
      },
      "sequence": "63948"
    }
  ],
  "fee": {
    "amount": [
      {
        "denom": "uosmo",
        "amount": "0"
      }
    ],
    "gas_limit": "2000000",
    "payer": "",
    "granter": ""
  }
},
"signatures": []

Sila lihat:

@type: jenis transaksi asas. Dalam blok kami, setiap satu daripada urus niaga mempunyai jenis asas yang sama, /cosmos.tx.v1beta1.Tx. Ini ditakrifkan oleh SDK Cosmos. body: badan teras urus niaga. auth_info: siapa yang menandatangani mesej ini apabila ia dihantar ke rantai?

penandatangan

Medan auth_info mengandungi penandatangan. Ini biasanya akan ditandatangani oleh kunci awam Cosmos yang ditandakan oleh auth_info.signer_infos[0].public_key.@type, manakala medan .key akan memberikan kunci awam.

Kunci awam ini harus sepadan dengan penghantar mesej dalam body, dan disemak oleh rantaian semasa penyerahan.

badan

body mengandungi transaksi asal. Ia mengandungi satu atau lebih messages, yang kesemuanya mesti berjaya untuk urus niaga berjaya, contohnya, proses transaksi. Kebanyakan urus niaga mungkin mempunyai satu mesej, tetapi lebih banyak boleh wujud.

Medan mesej sentiasa mengandungi sekurang-kurangnya dua medan:

@type: jenis khusus mesej dalam aplikasi, contohnya,/osmosis.gamm.v1beta1.MsgSwapEactAmountIn sender: penghantar mesej Selebihnya medan adalah khusus untuk mesej @type . Sebaik sahaja anda mengetahui jenis mesej, anda boleh melihat dalam kod sumber untuk definisi protobuf bagi jenis mesej.

Setiap pelaksanaan aplikasi Cosmos SDK akan mempunyai modulnya sendiri dan oleh itu jenis mesejnya sendiri, sebagai tambahan kepada yang asas yang diwarisi daripada SDK Cosmos.

Logs

Mewakili pelbagai mesej yang dikeluarkan logs yang menerangkan komponen dalaman pemenuhan transaksi yang diminta.

Boleh ada 0, 1 atau berbilang entri dalam medan logs.

Setiap mesej dalam logs hanya mempunyai 3 sifat:

msg_index: kenaikan daripada 0 untuk mesej dalam transaksi; jika terdapat berbilang mesej, setiap satu akan mempunyai kenaikan msg_index, walaupun indeks ke-0 adalah pilihan. log: selalunya kosong events: peristiwa yang dipancarkan oleh aplikasi Setiap entri dalam events hanya mempunyai dua sifat:

type: jenis acara, yang mempunyai makna semata-mata kepada aplikasi attributes: susunan struktur nilai kunci

type adalah rentetan mudah, yang mempunyai makna hanya dalam konteks aplikasi, sebagai contoh:

"type": "coin_received",

attributes adalah susunan struktur nilai kunci, dengan hanya dua kunci: key dan value. Sebagai contoh:

{
  "key": "receiver",
  "value": "osmo1thscstwxp87g0ygh7le3h92f9ff4sel9y9d2eysa25p43yf43rysk7jp93"
},

Memandangkan atribut ialah tatasusunan objek dengan dua sifat - key dan value- aplikasi boleh menggunakan beberapa daripadanya secara bersiri untuk melengkapkan mesej. Semak urus niaga yang dianalisis di bawah untuk pemahaman yang lebih baik.

Contoh transaksi:

Arbitraj SwapIn

⚠️ **GitHub.com Fallback** ⚠️