山寨币制作快速指南

本文介绍如何基于TurtleCoin的源码,通过分叉来快速制作一个山寨币。

1、选一个时髦的名字

如果没有一个时髦的名字,怎么会是一个好的山寨币?我花了不少时间尝试不同 的选择,最终我决定冒着重名的风险使用“Athena”。现在让我们到Github上建立 同名的机构以便显得更正式、更官方:

2、克隆TurtleCoin仓库

现在回到TurtleCoin主仓库,使用右上角的fork按钮,将分叉的仓库分配给 我们刚才创建的athena-network机构。

刚fork下来仓库的时候,名字还是TurtleCoin,因此我们需要在设置里将其 改名为“athena”。 现在我们的仓库建好了:athena github

3、经济考量与发行逻辑

接下来的部分就是核心所在,我们将定义区块链网络如何运作。

3.1 出块周期

无论是否存在交易,TurtleCoin都会每隔30秒出一区块。对于Athena而言,我们希望 以比较慢的速度出比较大的区块,以便作为其他区块链的结算通道。因此我们可以 设置为1小时出一块:

找到这一行:

1
const uint64_t DIFFICULTY_TARGET = 30; // seconds

修改如下:

1
const uint64_t DIFFICULTY_TARGET = 3600; // seconds

3.2 钱包地址前缀

关于这一点只有一个要求,而且非常宽松。基本上如果你希望别人认真对待你的币, 只要别选和其他网络类似的前缀就好了。

前缀只能用CN Base58字符,这样的话只有特定的组合是可用的,并且有些字母不允许使用, 例如li,或则o0。在这个示例中你可以看到我已经为athena币生成了钱包前缀, 这样最终生成的地址将超过100字符长。

找到这一行:

1
const uint64_t CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = 3914525;

修改为:

1
const uint64_t CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX = 0x18845CFCA;

3.3 供应总量

我们一开始决定发1万亿个Athena币,小数点后两位,这个发行量和前10大网络比起来很小了, 不过不管怎样,人们还是会抱怨币“多如牛毛”。这次我们发行2100万个币试试。

让我们用32位整数上限2,147,483,647,这样我们最终有了21,474,836.47个Athena代币。

找到这一行:

1
const uint64_t MONEY_SUPPLY = UINT64_C(100000000000000);

修改为:

1
const uint64_t MONEY_SUPPLY = UINT64_C(2147483647);

3.4 挖矿难度

对于这个参数没有太多的考虑,我们直接使用zpamtree建议的参数,为块0使用Zawy Algo 1, 块1启用LWMA-2开关。

找到这两行:

1
2
const uint32_t ZAWY_DIFFICULTY_BLOCK_INDEX = 187000;
const uint64_t LWMA_2_DIFFICULTY_BLOCK_INDEX = 620000;

修改为:

1
2
const uint32_t ZAWY_DIFFICULTY_BLOCK_INDEX = 0;
const uint64_t LWMA_2_DIFFICULTY_BLOCK_INDEX = 1;

3.5 释放速度因子

释放速度因子是山寨币的另一个魔术数字,这个数值越小,币释放出来的速度就越快:

1
const unsigned EMISSION_SPEED_FACTOR = 25;

该参数必须大于8,否则你就会有麻烦。因此我们选择紧接下来的最快速的数字9:

1
const unsigned EMISSION_SPEED_FACTOR = 25;

3.6 小数位数

我喜欢将小数位数设置为2:

1
const size_t CRYPTONOTE_DISPLAY_DECIMAL_POINT = 2;

3.7 手续费

手续费是网络中矛盾的存在。你希望手续费高一点这样人们就不会制造垃圾交易, 但你又希望手续费尽可能的低,这样真正需要的人们不会为转账的高成本困扰。

综合各方面考虑,我们设置为10000个原子单位。

找到这行:

1
const uint64_t MINIMUM_FEE = UINT64_C(10);

修改为:

1
const uint64_t MINIMUM_FEE = UINT64_C(10000);

3.8 混合

混合是TurtleCoin保护交易私有化的手段。我们使用最小化措施来保持区块简洁 同时提供一定的安全。

找到这些行:

1
2
3
4
5
6
7
const uint64_t MINIMUM_MIXIN_V1                              = 0;
const uint64_t MAXIMUM_MIXIN_V1 = 100;
const uint64_t MINIMUM_MIXIN_V2 = 7;
const uint64_t MAXIMUM_MIXIN_V2 = 7;

const uint32_t MIXIN_LIMITS_V1_HEIGHT = 440000;
const uint32_t MIXIN_LIMITS_V2_HEIGHT = 620000;

替换为下面的值:

1
2
3
4
5
6
7
const uint64_t MINIMUM_MIXIN_V1                              = 0;
const uint64_t MAXIMUM_MIXIN_V1 = 3;
const uint64_t MINIMUM_MIXIN_V2 = 3;
const uint64_t MAXIMUM_MIXIN_V2 = 3;

const uint32_t MIXIN_LIMITS_V1_HEIGHT = 0;
const uint32_t MIXIN_LIMITS_V2_HEIGHT = 1;

3.9 dust阈值

我们简单的将这个值保留为0。

3.10 分叉高度

如果我们每小时出一块,那么在6个月后,大约会出24*18 = 4392块。我们计划 每6个月分叉一次,用来升级软件,因此预定义的分叉高度大致如下:

1
2
3
4
5
6
7
const uint64_t FORK_HEIGHTS[] =
{
4392,
8684,
13176,
17568
};

看起来很复杂,其实很简单,就是设置一下升级周期。

找到这行:

1
const uint8_t CURRENT_FORK_INDEX = FORK_HEIGHTS_SIZE == 0 ? 0 : 3;

修改为:

1
const uint8_t CURRENT_FORK_INDEX = FORK_HEIGHTS_SIZE == 0 ? 0 : 0;

3.11 修改名称

已经接近修改工作的尾声了,我们现在修改要生成的程序名。

找到这行:

1
const char CRYPTONOTE_NAME[] = "TurtleCoin";

修改为:

1
const char CRYPTONOTE_NAME[] = "Athena";

原文链接:Altcoin 101 — Create a Cryptonote Privacy Coin Clone in One Hour

汇智网翻译整理,转载请标明出处