zoukankan      html  css  js  c++  java
  • 孤荷凌寒自学python第121天区块链035以太坊的 erc20代币05

    孤荷凌寒自学python第121天区块链035以太坊的 erc20代币05

    【主要内容】

    今天继续使用erc20标准规范按一篇网络博文的教程进行亲自敲打代码来写一个可以发行代币的智能合约。学习共用时31分钟。

    (此外整理作笔记花费了约52分钟)

    详细学习过程见文末学习过程屏幕录像。

    【学习笔记】

    一、经过努力,没有完全理解符合erc20标准的approve()函数与approveAndCall()区别

    https://mp.weixin.qq.com/s/foM1QWvsqGTdHxHTmjczsw

    此博文进行了详细的讲解,无奈基础比较差,没有完全理解,但就已大概理解的部分,笔记 如下,恳请高手指导:

    (一)如果只在合约中定义了符合 erc20标准的approve()函数,那么,调用合约的授权节点(我就直接称之为“用户节点”)(就是说准备使用某个服务智能合约的节点,现在授权另一个节点——一般就是指提供智能服务的服务合约节点)需要先进行授权发出,然后服务智能合约授受授权,然后此节点再发送真实要求提供服务的智能合约进行处理的数据。

    这种情况下,真正要使用服务合约的用户节点,其实是进行了两次交易(事务),这可能面临多次付费gas。

    (二)approveAndCall()函数不在erc20标准之内,但它提供了一种想要使用服务合约的服务的用户节点只需要发起一次交易(事务)的解决方法。

    这时,用户节点的授权发起与实际数据都在同一交易(事务)中发起即可。

    今天继续照做的

    https://www.jianshu.com/p/ce9417905b97

    的博文的例子就是使用的

    approveAndCall()函数。

    二、今天通过阅读官方文档,才知道solidity智能合约果然非常类似于Python类,是可以复杂的进行继承的

    “Solidity 支持多重继承。

    所有的函数调用都是虚拟的,这意味着最远的派生函数会被调用,除非明确给出合约名称。

    当一个合约从多个合约继承时,在区块链上只有一个合约被创建,所有基类合约的代码被复制到创建的合约中。”

    于是之前最开始编写的的基础的合约文件:Token.sol中的智能合约就是一个虚拟合约,因为其中没有任何有效函数代码,函数只有一个空架子。

    三、今天已完成最终的智能合约的代码。

    到今天为止【ghlhtoken.sol】文件已完成:

    ```

    pragma solidity ^0.4.4;

     

    import "StandardToken.sol";

     

    contract ghlhToken is StandardToken {

     

        //下一个函数没有函数命名名称,属于特殊的函数

        //此函数的基本作用是,如果收到了没有指明任何相关信息的代币发送给此合约,就将这些代币扔回去。

        //此种函数名叫:Fallback 函数

        function (){

            throw(); //这个单词的意思就是【扔】

        }

     

        //定义与自发行的币相关的一些属性

        string public name;                   //token名称: ghlhToken

        uint8 public decimals;                //小数位,此币种最小的单位,允许到小数点后第几位

        string public symbol;                 //标识,就是代币的缩写,如BTC

        string public version = 'H0.1';       //版本号

        //现在定义合约的建构函数

        function ghlhToken(

            uint256 _initialAmount,

            string _tokenName,

            uint8 _decimalUnits,

            string _tokenSymbol

        ){

            balances(msg.sender)=_initialAmount; //这意味着,部署合约的节点首先获得全部要发行的币的总量

            //balances这个状态变量,是在此合约继承的父合约中定义的。

            totalSupply=_initialAmount; //此状态变量记录下总共要发行的币的总量。

            name = _tokenName;                                   // token名称

            decimals = _decimalUnits;                            // token小数位

            symbol = _tokenSymbol;                               // token标识

        }

     

        /* 批准授权,然后调用接收合约 */

        //https://mp.weixin.qq.com/s/foM1QWvsqGTdHxHTmjczsw 此博文对此有比较详细的解释,不过仍然没有完全理解

        function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) {

            allowed[msg.sender][_spender] = _value;

            Approval(msg.sender, _spender, _value); //引发事件,广播一次授权事件正在发生。

     

            //下面的内容就完全不懂了。

            //调用你想要通知合约的 receiveApprovalcall 方法 ,这个方法是可以不需要包含在这个合约里的。

            //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData)

            //假设这么做是可以成功,不然应该调用vanilla approve。

     

            if(!_spender.call(bytes4(bytes32(sha3("receiveApproval(address,uint256,address,bytes)"))), msg.sender, _value, this, _extraData)) { throw; }

            return true;

        }

     

    }

     

    ```

    【个人自学感悟分享】

    其实很多时候,我们都只是被自我编织的谎言所蒙蔽了双眼进而失去了智慧的双眼,那就要马上重新检视自己,如同把自己这台电脑重新启动一次,开始全面自检——

    自己究竟有多优秀?

    最终你会如我一样,发现原来自己真的很优秀,远远比过去 自己所感知的自己优秀,更比别人评价的自己还要优秀!

    那我这么优秀,就直接骄傲得了?这当然不是,这么优秀是为了让自己相信,我可以掌控自己的命运,我可以掌控一切我自己的行动,只要是与我自己相关的,我都可以改变,都可以学会。

    我们真的很容易被他人的评价所影响进而为了别人的评价而生活,他人的评价是重要 的,是需要 参考 的,但那不是全部。

    更多的自学感悟,我将与大家在【就是要学】社群交流互动。

    我建立【就是要学】社群的初衷就是将渴望与我一样追求自主独立的生活的朋友 ,特别是还有大把青春可以去试错的年轻朋友聚集到一起,在这个人以类聚的时代,我们在一起, 互相交流,坚持每天成长,欢迎来到【就是要学】社群QQ群:646854445

    或访问:www.941xue.com

    【关于坚持自学的例行说明】

    最后例行说明下,我为什么要坚持自学。

    “如果我不曾见过太阳,我本可以忍受黑暗,然而阳光已使我的荒凉,成为更新的荒凉。”

    ——艾米莉·狄金森

    如果要问我对自己的前半生如何看待时,我想昨天和今天的答案都将完全不同。

    昨天的我,生活在荒凉的满意之中,自觉怡然自得,拿着包身包月的工资,听着仁慈的命令,过着几乎一成不变的生活;时而与周遭的人儿和睦互往,时而唇舌相抵斤斤计较,演出着生活的鸡毛蒜皮,工作的吹拉弹唱;忘我,忘我,才能融入这平和无奇的乐章中,迈着细碎的步伐,原地踏步。那时的我觉得这就是悠然自得的听天由命的平凡人生,也就是我的宿命了。

    可是某一天,我见到了不一样的太阳以及太阳下不一样的人生光景——那并不荒凉。

    今天的我,生活在荒凉的痛苦之中,自觉渴望改变,迈着不知所措的步伐,看着流逝的年华,睁着悔恨错失一切的双眼… …

    我知道我将再无法回到过去的我,只有改变才是唯一正确的方向。

    一、为什么一把年纪还在学习

    放弃很多去聚餐,去HI歌,去游玩,去看电影,去追剧……的时间,然后进行着这个年纪似乎已不应当再进行的学习,引来身边人们无尽的不解与鄙夷甚至可怜……

    但我不想放弃终身学习的誓言。

    因为——

    我对我今天的生活现状并不认同!

    罗伯特清崎告诉过我们,反省自己当下的生活是不是自己想要的,这难道不是最好的动力与答案?

    走过了大半生,然后才发现曾经、当下所正在进行的人生并不是自己想要的,那是一种怎样的体验?

    只有心中真切的感受才能回答这个问题,而任凭再丰富的语言也是无法描绘出来的。

    经历半生的跋涉,却发现走得并不正确,有多少人有勇气承认自己过去的一切都是错误的呢?

    而我愿意告诉过去的我:“你错了!”

    那么已经历半生错误,年岁之大又压于头顶,还有希望从这架的梯子的半端重新爬下,再蹒跚着爬上另一架梯子吗?

    我宁愿相信还有希望!

    这便是我为什么要继续坚持终身学习下去的全部理由。

    二、这个年纪还在学这些技术有意义吗

    纯的技术对这把年纪其实已没有意义。

    但兴趣可以超越意义。

    但技术可以引来思想的变革,这才是意义。

    投资自己的头脑 ,改革自己的思想,这是最保值,更长远的投资,过去我从来没有投资过,错过太多,那就从投资自己头脑开始吧。

    罗伯特清崎告诉我们,真正的富有是时间的富有;真正的自由是可以决定自己愿意做什么的自由。

    因为我愿意做我兴趣所在的事,所以我希望我有自由选择的那一天,虽然今天离那一天可能还是那么遥远,但我愿意相信,每天多赶几步,离希望就更近一步。

    再者,虽然我可能再已无法完全完整的掌握这些技术了,但技术本身却可以启迪心的觉醒,激发灵感,那么只要多了解一点,我相信我将离那个正离我而去跑得越来越快的未来更近一点,不至于被未知的那个未来抛弃得太远。

    于是我怎能放弃追逐求索的步伐?

    我要坚信:感觉太迟的时候,也许还不算太迟。

    感谢一直以来关注我,鼓励我的你!

    若不嫌弃这一个到了高龄才长大的可笑可叹的我,请不吝赐教。

    我的q号是:578652607,敬候你的指点。

    【同步语音笔记】

    https://www.ximalaya.com/keji/19103006/269622297

    【学习过程屏幕录屏】

    https://www.bilibili.com/video/av96559461/

    欢迎大家添加我为好友: QQ: 578652607
  • 相关阅读:
    idea添加自定义插件仓库 灵狐插件、阿里代码规约插件安装&idea插件推荐
    常用版本名称含义:SNAPSHOT->alpha->beta->release->GA等
    Ambari Centos7离线安装教程详细指导(参考)
    JDK11变化详解&JDK8升级JDK11详细指南
    idea jdk8、jdk9、jdk11、jdk12并自由切换
    idea java EclipseFormatter代码格式化模板
    java基础对象浅复制和深复制(基础知识)
    斐讯路由器L(联)B(壁)K-码兑换包安全下车通道(图文教程)
    SipDroid +miniSIPServer搭建SIP局域网语音通话(一)
    Android Studio 找不到EventBus/ButterKnife等第三方包解决方案
  • 原文地址:https://www.cnblogs.com/lhghroom/p/12513299.html
Copyright © 2011-2022 走看看