孤荷凌寒自学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
原文地址:https://www.cnblogs.com/lhghroom/p/12458664.html