LoginSignup
3
1

More than 5 years have passed since last update.

ブックマークレットでEthereumのDAGサイズを計算する

Last updated at Posted at 2017-06-26

EthereumのDAGサイズを計測する機会があったので、計算してみました。

スクリーンショット 2017-06-26 21.02.34.png

仕様

block高(eth.blockNumber)に依存しているようです。

python

def get_full_size(block_number):
    sz = DATASET_BYTES_INIT + DATASET_BYTES_GROWTH * (block_number // EPOCH_LENGTH)
    sz -= MIX_BYTES
    while not isprime(sz / MIX_BYTES):
        sz -= 2 * MIX_BYTES
    return sz
WORD_BYTES = 4                    # bytes in word
DATASET_BYTES_INIT = 2**30        # bytes in dataset at genesis
DATASET_BYTES_GROWTH = 2**23      # dataset growth per epoch
CACHE_BYTES_INIT = 2**24          # bytes in cache at genesis
CACHE_BYTES_GROWTH = 2**17        # cache growth per epoch
CACHE_MULTIPLIER=1024             # Size of the DAG relative to the cache
EPOCH_LENGTH = 30000              # blocks per epoch
MIX_BYTES = 128                   # width of mix
HASH_BYTES = 64                   # hash length in bytes
DATASET_PARENTS = 256             # number of parents of each dataset element
CACHE_ROUNDS = 3                  # number of rounds in cache production
ACCESSES = 64                     # number of accesses in hashimoto loop

確認方法

block number

3932564

確認script

ブラウザで実行したいですよね。。

ブックマークレットを作りました。お気に入りに登録することで確認できるようになります。

以下のスクリプトをお気に入りに登録して実行できます。

javascript:
(function() {
  var DATASET_BYTES_INIT = 2**30;
  var DATASET_BYTES_GROWTH = 2**23;
  var EPOCH_LENGTH = 30000;
  var MIX_BYTES = 128;
  var isprime = function(n) {
    if (n === 2) return true;
    var s = Math.sqrt(n);
    for(var i = 2; i <= s; i++)
    if(n % i === 0) return false;
    return n !== 1;
  };
  var get_full_size = function(block_number) {
    var sz = DATASET_BYTES_INIT + DATASET_BYTES_GROWTH * Math.floor(block_number / EPOCH_LENGTH);
    sz -= MIX_BYTES;
    while (!isprime(sz / MIX_BYTES)) {
      sz -= 2 * MIX_BYTES;
    }
    return sz;
  };
  var block_number = prompt('block number');
  var size = get_full_size(block_number);
  var sizeGb = size / (1024**3);
  alert('dag size is ' + sizeGb + 'GB');
})();
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1