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

    【主要内容】

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

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

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

    【学习笔记】

    一、感觉基本理解了之前没有完全明白的智能合约引发的事件的日志记录的一些问题

    参考的学习博文:https://www.jianshu.com/p/131c07c6f72f(讲述事件的部分)

    1.区块链中触发的事件,除了可以供全网监听外,其实也记录在日志中,但日志在哪儿?不像中心化的应用那样,有中心化的数据库来存储,之前一直不明白这些日志到底存储在哪儿。

    从上面的博文中的,摘录如下内容:

    “在介绍事件前,我们先明确事件,日志这两个概念。事件发生后被记录到区块链上成为了日志。总的来说,事件强调功能,一种行为;日志强调存储,内容。

    事件是以太坊EVM提供的一种日志基础设施。事件可以用来做操作记录,存储为日志。也可以用来实现一些交互功能,比如通知UI,返回函数调用结果等。

    当定义的事件触发时,我们可以将事件存储到EVM的交易日志中,日志是区块链中的一种特殊数据结构。日志与合约关联,与合约的存储合并存入区块链中。只要某个区块可以访问,其相关的日志就可以访问。但在合约中,我们不能直接访问日志和事件数据(即便是创建日志的合约)。”

    这段话中,虽然也有些许不能完全明白的地方,但总体算是明白了——日志也保存在那些区块中(就是那些存储着交易信息的组成区块链的一个个区块)。

    2.区块链中的日志记录至少分成了两个区域,一个是可以快速被检索的topic区域,另一个是普通的日志data部分。

    摘录笔记如下:

    增加了indexed的参数值会存到日志结构的Topic部分,便于快速查找。而未加indexed的参数值会存在data部分,成为原始日志。需要注意的是,如果增加indexed属性的是数组类型(包括string和bytes),那么只会在Topic存储对应的数据的web3.sha3哈希值,将不会再存原始数据。因为Topic是用于快速查找的,不能存任意长度的数据,所以通过Topic实际存的是数组这种非固定长度数据哈希结果。要查找时,是将要查找内容哈希后与Topic内容进行匹配,但我们不能反推哈希结果,从而得不到原始值。

    二、今天继续逐字母敲打书写作为基础的那个智能合约的内容。

    到今天为止【Token.sol】文件已完成的代码如下:

    ```

    pragma solidity ^0.4.4;

     

    //下面定义的是最基本的合约框架,感觉直接照搬了erc20标准接口中的那些 定义

    contract Token{

        /// @return 返回此代币要发行的总量的函数方法(只是一个空壳)

        function totalSuply() constant returns (uint256 supply){}

        //constant修饰关键词注明此函数是一个常量函数——意味着承诺自己不修改区块链上任何状态

     

        /// @param _owner 要查询的地址

        /// @return 返回对应地址的代币余额,是指eth的余额吗?

        function balanceOf(address _owner) constant returns(uint256 balance){}

     

        /// @param _to 调用此合约的节点(msg.sender)要将代币发送给哪个节点地址

        /// @param _value 此次交易要发送多少代币,是指eth吗?

        /// @return 此函数返回的是,此次交易是否完成成功。

        function transferFrom(address _to,uint256 _value) returns(bool success){}

     

        /// @notice 此函数用于调用此合约的节点委托授权另一个节点地址(可能是当前合约或另一个合约吗?)可以动用自己多少token

        /// @param _spender 获得调用此合约的节点(msg.sender)授权的一个节点地址。

        /// @param _value 获得了多少token的授权,指的是eth吗?

        /// @return 返回本次委托授权操作是否成功。

        function approve(address _spender,uint256 _value) returns (bool success){}

     

        /// @notice 此函数用于查询一次授权的双方(发起委托授权的节点与接受委托授权的节点)当前授权token的可用余额(就是说接受授权节点还可以动用的实际token数量)

        /// @param _owner 发起委托授权的节点地址

        /// @param _spender 授受委托授权的节点地址

        /// @return 返回剩下的可用的授权token数量

        function allowance(address _owner,address _spender) returns(uint256 remaining){}

     

        //当出现发送代币的事件时,下面事件被触发。

        event Transfer(address indexed _from,address indexed _to,uint256 _value);

        //在事件的参数中,有两个添加了indexed修饰关键词,参照博文:https://www.jianshu.com/p/131c07c6f72f

        //解释如下 :

        //增加了indexed的参数值会存到日志结构的Topic部分,便于快速查找。而未加indexed的参数值(anonymous 关键词)会存在data部分,成为原始日志。需要注意的是,如果增加indexed属性的是数组类型(包括string和bytes),那么只会在Topic存储对应的数据的web3.sha3哈希值,将不会再存原始数据。因为Topic是用于快速查找的,不能存任意长度的数据,所以通过Topic实际存的是数组这种非固定长度数据哈希结果。要查找时,是将要查找内容哈希后与Topic内容进行匹配,但我们不能反推哈希结果,从而得不到原始值。

        //最多只能给事件的三个参数添加Indexed修饰词。

     

        //当出现一个节点授权另一个节点地址(可能是合约所在的节点地址?)进行指定数量的代币处置权时,下面的事件被触发

        event Approval(address indexed _owner,address indexed _spender,uint256 _value);

        //_owner表示发起授权请求的节点地址;_spender表示接受授权请求的节点地址;_value表示授权可以处置的代币的最大数量。

    }

     

     

    ```

    三、今天搜寻到的详细讲解与eth智能合约相关子领域知识的博文汇总备忘

    1.讲解solidity语言修饰关键词的博文:

    https://blog.csdn.net/lj900911/article/details/83037673

    2.solidity语言的中文版文档

    https://solidity-cn.readthedocs.io/zh/develop/contracts.html

    3.下面这位博主专门详细摘录汇总的solidity知识

    https://www.cnblogs.com/zhizaixingzou/p/10122356.html

    4.我关注了这位简书写手:

    https://www.jianshu.com/u/e372dabaafaf

    【学习后记】

    终于经过一个多月的学习,到今天我才从一个站在区块链大门外的门外人,将眼睛挤进门缝里,得以窥见区块链的未来的一鳞半爪,感慨到它的伟岸与强势。过去我们的存储与记录都在中心化机构的手中,以致于无数科幻小说中给我们展现的都是那样一个没有光明的被中心化的阴影所笼罩的可怕未来,而如今,所有的一切都可以去掉那个不智能会变化成什么可样子的中心,未来也许将会更加光明得多。

    【今天给大家分享的这些年我的自学感受】

    其实我们没有看清这个世界。

    从小我们就认为学习是父母逼我们去的,也许你的孩子现在还在重复你昨天的故事,孩子小,他们视野小,看不清这个世界本来的事实,但我们长大了,就看清了吗?恐怕没有。

    过去,和多数人一样,我没有清醒地从那个所谓的上帝视角来看这个世界,于是,那时在我眼里,世界是这样的:

    1.我要做的所有事都是别人需要我做的,所以我才要做。

    2.我出身不好,家境不好,智商情商都不如人,所以这辈子能做到今天这样,已经很不错了,我要知足长乐。

    3.江山易改本性难移,我生来就这个样子了(多数时候是指性格),我反正就这样过下去吧,有一口饭吃就行。

    4.别人成功嘛,那是别人是官二代,富二代,有关系……

    ……

    你是不是要惊呼——感觉以上想的简直和我一样啊,甚至和周围的人也一样。

    其实是我们自己给自己编造了很多的谎言以进行自我欺骗罢了,上面的话没有错,但不是绝对正确,当我终于明白这一点之后,我看到了一个完全不同的世界,知道了一些颠覆以上那些谎言的普通人,于是我们其实只是被自欺欺人的谎言蒙蔽了智慧的双眼罢。

    当然你可以要问,那你看到了另一个不同的世界,你就马上成功了吗?

    当然还没有,不过将来一定会的,纵使我已年岁一大把,我坚信要是成功也可以速成,那这个世界一定是假的,这才是真理!我们被各种欺名盗世的“速成”害得不浅哪!

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

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

    或访问:www.941xue.com

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

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

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

    ——艾米莉·狄金森

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

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

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

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

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

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

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

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

    因为——

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

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

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

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

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

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

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

    我宁愿相信还有希望!

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

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

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

    但兴趣可以超越意义。

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

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

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

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

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

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

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

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

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

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

    【同步语音笔记】

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

    【学习过程屏幕录屏】

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

    欢迎大家添加我为好友: QQ: 578652607
  • 相关阅读:
    转:SkipList跳表
    git操作
    JAVA小工具打包
    Java数字证书操作
    mysql创建数据库和用户
    解决node-sass安装不了的问题
    vscode + angular
    ng2 quickstart-primeng
    ng2 quickstart
    使用淘宝的npm代理下载模块
  • 原文地址:https://www.cnblogs.com/lhghroom/p/12493963.html
Copyright © 2011-2022 走看看