设为首页收藏本站

朵朵论坛

查看: 1479|回复: 0

提高班2-3如何将pos币钱包修改为pow模式

[复制链接]

该用户从未签到

146

主题

331

帖子

8778

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8778
发表于 2015-12-31 15:29:40 | 显示全部楼层 |阅读模式
本帖最后由 duoduo 于 2015-12-31 15:59 编辑

本教程完全免费,也禁止任何人以任何形式将进行转载。
违者必究。
如需要转载,请与我联系。
朵朵学院校训:山寨币从朵朵学院做起,成也朵朵,毁也朵朵。
——蘑菇院长
朵朵学院官方群:516341837

提高班课程只推荐二级造币师学习,凡是没有获得二级造币师资格而去学习的,一概不回答问题。
前言
基础班第四节学了创世纪块的开发。那里介绍的都是一些最基本的内容,这里再补充一些。特别强调是,这些参数修改后,hash很可能会发生变化,也就是说等于生成了一个新钱包。


1.币总量
src\main.cpp里面的951行,那个70000000就是币总量,
基础班第四节已经说过

2.关于币总量的细节调整
大家看这段代码
// miner's coin base reward based on nBitsint64 GetProofOfWorkReward(int nHeight, int64 nFees, uint256 prevHash)
{        int64 nSubsidy = 0.0 * COIN;

        if(nHeight == 1)      
{                nSubsidy = 70000000 * COIN;      
// 1 billion coins, that all pow coins               
return nSubsidy + nFees;        
}

return nSubsidy + nFees;}
这句话其实说的是,如果是第一个块,则里面的币为70000000大家有点启发没有,如果我们把
if(nHeight == 1)
取消了怎么办?那就意味着每个块都有70000000个币了
所以我们可以这段修改为如下代码

int64 GetProofOfWorkReward(int nHeight, int64 nFees, uint256 prevHash)
{        int64 nSubsidy = 10000 * COIN/nHeight ;    return nSubsidy + nFees;}
这就意味着第一个块出1万个币,第二个块出1万/2=5000个币,第十个块是1000.而一万个块以后则不到一个币了。
如果大家觉得这个收敛速度不够快,可以把这段代码

int64 nSubsidy = 10000 * COIN/nHeight ;
修改为:
int64 nSubsidy = 10000 * COIN/(nHeight*nHeight) ;
这样,第一个块是1万个币,第十个块是100个币,而第一百个以后则不到一个币了。

3.取消pos挖矿的币量
大家找到这段代码,就在刚才那段代码的下面
int64 GetProofOfStakeReward(int64 nCoinAge, unsigned int nBits, unsigned int nTime, int nHeight)
{    int64 nRewardCoinYear;        
nRewardCoinYear = MAX_MINT_PROOF_OF_STAKE;        
if(nHeight < YEARLY_BLOCKCOUNT)               
nRewardCoinYear = 10 * MAX_MINT_PROOF_OF_STAKE;      
else if(nHeight < (2 * YEARLY_BLOCKCOUNT))               
nRewardCoinYear = 8 * MAX_MINT_PROOF_OF_STAKE;        
else if(nHeight < (3 * YEARLY_BLOCKCOUNT))               
nRewardCoinYear = 6 * MAX_MINT_PROOF_OF_STAKE;        
else if(nHeight < (4 * YEARLY_BLOCKCOUNT))               
nRewardCoinYear = 4 * MAX_MINT_PROOF_OF_STAKE;      
else if(nHeight < (5 * YEARLY_BLOCKCOUNT))               
nRewardCoinYear = 2 * MAX_MINT_PROOF_OF_STAKE;   
int64 nSubsidy = nCoinAge * nRewardCoinYear / 365;      
if (fDebug && GetBoolArg("-printcreation"))        
printf("GetProofOfStakeReward(): create=%s nCoinAge=%"PRI64d" nBits=%d\n", FormatMoney(nSubsidy).c_str(), nCoinAge, nBits);  
  return nSubsidy;}
这里的修改更简单了
int64 GetProofOfStakeReward(int64 nCoinAge, unsigned int nBits, unsigned int nTime, int nHeight)
{    int64 nSubsidy = 0;      
if (fDebug && GetBoolArg("-printcreation"))        printf("GetProofOfStakeReward(): create=%s nCoinAge=%"PRI64d" nBits=%d\n", FormatMoney(nSubsidy).c_str(), nCoinAge, nBits);  
  return nSubsidy;}
就是pos利息永远为零。如果还想要pow挖矿,还想要pos,这段就不要动。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|朵朵社区一起购物吧|朵朵    

GMT+8, 2018-11-21 23:57 , Processed in 0.140625 second(s), 32 queries .

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表