入门区块链,发布以太坊ERC20代币

最近币圈新闻比较多,有没有想过,币是怎么来了,话不多说,我们来发一个币,名字叫 CodeToken,简称CTB。

因为发币,部署,转账等都是要消耗GAS FEE(GAS FEE是什么?GAS FEE可以理解为手续费)的,因为我们要在测试网上发币,测试网这里选择的是Rinkeby,首先你要去https://faucet.rinkeby.io/ 领币,步骤都写的很清楚。

准备工具

在线编译器remix:https://remix.ethereum.org/ 主网区块浏览器:https://etherscan.io/ rinkeby测试网区块浏览器:https://rinkeby.etherscan.io/ MetaMask钱包插件 VPN 推特(领币需要)

1.编码

打开以太坊区块浏览器(https://etherscan.io/ ) 。如果打不开,需要VPN(公众号回复VPN,获取免费无限流量VPN)哦,我们搜索之前比较火的一个币,YFII(二姨夫),相信炒币的人都了解,难得一遇的百倍币,产生了很多。

1605702373122

找到后,点击下图的合约地址

1605702435398

ok,代码就在这里了

1605749373638

把里面的代码拷贝出来,按文件划分,写到remix中,如下:

1605749516114

代码都是遵循标准的ERC20协议。所有的代码我都加上了注释,方便小伙伴们查看,同时,代码也上传到Github:https://github.com/joeBeckham/codeToken

2.编译

代码写完后,我们就要编译一下,看下写的代码有没有问题。

首先我们要清楚,我们发布的主合约是CodeToken,编译的时候要选中CodeToken.sol文件,然后选择remix的左侧的编译按钮,选择solidity版本后,点击下方的Compile CodeToken.sol 按钮,当编译通过后,会发现左侧的编译按钮打上了一个对号,同时,会在文件按钮中新增出一个artifacts文件夹,里面包含编译后的文件。

1605749802633

3.部署

编译通过了,接下来就要开始部署了。

首先,要清楚的是,remix左侧的第三个按钮是发布按钮。点击发布按钮,会看到有ENVIRONMENT、ACCOUNT 、GAS LIMIT、CONTRACT等。

其中,ENVIRONMENT有如下几个选项:

JavaScript VM:这是Remix自己的内部沙箱。它不连接到MainNet,TestNet或任何专用网络。这是一个内存中的区块链,可用于简单测试和快速挖掘。 Injected Web3:这是用于浏览器插件(MetaMask)的选项。在这里,Remix将对区块链集成的所有控制权交给MetaMask插件。此时,MetaMask控制要连接到的网络。 Web3 Provider:这允许在Remix中输入URL以连接到区块链。此处最常见的设置是运行本地节点并通过其IP/端口连接到该节点

ENVIRONMENT我们选择 Injected Web3。

ACCOUNT 、GAS LIMIT默认即可,CONTRACT 则要选择 CodeToken.sol 主合约。

1605750333502

一切就绪,那么,点击 Deploy 发布按钮,会弹出小狐狸确认框,此处会消耗GAS FEE,

1605762420256

点击确认,我们会看到remix的控制台上有如下输出:

1605762498279

包含了交易的状态、hash、gas等信息,status我们看到是成功的,我们把这笔交易拿到以太坊区块浏览器上去查看,当然,要去测试网的以太坊区块浏览器中查看,复制 transaction hash ,然后 打开 https://rinkeby.etherscan.io/ ,会看到这笔交易的详细信息:

1605762705582

那么我们怎么查看部署的合约呢?

复制 From 地址,在区块浏览器中查询,找到此地址发布的合约:

1605762969329

点进去即可看到。

4.验证合约方法

合约部署完成后,我们要验证下方法。依然是部署菜单,点击 > ,会看到 一堆的东西,不要慌,我们一起解读下

1605763917525

这些都是我们定义在合约的变量和方法。

点击 totalSupply变量,我们查看下 发布的token总量,没错,是0,因为我们还没有铸币

1605764179725

正如CodeToken代码中所写一样,要铸币(mint方法),首先要 有铸币权限的地址,要想有铸币权限的地址,就必须先给某个地址添加铸币权限(addMinter方法),添加铸币权限并不是每个用户都可以操作的,需要是治理管理员地址(governance变量),默认的治理管理员地址(governance变量)是部署合约的地址用户,如果想要修改治理管理员地址,需要设置治理管理员地址(setGovernance方法),这个方法要求调用者必须为当前治理管理员地址,这样就理解了吧。

我们在重新梳理一下,总结两句话:

用前治理管理员地址给某个地址添加铸币权限(用governance地址调用addMinter方法) 拥有铸币权限地址向指定地址铸币(用addMinter方法的参数 执行mint方法)

我们来实践一下:

1.把小狐狸的账号切换到刚刚我们发布合约的账号;

1605764808497

2.把test账号设置为拥有铸币权限,把test的地址复制到 addMinter 后面的框中,点击 addMinter 框,小狐狸确认后,我们看到这笔交易是成功的

1605765442686

3.查询下test账号的地址是否拥有铸币权限

将test账号的地址复制到 minters 后面的框中,点击,true,验证通过

1605765558322

4.铸币,使用test账号的地址来铸币10000个

在mint后面的框中输入参数 0xf43d31E51c78dEdDA5E12711401e3B516b207fB7,10000000000000000000000,10000后面加18个0,因为链上是不使用小数的。

点击mint按钮,小狐狸确认后,我们看到这笔交易是失败的

1605766018829

我们点击上面的链接,查看这笔交易失败的原因:

1605766069937

没错,错误是 不是miniter,我们捋一下,我们设置了 test账号地址 拥有铸币权限,但是 我们小狐狸账号是 nice_gogogo账号,显然,nice_gogogo我们没有设置铸币权限。so,把小狐狸账号切换到 test账号

重新执行,ok,交易成功。

5.查看币的总量,点击 totalSupply

1605766859615

去掉18个0,总量10000,没错。

6.测试下转账方法

使用当前小狐狸账户(test账号)来给 hhhhh 账号转500个CTB,在 transfer 后面的框中输入:0x83B109CF083f0c8Bcc9ab07aF964B135Df325771,500000000000000000000,点击transfer按钮,

1605767204230

我们查看小狐狸的test账号,原来应该是有10000个CTB的,转账500个成功后,剩余 9500个。

1605767336281

查看hhhhh账号的CTB,没有CTB,先添加代币

1605767902371

查看CTB余额,果然是500个

1605767931355

5.发布源代码

合约部署测试完成后,我们打开ETH区块链浏览器,搜索我们发的token,CTB,注意,这次发的token合约地址是0x120d5ce8be6f65e51776086aefbb3f83b491b33c

搜索的时候你可能会发现有两个 CTB,因为有一个是我测试的时候发的。

1605768689978

点击合约地址后,然后选择Contract选项,看不到我们的源代码,并看到 有Verify And Publish,没错,是因为我们还没有 上传代码并开源。

1605768882477

点击Verify And Publish,选择 编译器类型、solidity版本、开源证书类型,点击继续

1605693217737

上传文件:

1605763429485

上传完文件后,拉到最底部,进行人机身份验证后,点击Verify And Publish

1605763504519

等待一会,ok,源代码上传完成。

1605770600178

这样,整个合约就部署发布完成了。出了在remix中调用方法外,还可以在区块浏览器中调用,搜索刚刚发布的币 CTB,打开后 会看到 有Read Contract 和 Write Contract

1605839235232

Read Contract 是暴漏出的可读变量和可读方法,不用连接钱包,不会消耗GAS Write Contract 是修改的变量和修改的方法,要连接钱包,会消耗GAS

这就是我们发布的 CTB 币,我们实现了标准的ERC20协议中的接口。

炒币不如了解怎么发币,知其然还要知其所以然,很NICE哦。