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:
- menggunakan API RPC
- menggunakan API REST
- 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 yangtxhash
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: