Как можно реалистично моделировать распределение неизрасходованных транзакционных выходов сети?

Я работаю над симуляцией, чтобы изучить полезность патча для поведения CoinSelection в BitcoinCore. С этой целью я ищу статистику по распределению неизрасходованных выходов, соответствующих их стоимости в сатоши.

До сих пор я не очень много разбирался в этой теме рядом с устаревшим числом неизрасходованных выходов транзакций , поскольку вероятные поисковые термины сталкиваются с множеством не связанных между собой тем.

Есть ли какие-либо документы или другие источники, которые обсуждаются:

  • Как можно реалистично моделировать распределение значения (в сатоши) всех UTXO (неизрасходованных выходов транзакции)?
  • Какая кривая лучше всего аппроксимирует распределение?
  • Что означает среднее, стандартное отклонение и отклонение значений UTXO сети?
  • Бонус: как изменилось распределение значений UTXO со временем?

Уточнение: мне интересно моделировать количество сатоши, хранящихся в UTXO.

4 голоса | спросил Murch 3 +04002014-10-03T13:44:40+04:00312014bEurope/MoscowFri, 03 Oct 2014 13:44:40 +0400 2014, 13:44:40

1 ответ


3

Я не читал никаких статей, пытаясь проанализировать количество неизрасходованных выходов. Чаще всего люди заинтересованы в распределении балансов адресов. Это может быть интересно, потому что это отражает то, как равномерно распределен биткойн.

Я нашел эту статью: http: //www. coindesk.com/what-block-chain-analysis-tells-bitcoin/, который, похоже, может вас заинтересовать и связан с распределением UTXO.

Если вы вызываете gettxoutsetinfo с вызовами Bitcoin Core RPC, он сообщает некоторую базовую информацию о наборе UTXO. Я просто сделал это и получил:

{
    "height" : 338396,
    "bestblock" : "000000000000000009f32437cb28d54ff600ec020778c8ce84ecf93b99d5218c",
    "transactions" : 4525842,
    "txouts" : 16217914,
    "bytes_serialized" : 566046691,
    "hash_serialized" : "1ad2172e4d37ce21291c116580f5b527e4c302b9c2ce4e88a91c0c00f748fb8d",
    "total_amount" : 13709764.78496462
}

Итак, кажется, что среднее количество UTXO:

  

13709764.78496462 /16217914 = 0,84534699


Чтобы проанализировать количество выходов (обратите внимание, это не только только UTXOs), я написал этот быстрый скрипт:

<?php

require_once 'jsonRPCClient.php';

$bitcoin = new jsonRPCClient('http://{username}:{password}@127.0.0.1:8332/');

$info = $bitcoin->getinfo();

$height = $info['blocks'];
$numTrials = 1000;
$includeCoinbase = false;


$cutoffs = array();

for ($i = 0; $i < 10; $i++) { $cutoffs[] = $i; }
for ($i = 1; $i < 10; $i++) { $cutoffs[] = 10*$i; }
for ($i = 1; $i < 10; $i++) { $cutoffs[] = 100*$i; }
for ($i = 1; $i < 10; $i++) { $cutoffs[] = 1000*$i; }

function GetRange($value) 
{
    global $cutoffs;
    for ($i = 0; $i < count($cutoffs)-1; $i++)
    {
        if ($cutoffs[$i] <= $value && $value < $cutoffs[$i+1])
            return $cutoffs[$i] . " - " . $cutoffs[$i+1];
    }
    return $cutoffs[count($cutoffs)-1] . " - ...";
}

$sum = 0;
$distribution = array();

for ($i = 0; $i < $numTrials; $i++) 
{

    $blockhash = $bitcoin->getblockhash(rand(1, $height));
    $block = $bitcoin->getblock($blockhash);

    $randTxIndex = rand(0, count($block['tx'])-1);

    if ($randTxIndex == 0 && !$includeCoinbase) {
        $i--;
        continue;
    }

    $randTxHash = $block['tx'][$randTxIndex];

    $randTx = $bitcoin->getrawtransaction($randTxHash, 1);

    $numOutputs = count($randTx['vout']);
    $randOutput = $randTx['vout'][rand(0, $numOutputs-1)];

    $value = $randOutput['value'];

    $sum += $value;
    $distribution[GetRange($value)] += 1;
}

echo (json_encode($distribution, JSON_PRETTY_PRINT) . "\n");
echo "average: " . ($sum / $numTrials) . "\n";

И результаты (после небольшого очищения):

average: 89.55518291596

START   END     COUNT
0       1       636
1       2       73
2       3       18
3       4       20
4       5       14
5       6       11
6       7       8
7       8       8
8       9       11
9       10      12
10      20      36
20      30      26
30      40      15
40      50      16
50      60      29
60      70      5
70      80      5
80      90      4
90      100     3
100     200     29
200     300     4
300     400     4
400     500     1
500     600     1
600     700     1
700     800     1
800     900     3
900     1000    0
1000    2000    2
2000    3000    1
3000    4000    0
4000    5000    0
5000    6000    1
6000    7000    0
7000    8000    0
8000    9000    0
9000    ...     2

Что при построении дает:

введите описание изображения здесь>> </p>

<p> И так как выходы 0-1 заставляют остальных выходить из строя, это график без наименьших выходов: </p>

<p> <img src =

ответил StephenM347 11 Jam1000000amSun, 11 Jan 2015 00:05:05 +030015 2015, 00:05:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132