はじめに
2024年3月8日にリリースされたUnifyroomという新しいアルトコインについて紹介します。
最近マイニングしている
私は最近、このUNFYのマイニングを始めました。このUNFYコインの仕様は、以下の通りです。(bitcointalkより抜粋)
UNFY DETAIL SPECIFICATIONS:
Algorithm : YescryptR32 [CPU]
Difficulty Retarget : Every block using DGW (Dark Gravity Wave)
45% Masternode
45% Miners
10% Developer
Block Time : 120s
Masternode Collateral : 20,000
Coin Reward : 200 UNFY
Max Supply : 210,000,000 (210 Million)
Ticker : UNFY
Premine: 1,000,000 UNFY (promotion and exchange initial listing fee)
久しぶりにYescryptR32のアルゴリズムを見ましたが、主にCPUでマイニングされるものの、GPUでもマイニングが可能な点が興味深いですね。
chainparams.cppを見てみよう
まずは、chainparams.cppを見てみましょう。
コメント部分はこんな感じですね
// Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2020 The Bitcoin Core developers // Copyright (c) 2014-2023 The Unifyroom Core developers // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php.
masternodeの仕組みがあるので、Dash系からのフォークだと思うのですが、跡が無いですなぁ。。。
pszTimestampの値について
const char* pszTimestamp = "antemortem and postemortem";
「postemortem」は「postmortem」のスペルミスかもしれませんね。でも、ブロックチェーンの不変性のおかげで、このようなミスも歴史の一部になりますね。
nPowTargetSpacingの値
consensus.nPowTargetSpacing = 120; // Unifyroom: 2.5 minutes
コメントには2.5分と記載されていますが、2分間隔ですね。
base58Prefixesの値
// Unifyroom addresses start with 'U' base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,68); // Unifyroom script addresses start with '7' base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,16); // Unifyroom private keys start with '7' or 'X' base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,204);
[PUBKEY_ADDRESS] と [SECRET_KEY] に設定してある値を使ってアドレスを生成するには
$ ./vanitygen -X 68 -Y 204 UNFY39
で、UNFY39から始まるアドレスが生成できます
※https://blog.ukkey3.space/改めて-vanitygen-でお気に入りのアドレスを作成しようの記事を参考にしてねん
nMasternodePaymentsStartBlockの値
マスターノードの開始ブロック番号は4321のようです。
consensus.nMasternodePaymentsStartBlock = 4321; // not true, but it's ok as long as it's less then nMasternodePaymentsIncreaseBlock
現在(2024/3/17)のブロック高は、6974なので、すでに稼働している感じですね、Explorerで確認すると 49のマスターノードが動いているようです
この90UNFYがマスターノード報酬ですね。オイシイ報酬だけど、マスターノードを立てる担保が20,000UNFYも必要なのよねぇ(汗)
validation.cppについて
ブロック報酬の詳細は、validation.cpp内に記述されています。
static std::pair<CAmount, CAmount> GetBlockSubsidyHelper(int nPrevBits, int nPrevHeight, const Consensus::Params& consensusParams, bool fV20Active) { double dDiff; CAmount nSubsidyBase; CAmount nSubsidy; nSubsidyBase = 200; nSubsidy = 200; if(nPrevHeight == 0){ nSubsidy = 1000000; } // yearly decline of production by ~7.1% per year, projected ~18M coins max by year 2050+. for (int i = consensusParams.nSubsidyHalvingInterval; i <= nPrevHeight; i += consensusParams.nSubsidyHalvingInterval) { nSubsidy = nSubsidy/2; } CAmount nSuperblockPart{}; // // Hard fork to reduce the block reward by 10 extra percent (allowing budget/superblocks) // if (nPrevHeight > consensusParams.nBudgetPaymentsStartBlock) { // // Once v20 is active, the treasury is 20% instead of 10% // nSuperblockPart = nSubsidy / (fV20Active ? 5 : 10); // } nSubsidy = nSubsidy * COIN; nSuperblockPart = 0; return {nSubsidy - nSuperblockPart, nSuperblockPart}; }
ブロック報酬の基本は200UNFYですが、最初のブロック(プレマイン)では100万UNFYが報酬として設定されていますね。
マスターノードの報酬については、GetMasternodePaymentに記述があります。ブロック報酬の45%で計算されていますね
CAmount GetMasternodePayment(int nHeight, CAmount blockValue, bool fV20Active) { CAmount ret = 0; int nMnCountEnabled = deterministicMNManager->GetListAtChainTip().GetValidMNsCount(); int mnMinimal = Params().GetConsensus().DIP0003MinimumCount; LogPrintf("[ kampretMnValid ] masternode enable %d -- masternode minimal %d \n", nMnCountEnabled, mnMinimal); if(nMnCountEnabled < mnMinimal) { ret = 0; return ret; } ret = 0.45 * blockValue; return ret; }
恐らくですが~
マスターノードの数(GetValidMNsCount())が10(DIP0003MinimumCount)より少ない場合は、マスターノードの報酬は0になるかと思います
さいごに
今回の記事を書きながら Unifyroom のマスターノードを立ててみたいなと思った。
私が持ってるマスターノードはUkkeyCoin除いて2つあります。SWAMP Coin と 01Coinなのですが、報酬があまり無いんですよねぇ。
マスターノードの数が、SWAMP Coinの場合、275ノードで、01coinだと、2749ノードもあるから、順番回ってこないかねぇ
いったん解体するかなぁ
そして、UNFYのマスターノードを立ててみたいですね
コメント