πŸŽ“ Golos JS - Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ с нСсколькими опСрациями соблюдая TaPoS, вычислСниС ref_block_prefix Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Π±Π΅Π· NodeJS, сСрвСра ΠΈ модуля Buffer


НСдавно я ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» Ρ„ΠΎΡ€ΠΌΡƒ постинга golos.cf/md ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² Π½Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π±Π΅Π½Π΅Ρ„ΠΈΡ†ΠΈΠ°Ρ€ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ comment_options

Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ golos-js Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΎΠ΄ΠΈΠ½ для размСщСния самого поста golos.broadcast.comment(), Π²Ρ‚ΠΎΡ€ΠΎΠΉ для настройки ΠΎΠΏΡ†ΠΈΠΉ поста, Π² Ρ‚.Ρ‡. Π±Π΅Π½Π΅Ρ„ΠΈΡ†ΠΈΠ°Ρ€ΠΎΠ² golos.broadcast.commentOptions()

Π’Π°ΠΊΠΎΠ΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ряд минусов: Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ… - Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ… - Ссли послС размСщСния поста Ρ‡Π΅ΠΉ-Ρ‚ΠΎ Π±ΠΎΡ‚ проголосуСт Π·Π° пост ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π΅Ρ‚ΠΈΡ‚ вторая транзакция с опциями поста - ΠΎΠΏΡ†ΠΈΠΈ ΠΏΠΎ-просту Π½Π΅ примутся ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ с постом ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ взаимодСйствия.
ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ - это ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² ΠΎΠ΄Π½Ρƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ. Π― ΡƒΠΆΠ΅ описывал ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π½Π΅Π΅: πŸŽ“ Π­ΠΊΠΎΠ½ΠΎΠΌΠΈΠΌ рСсурсы совмСщая 100 ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² ΠΎΠ΄Π½Ρƒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ , Π½ΠΎ описанный скрипт Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² nodeJS
А Ρ„ΠΎΡ€ΠΌΠ° golos.cf/md ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ простого копирования html ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ локально Π½Π° вашСм устройствС, стало Π±Ρ‹Ρ‚ΡŒ nodejs Ρ‚Π°ΠΌ Π½Π΅Ρ‚ ΠΈ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ JavaScript

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с вычислСниСм ref_block_num ΠΈ ref_block_prefix - это Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Π° голосС. КаТдая транзакция Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π±Π»ΠΎΠΊ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ†Π΅ΠΏΠΈ.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ Ρ‚ΡƒΡ‚: Transactions as Proof of Stake - TaPoS

Π’ TaPoS всС Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя Ρ…Π΅Ρˆ послСднСго Π±Π»ΠΎΠΊΠ° ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Ссли этот Π±Π»ΠΎΠΊ отсутствуСт Π² истории Ρ†Π΅ΠΏΠΈ

Но Π½Π° самом Π΄Π΅Π»Π΅, привязка ΠΊ послСднСму (ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ) Π±Π»ΠΎΠΊΡƒ Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ бСзопасна, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ссли транзакция ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΡ€ΠΊ cΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ.
ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° ΠΊ послСднСму нСизмСняСмому Π±Π»ΠΎΠΊΡƒ last_irreversible_block_num Ρ‚ΠΎΠΆΠ΅ Π²Π»Π΅Ρ‡Π΅Ρ‚ ряд уязвимостСй для свСТСй Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½Ρƒ ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ° Π½Π° Ρ‚Π°ΠΊΠΎΠ΅ количСство Π±Π»ΠΎΠΊΠΎΠ² Π½Π°Π·Π°Π΄ каТСтся ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ golos-js ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ -3 Π±Π»ΠΎΠΊΠ° ΠΎΡ‚ послСднСго head_block_number Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ steem-js ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ last_irreversible_block_num-1 Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ° ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π° 20 Π±Π»ΠΎΠΊΠΎΠ² старСС.
МнС большС нравится ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ golos, ΠΎΠ΄Π½Π°ΠΊΠΎ я Π±ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ самого Π½Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ ΠΈ прСдставлСния тСорСтичСскиС.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… (Π½ΠΎΠΌΠ΅Ρ€ ΠΈ Ρ…Π΅Ρˆ Π±Π»ΠΎΠΊΠ°)

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ запросом Π±ΡƒΠ΄Π΅Ρ‚ golos.api.getDynamicGlobalProperties

