zoukankan      html  css  js  c++  java
  • 孤荷凌寒自学python第115天区块链029以太坊智能合约008

    【主要内容】

    今天继续研究使用python来自己部署的智能合约进行交互,试图解决昨天遇到的问题,但我又失败了。学习共用时37分钟。

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

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

     

    【学习笔记】

    一、定位了昨天的错误原因

    signed_txn = w3.eth.account.signTransaction(txn_dict, wallet_private_key)

    昨天的调试,错误在上一行代码,昨天 以为是提示我的钱包的私钥有误,今天认真阅读错误提示,发现,真正的错误是前面的交易(事务)信息的字典对象中的第一个字段“to”的值 没有通过验证。

    经过多次测试,始终认定我的“to”字段的值——即是我自己部署的智能合约的地址是非法的。

    然后定位到了web3模块中用于进行检测值合法性的函数如下:

    [transactions.py]

    ```

    def assert_valid_fields(transaction_dict):

        # check if any keys are missing

        missing_keys = REQUIRED_TRANSACITON_KEYS.difference(transaction_dict.keys())

        if missing_keys:

            raise TypeError("Transaction must include these fields: %r" % missing_keys)

     

        # check if any extra keys were specified

        superfluous_keys = set(transaction_dict.keys()).difference(ALLOWED_TRANSACTION_KEYS)

        if superfluous_keys:

            raise TypeError("Transaction must not include unrecognized fields: %r" % superfluous_keys)

     

        # check for valid types in each field

        valid_fields = apply_formatters_to_dict(TRANSACTION_VALID_VALUES, transaction_dict)

        if not all(valid_fields.values()):

            invalid = {key: transaction_dict[key] for key, valid in valid_fields.items() if not valid}

            raise TypeError("Transaction had invalid fields: %r" % invalid)

     

    ```

    此函数的最后一个检测项:

        valid_fields = apply_formatters_to_dict(TRANSACTION_VALID_VALUES, transaction_dict)

    得到的valid_fields变量中指明对交易信息字段中的”to”字段的值认证为false,非常让人无奈,不知道原因在哪儿。

    推测是我可能需要对地址的编码进行基本的处理(最开始自己手动写完整的Python区块链代码时做的那样),但找不到任何可用的资料。

    最后,万般无奈之下我注释掉了上面函数的最后一次检测的以下几句代码,放弃让其对地址进行检测:

        # check for valid types in each field

        valid_fields = apply_formatters_to_dict(TRANSACTION_VALID_VALUES, transaction_dict)

        #if not all(valid_fields.values()):

        #    invalid = {key: transaction_dict[key] for key, valid in valid_fields.items() if not valid}

        #    raise TypeError("Transaction had invalid fields: %r" % invalid)

     

    这次测试,签名的地方是被强制通过了。

    但在发送签名后的交易信息时,又发生了反复提示我gas设置值不合理的错误,提示大概如下:

    ValueError: {'code': -32000, 'message': 'insufficient funds for gas * price + value'}

    或:

    ValueError: {'code': -32000, 'message': 'intrinsic gas too low'}

    不管怎么调整测试,都无法通过,这次去搜寻真正在验证此值的源代码也没有定位成功,于是在此句代码处完全卡住。

    感觉这个gas的设置还不是一般的复杂,主要原因应当是我对有关gas的三个量还没有真正的完全理解 。

     

    二、后续打算

    到今天为止,其实我已经亲自书写过一个Python独立完成的区块链测试网络;也通过solidity语言成功部署了一个智能合约。当然按当前所学的这个博文指明的教程,到这儿,却卡在了一些未知的问题上,我不得不思考,我要怎么办呢?

    反复思考之后,认为遇到拦路虎是正常的,现在正是发挥百折不挠的精神的时候了,为什么不呢?

     

     

    【学习后记】

    今天遭遇了重大挫折,当然顺遂的人生是不可能存在的,失败是常事,我要相信正因为这个世界上有太多太多的无奈的失败,追求卓越才变得魅力十足,我有信心坚信如过往我完全自学编程最终的成功那样,我定会战胜这些困难的。

     

    我从编程世界的完全门外汉走到今天,每一步是很缓慢且不断踩坑,但是这是完全自学必经的道路,那么不自学不是更好吗?我非常赞同一句话——真正的学习就是自学。

    过去20年我积累完整的自学方法论,历经实践验证,我正准备在我创建的【就是要学 终身成长】社群中与大家分享讨论这一话题,欢迎立志于终身学习,终身成长的朋友们加入社群,共同交流学习。Qq群号码:646854445

    或访问:www.941xue.com

     

     

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

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

     

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

    ——艾米莉·狄金森

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

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

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

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

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

     

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

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

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

    因为——

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

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

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

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

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

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

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

    我宁愿相信还有希望!

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

     

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

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

    但兴趣可以超越意义。

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

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

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

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

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

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

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

     

    【同步语音笔记】

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

     

    【学习过程屏幕录屏】

    链接:https://pan.baidu.com/s/1ylhKUZBooggQWUwCZXh0zA

    提取码:euuw

     

    欢迎大家添加我为好友: QQ: 578652607
  • 相关阅读:
    『cs231n』作业2选讲_通过代码理解优化器
    谷歌(Google)学术镜像,谷歌镜像
    官网实例详解-目录和实例简介-keras学习笔记四
    深度挖坑:从数据角度看人脸识别中Feature Normalization,Weight Normalization以及Triplet的作用
    NIPS 2018 | 程序翻译新突破:UC伯克利提出树到树的程序翻译神经网络
    烧脑!CMU、北大等合著论文真的找到了神经网络的全局最优解
    win7+cuda+anaconda python+tensorflow-gpu+keras安装成功版本匹配汇总
    Delphi 在DLL中使用DevExpress控件时出错解决办法
    让文件添加鼠标右键菜单
    phpStudy模式下安装ssl证书,详细版
  • 原文地址:https://www.cnblogs.com/lhghroom/p/12458664.html
Copyright © 2011-2022 走看看