Web3.py(v5.29.0)支持外部模块

利用外部模块可构建自定义函数或者在你的 web3 实例中导入第三方插件

利用外部模块构建自定义函数或者在你的 web3 实例中导入第三方插件

最新版Web3.py (v5.29.0) 支持外部模块!利用外部模块,可以自定义函数或将第三方插件导入 Web3 实例。这个功能可能是web3.py集成一次性的非标准的JSON-RPC方法或者整个L2 API的一种优雅的方法。

用法

有几种方法引入外部模块用:

1)在实例化 Web3.py 实例时引入:

from web3 import Web3, HTTPProvider
from my_custom_modules import ExampleModule

w3 = Web3(
   HTTPProvider(...),
   external_modules={'example': ExampleModule}
)

w3.example.example_method()

2)或者,在 Web3.py 实例上用attach_modules方法:

w3.attach_modules({'example': ExampleModule})

w3.example.example_method()

创建外部模块

外部模块只需是一个类。如果需要引用父 Web3 实例,它会作为__init__函数的第一个也是唯一的参数传入。下面是一个简单的示例,它包含一个模块 (HoopersModule) ,其中一个子模块(ShaqModule)使用了Web3例:

import random

class HoopersModule():                       
    def set_strategy(self):
        print('foul!' if random.choice([True, False]) else 'flop!')

class ShaqModule():
    def __init__(self, w3):
        self.w3 = w3

    def print_balance(self):
        wei_balance = self.w3.eth.get_balance('shaq.eth')
        print(self.w3.fromWei(wei_balance, 'ether'))

w3.attach_modules({'hoopers': (HoopersModule, {'shaq': ShaqModule})})

w3.hoopers.set_strategy()
# flop!

w3.hoopers.shaq.print_balance()
# 0.271887362722036121

关于中间件的说明

如简介中所述,外部模块是在Web3实例中引入新 API 的好方法。但是,有些情况更适合用中间件。比如果你想为每个现有的 RPC 调用都添加一些行为,那么创建一些自定义中间件可能更合适。

安全第一!

在考虑第三方模块时,请谨慎再谨慎,只用那些你绝对信任的!

原文链接:https://snakecharmers.ethereum.org/web3-py-patterns-external-modules/

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
一个程序猿
一个程序猿
江湖只有他的大名,没有他的介绍。