Π’ ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π½ΠΎΠΌΠ΅Ρ€ послСднСго Π±Π»ΠΎΠΊΠ° head_block_number (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ ΠΎΡ‚Π½ΠΈΠΌΠ΅ΠΌ ΠΎΡ‚ Π½Π΅Π³ΠΎ Π΅Ρ‰Π΅ - 2 Π±Π»ΠΎΠΊΠ°)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚Π°:

head_block_number: 15523551

Π”Π°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ…Π΅Ρˆ Π±Π»ΠΎΠΊΠ° 15523551 - 3 = 15523548 для вычислСния ref_block_prefix Π½ΠΎ запрос ΠΌΡ‹ сдСлаСм Π½Π΅ минус - 3 ΠΎΡ‚ послСднСго Π±Π»ΠΎΠΊΠ°, Π° минус 2 ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊ 15523549

Запрос golos.api.getBlockHeader(15523549)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚Π°:

previous: '00ecdedcfd8699a358c4595f0233db938d6d5705'

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° previous (ΠΏΠ΅Ρ€. ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ) - это Ρ…Π΅Ρˆ Π±Π»ΠΎΠΊΠ° 15523548, ΠΎΠ½ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π΅ΡΡ‚ΡŒ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС head_block_number минус 3.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΈ Ρ…Π΅Ρˆ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°, высота ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ минус 3 ΠΎΡ‚ послСднСго.

Π‘Π»ΠΎΠΊ 15523548

Π₯Сш 00ecdedcfd8699a358c4595f0233db938d6d5705

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠ· этих Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ - ref_block_num ΠΈ ref_block_prefix

ref_block_num получаСтся ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ Π² ΠΎΠ±ΠΎΠΈΡ… случаях, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π² nodeJS ΠΈ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅:

var refblocknum = 15523548 & 0xFFFF;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ пСрСмСнная refblocknum Ρ€Π°Π²Π½Π° 57052, ΠΏΡ€ΠΈ построСнии Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ помСстим этот Π½ΠΎΠΌΠ΅Ρ€ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ref_block_num

Π‘ ref_block_prefix Π±Ρ‹Π»ΠΎ всС нСсколько слоТнСС, ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒΡΡ - я Π΄ΠΎΠ»Π³ΠΎΠ΅ врСмя Π½Π΅ Π·Π½Π°Π» ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π±Π΅Π· модуля Buffer Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Π½ΠΎ оказалось всС ΠΎΡ‡Π΅Π½ΡŒ просто. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для nodeJS ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² golos-js Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΈ просто ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Как Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ref_block_num & ref_block_prefix Π² NodeJS + ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Buffer

const BlockPrefix = new Buffer('00ecdedcfd8699a358c4595f0233db938d6d5705', 'hex').readUInt32LE(4);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ BlockPrefix число 2744747773 Π΅Π³ΠΎ ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ref_block_prefix

Π’Π΅ΠΏΠ΅Ρ€ΡŒ транзакция содСрТит эти Π²Π°ΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

"ref_block_num":57052,
"ref_block_prefix":2744747773

Как Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ref_block_num & ref_block_prefix Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ простым JS

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Buffer Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² NodeJS ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ JS Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ выполняСт этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.

Π’ nodeJS функция new Buffer('00ecdedcfd8699a358c4595f0233db938d6d5705', 'hex') Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ ΠΎΡ‚Π²Π΅Ρ‚ Π²ΠΈΠ΄Π°:

<Buffer 00 ec de dc fd 86 99 a3 58 c4 59 5f 02 33 db 93 8d 6d 57 05>

