zoukankan      html  css  js  c++  java
  • 入门区块链,从发币开始

    最近币圈新闻比较多,也炒币这么久了,然而却不知道币怎么来了,作为程序猿的我们,有点丢人,话不多说,我们来发一个币,名字叫 CodeToken,简称CTB。

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

    准备工具

    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哦。

    文章持续更新,可以微信搜一搜「 码咖 」第一时间阅读

  • 相关阅读:
    接口默认值引发Qt调用DLL异常
    360杀毒引发的DLL调用异常
    VS2012基于QT5.1自定接口及插件并实现动态加载
    Qt调用C的DLL
    Qt动态多语言的实现(VS2012开发)
    Qt在VS2012中引用QtWidgets时报GLES2/gl2.h无法打开错误的解决办法
    php判断某字符串是否不以数字或其他特殊字符开头
    mysql的数据类型int、bigint、smallint 和 tinyint取值范围
    28个jQuery性能优化的建议
    主题:iframe高度的自适应
  • 原文地址:https://www.cnblogs.com/xbq8080/p/14029634.html
Copyright © 2011-2022 走看看