Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Весь документооборот от разных компаний теоретически можно было бы сшить в единый блокчейн, где одна компания или подразделение — это одна нода.
Каждый учасник самостоятельно генерирует свой приватный ключ на том физическом устройстве, которому он доверяет.
Поскольку ключевая цель использования блокчейна – децентрализация, то и управление инфраструктурой блокчейна должно происходить децентрализовано.
Блокчейн может обеспечить консистентное представление о состоянии данных без необходимости взаимного доверия между учасниками,
Вносить коррективы «задним числом» плохо всегда, особенно если в системе задействованы несколько распределенных учасников.
Забавно что любой блокчейн рассматривается только с какими то токенами. Причем в подавляющем большинстве случаев единственное применение этих токенов — подзаработать создателю системы
SELECT countDistinct(smart_contract_address_bin)
FROM
(
SELECT
smart_contract_address_bin,
countIf(tx_hash_bin, dictGetString('smart_contract_by_address', 'contract_type', tuple(concat('0x', lower(hex(tx_from_bin))))) = '-') AS calls_count_from_regular_addresses
FROM production.calls_sc
GROUP BY smart_contract_address_bin
HAVING calls_count_from_regular_addresses = 0
)
┌─uniqExact(smart_contract_address_bin)─┐
│ 4354435 │
└───────────────────────────────────────┘
1 rows in set. Elapsed: 16.317 sec. Processed 294.18 million rows, 29.12 GB (18.03 million rows/s., 1.78 GB/s.)
SELECT countDistinct(smart_contract_address_bin)
FROM production.calls_sc
┌─uniqExact(smart_contract_address_bin)─┐
│ 7054556 │
└───────────────────────────────────────┘
1 rows in set. Elapsed: 5.547 sec. Processed 294.18 million rows, 8.53 GB (53.04 million rows/s., 1.54 GB/s.)
SELECT countDistinct(smart_contract_address_bin)
FROM
(
SELECT
smart_contract_address_bin,
countIf(tx_hash_bin, dictGetString('smart_contract_by_address', 'contract_type', tuple(concat('0x', lower(hex(tx_from_bin))))) = '-') AS calls_count_from_regular_addresses,
countIf(tx_hash_bin, dictGetString('smart_contract_by_address', 'contract_type', tuple(concat('0x', lower(hex(tx_from_bin))))) != '-') AS calls_count_from_smart_contracts
FROM production.calls_sc
GROUP BY smart_contract_address_bin
HAVING (calls_count_from_regular_addresses = 0) AND (calls_count_from_smart_contracts > 1)
)
┌─uniqExact(smart_contract_address_bin)─┐
│ 1705989 │
└───────────────────────────────────────┘
1 rows in set. Elapsed: 14.006 sec. Processed 294.18 million rows, 29.12 GB (21.00 million rows/s., 2.08 GB/s.)
SELECT
concat('0x', lower(hex(smart_contract_address_bin))) AS smart_contract_address,
countIf(tx_hash_bin, dictGetString('smart_contract_by_address', 'contract_type', tuple(concat('0x', lower(hex(tx_from_bin))))) = '-') AS calls_count_from_regular_addresses,
countIf(tx_hash_bin, dictGetString('smart_contract_by_address', 'contract_type', tuple(concat('0x', lower(hex(tx_from_bin))))) != '-') AS calls_count_from_smart_contracts
FROM production.calls_sc
GROUP BY smart_contract_address_bin
HAVING (calls_count_from_regular_addresses = 0) AND (calls_count_from_smart_contracts > 1)
LIMIT 10
┌─smart_contract_address─────────────────────┬─calls_count_from_regular_addresses─┬─calls_count_from_smart_contracts─┐
│ 0xb97d780e5809c3afc41d8f46962b5b3b1cb5524c │ 0 │ 2 │
│ 0x074716e53c1df67f0e1c66d459bfa1a434677e4f │ 0 │ 8 │
│ 0x66dad44af901093090f360b643e4362a7e8861f2 │ 0 │ 4 │
│ 0x47c3e2314f3c7875e7a2a205822e0d549263563d │ 0 │ 2 │
│ 0x773b42543ba7cf82b4adec0fc3c90cb6839da536 │ 0 │ 2 │
│ 0x63cf746c7af437343f29c0ed12429b55173e19a1 │ 0 │ 3 │
│ 0x5a9a2cbfb7c7895a5c34b113b1707e92bb838119 │ 0 │ 3 │
│ 0x18cd352bb4f648b2507690a361767affe86cb368 │ 0 │ 2 │
│ 0xfdd9d2625e0948ad3aeb50430754368da5ed7dea │ 0 │ 2 │
│ 0xe1d9b3687e6978ab161ac95f2a4d131ef8384f71 │ 0 │ 2 │
└────────────────────────────────────────────┴────────────────────────────────────┴──────────────────────────────────┘

Вот например контракт: 0x074716e53c1df67f0e1c66d459bfa1a434677e4f
SELECT
countDistinct(transfer_to_bin) AS address_B_count,
sum(value) / 1000000000000000000. AS ether_amount
FROM production.transfers_tx
WHERE (currency_id = 1) AND (tx_hash_bin IN
(
SELECT tx_hash_bin
FROM production.calls_sc
WHERE dictGetString('signature', 'name', toUInt64(signature_id)) = 'suicide'
))
┌─address_B_count─┬──────ether_amount─┐
│ 51293 │ 469014.4142188265 │
└─────────────────┴───────────────────┘
1 rows in set. Elapsed: 33.170 sec. Processed 603.01 million rows, 38.56 GB (18.18 million rows/s., 1.16 GB/s.)
В итоге удалось применить знания на практике?
Анализ блокчейн, или почему сломался миксер?