А .readUInt32LE(4) Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ ΠΈΠ· этого массива ΠΈ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Ρ‚ ΠΈΡ… Π² Π½ΡƒΠΆΠ½ΠΎΠ΅ число.

Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ это простым JS ΡƒΠ΄Π°Π»ΠΎΡΡŒ Ρ‚Π°ΠΊ:

var blockid = '00ecdedcfd8699a358c4595f0233db938d6d5705';
            n = [];
            for (var i = 0; i < blockid.length; i += 2) {
                n.push(blockid.substr(i, 2));
            }

Π’Ρ‹ΡˆΠ΅ Π±Ρ‹Π» создан массив Π±Π°ΠΉΡ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° содСрТания Π±ΡƒΡ„Π΅Ρ€Π° ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΎ nodeJS

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ n содСрТаниС Π²ΠΈΠ΄Π°:

[ '00', 'ec', 'de', 'dc', 'fd', '86', '99', 'a3', '58', 'c4', '59', '5f', '02', '33', 'db', '93', '8d', '6d', '57', '05' ]

Из nodeJS Π½Π°ΠΌ ясно, Ρ‡Ρ‚ΠΎ Π² этой строкС Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π½Π°ΠΉΡ‚ΠΈ число 2744747773

И спрятано ΠΎΠ½ΠΎ Π²ΠΎΡ‚ Π² этом кускС ... 'fd', '86', '99', 'a3' ... это 4,5,6 ΠΈ 7 индСкс массива Π±Π°ΠΉΡ‚.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ эти 4 Π±Π°ΠΉΡ‚Π° Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ a3 99 86 fd

НапримСр просто Π½Π°ΠΏΠΎΠ»Π½ΠΈΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

var hex = n[7] + n[6] + n[5] + n[4];

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ hex Ρƒ нас Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ a39986fd ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ Π² искомоС число 2744747773 Π½ΡƒΠΆΠ½ΠΎ просто ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ hex Π² число:

var refBlockPrefix = parseInt(hex, 16)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ refBlockPrefix содСрТит Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ref_block_prefix ΠΈ автоматичСскоС Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ с мноТСством ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Π½Π° html страницС Π±Π΅Π· примСнСния сСрвСра.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ выглядит ΠΊΠΎΠ΄:

Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ operations ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ сразу нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ. Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ trx Π±ΡƒΠ΄Π΅Ρ‚ готовая транзакция со всСми Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ опСрациями, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π² Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ описано Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΌΠΎΠΈΡ… ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… статСй.

Π–ΠΈΠ²ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ скрипта Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° страницС https://golos.cf/md Π³Π΄Π΅ Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ совмСщСны Π΄Π²Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ: ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈ ΠΎΠΏΡ†ΠΈΠΈ коммСнтария.


Comments 7


Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ. Задумался: ΠΊΠ°ΠΊ ΠΆΠ΅ это всё ΠΏΠΎΠ½ΡΡ‚ΡŒ...

  1. Для Ρ‡Π΅Π³ΠΎ это всё Π½ΡƒΠΆΠ½ΠΎ?
  2. Как ΠΈΡΠΊΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊ, Π²Π°ΠΆΠ΅Π½ Π»ΠΈ Ρ‚ΠΈΠΏ Π΅Π³ΠΎ (Апвот, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘), ΠΊΠ°ΠΊ Π²Ρ‹Ρ‡Π»ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΠ· Π½ΠΎΠΌΠ΅Ρ€Π° ΠΈ Ρ…Π΅ΡˆΠ° Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Π΅...
  3. Π§Ρ‚ΠΎ трСбуСтся для создания Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

ΠžΡ‡Π΅Π½ΡŒ интСрСсуСт Ρ‚Π΅ΠΌΠ° Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°. JS знаю Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ: ΠΈΠ·ΡƒΡ‡ΠΈΠ» основы, Jquery, ajax.
Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ.

