最近币圈新闻比较多,有没有想过,币是怎么来了,话不多说,我们来发一个币,名字叫 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(二姨夫),相信炒币的人都了解,难得一遇的百倍币,产生了很多。
找到后,点击下图的合约地址
ok,代码就在这里了
把里面的代码拷贝出来,按文件划分,写到remix中,如下:
代码都是遵循标准的ERC20协议。所有的代码我都加上了注释,方便小伙伴们查看,同时,代码也上传到Github:https://github.com/joeBeckham/codeToken
2.编译
代码写完后,我们就要编译一下,看下写的代码有没有问题。
首先我们要清楚,我们发布的主合约是CodeToken,编译的时候要选中CodeToken.sol文件,然后选择remix的左侧的编译按钮,选择solidity版本后,点击下方的Compile CodeToken.sol 按钮,当编译通过后,会发现左侧的编译按钮打上了一个对号,同时,会在文件按钮中新增出一个artifacts文件夹,里面包含编译后的文件。
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 主合约。
一切就绪,那么,点击 Deploy 发布按钮,会弹出小狐狸确认框,此处会消耗GAS FEE,
点击确认,我们会看到remix的控制台上有如下输出:
包含了交易的状态、hash、gas等信息,status我们看到是成功的,我们把这笔交易拿到以太坊区块浏览器上去查看,当然,要去测试网的以太坊区块浏览器中查看,复制 transaction hash ,然后 打开 https://rinkeby.etherscan.io/ ,会看到这笔交易的详细信息:
那么我们怎么查看部署的合约呢?
复制 From 地址,在区块浏览器中查询,找到此地址发布的合约:
点进去即可看到。
4.验证合约方法
合约部署完成后,我们要验证下方法。依然是部署菜单,点击 > ,会看到 一堆的东西,不要慌,我们一起解读下
这些都是我们定义在合约的变量和方法。
点击 totalSupply变量,我们查看下 发布的token总量,没错,是0,因为我们还没有铸币
正如CodeToken代码中所写一样,要铸币(mint方法),首先要 有铸币权限的地址,要想有铸币权限的地址,就必须先给某个地址添加铸币权限(addMinter方法),添加铸币权限并不是每个用户都可以操作的,需要是治理管理员地址(governance变量),默认的治理管理员地址(governance变量)是部署合约的地址用户,如果想要修改治理管理员地址,需要设置治理管理员地址(setGovernance方法),这个方法要求调用者必须为当前治理管理员地址,这样就理解了吧。
我们在重新梳理一下,总结两句话:
- 用前治理管理员地址给某个地址添加铸币权限(用governance地址调用addMinter方法)
- 拥有铸币权限地址向指定地址铸币(用addMinter方法的参数 执行mint方法)
我们来实践一下:
1.把小狐狸的账号切换到刚刚我们发布合约的账号;
2.把test账号设置为拥有铸币权限,把test的地址复制到 addMinter 后面的框中,点击 addMinter 框,小狐狸确认后,我们看到这笔交易是成功的
3.查询下test账号的地址是否拥有铸币权限
将test账号的地址复制到 minters 后面的框中,点击,true,验证通过
4.铸币,使用test账号的地址来铸币10000个
在mint后面的框中输入参数 0xf43d31E51c78dEdDA5E12711401e3B516b207fB7,10000000000000000000000,10000后面加18个0,因为链上是不使用小数的。
点击mint按钮,小狐狸确认后,我们看到这笔交易是失败的
我们点击上面的链接,查看这笔交易失败的原因:
没错,错误是 不是miniter,我们捋一下,我们设置了 test账号地址 拥有铸币权限,但是 我们小狐狸账号是 nice_gogogo账号,显然,nice_gogogo我们没有设置铸币权限。so,把小狐狸账号切换到 test账号
重新执行,ok,交易成功。
5.查看币的总量,点击 totalSupply
去掉18个0,总量10000,没错。
6.测试下转账方法
使用当前小狐狸账户(test账号)来给 hhhhh 账号转500个CTB,在 transfer 后面的框中输入:0x83B109CF083f0c8Bcc9ab07aF964B135Df325771,500000000000000000000,点击transfer按钮,
我们查看小狐狸的test账号,原来应该是有10000个CTB的,转账500个成功后,剩余 9500个。
查看hhhhh账号的CTB,没有CTB,先添加代币
查看CTB余额,果然是500个
5.发布源代码
合约部署测试完成后,我们打开ETH区块链浏览器,搜索我们发的token,CTB,注意,这次发的token合约地址是0x120d5ce8be6f65e51776086aefbb3f83b491b33c
搜索的时候你可能会发现有两个 CTB,因为有一个是我测试的时候发的。
点击合约地址后,然后选择Contract选项,看不到我们的源代码,并看到 有Verify And Publish,没错,是因为我们还没有 上传代码并开源。
点击Verify And Publish,选择 编译器类型、solidity版本、开源证书类型,点击继续
上传文件:
上传完文件后,拉到最底部,进行人机身份验证后,点击Verify And Publish
等待一会,ok,源代码上传完成。
这样,整个合约就部署发布完成了。出了在remix中调用方法外,还可以在区块浏览器中调用,搜索刚刚发布的币 CTB,打开后 会看到 有Read Contract 和 Write Contract
- Read Contract 是暴漏出的可读变量和可读方法,不用连接钱包,不会消耗GAS
- Write Contract 是修改的变量和修改的方法,要连接钱包,会消耗GAS
这就是我们发布的 CTB 币,我们实现了标准的ERC20协议中的接口。
炒币不如了解怎么发币,知其然还要知其所以然,很NICE哦。