13.04.2018 03:40
0
  1. Π”Π΅Π»Π°Ρ‚ΡŒ broadcast ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ comment ΠΈ comment_options Π½ΡƒΠΆΠ½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΈΠ½Π°Ρ‡Π΅ comment_options ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ.
  2. Π’ΠΈΠΏ Π±Π»ΠΎΠΊΠ° Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ Π²Π°ΠΆΠ΅Π½. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ Π±Π»ΠΎΠΊΠ°ΠΌ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ привязка Π½Π° 3 Π±Π»ΠΎΠΊΠ° Ρ€Π°Π½Π΅Π΅ послСднСго. МоТно Π΅Ρ‰Π΅ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° минус 21 Π±Π»ΠΎΠΊ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ. ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° Π½ΡƒΠΆΠ½Π° для цСлостности Ρ†Π΅ΠΏΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π° - связанныС Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ.
  3. АдрСс Π½ΠΎΠ΄Ρ‹, ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΈΠ»ΠΈ локальной, Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, скрипт ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сформируСт ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ.

Π‘Π°ΠΌΠ° транзакция выглядит Ρ‚Π°ΠΊ:
https://golos.cf/tx/?=16b914989b1b3c0bec170426372a316d1533e311


zoom

1 ,2 ΠΈ 3 динамичСскиС Π΄Π°Π½Π½Ρ‹Π΅ - ref прСфикс ΠΈ id описываСмы Π² этом постС + срок дСйствия Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ.
4 - нСпосрСдствСнно ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
5 - подпись.

JS знаю Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ: ΠΈΠ·ΡƒΡ‡ΠΈΠ» основы, Jquery

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ html страницы golos.cf/md Ρ‚Π°ΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π· JS ΠΈ Jquery ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ c нСсколькими опСрациями Ρ‡Π΅Ρ€Π΅Π· golos-js

14.04.2018 16:33
0

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΡŽ Π·Π° Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΡŽ golos.cf/md

14.04.2018 16:39
0

ВсС ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π― ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽ.
Но боюсь Π΅ΡΡ‚ΡŒ малСнькая Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠ°. Если Π²Π΄Ρ€ΡƒΠ³ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ подписи. Π’ΠΎ боюсь ΠΏΡ€ΠΈ этом Π΅Π³ΠΎ ΠΆΠ΄Π΅Ρ‚ фиаско.

13.04.2018 09:23
0

ВовсС Π½Π΅Ρ‚.

Π’ постС Π΅ΡΡ‚ΡŒ ссылка Π½Π° ΠΌΠΎΠΉ ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ пост, Ρ‚Π°ΠΌ описано Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Π’Ρ‹ Π»ΠΈΠ±ΠΎ подписываСтС Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ нСсколькими ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡΠΈΠ³ ΠΈ подписываСтС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ своим ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

13.04.2018 09:30
0

Π‘ вопросом "ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ Π»ΠΈΠ½ΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ" Π΄ΡƒΠΌΠ°ΡŽ всё довольно просто. Если ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΡˆΡŒ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ, которая "сама ΠΏΠΎ сСбС", Ρ‚ΠΎ Π»ΠΈΠ½ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΊ last_irreversible (ΠΈΠ»ΠΈ Ρ‡ΡƒΡ‚ΡŒ Ρ€Π°Π½ΡŒΡˆΠ΅).

А Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ° ΠΊ свСТим Π±Π»ΠΎΠΊΠ°ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ: "ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΡŽ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Ρ‚Π°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π±Π»ΠΎΠΊ ΠΏΠΎΠΏΠ°Π» Π² Ρ†Π΅ΠΏΡŒ". Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½Ρ‹ΠΉ use-case: ΠΌΡ‹ "ΡΠ»ΡƒΡˆΠ°Π΅ΠΌ" Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ head block, ΠΈ допустим Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΈΠ΅ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ Π½Π° наш Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ ΠΈ сразу ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Благодаря TaPoS ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠΎΠ½Π΅Ρ‚Ρ‹ ΠΈ сразу ΠΆΠ΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄. Если пСрвая транзакция Π±ΡƒΠ΄Π΅Ρ‚ потСряна ΠΈΠ·-Π·Π° Ρ„ΠΎΡ€ΠΊΠ° Ρ†Π΅ΠΏΠΈ, Ρ‚ΠΎ ΠΈ наша транзакция автоматичСски "отмСнится".

13.04.2018 18:23
0