self.account_private_key = os.environ[‘METAMASK_PRIVATE_KEY’]
self.max_fee_per_gas = self.w3.toWei(‘250’, ‘gwei’)
self.max_priority_fee_per_gas = self.w3.eth.max_priority_fee
self.chain_id = self.w3.eth.chain_id
方法2:__create_web3_instance()
可以了解__create_web3_instance()方法内部发生了什么 。
__create_web3_instance()是一个静态方法,因为它不需要来自WalletManager类的任何信息 。它从环境中获取Infura API密钥和API密钥秘密,然后将它们编码为基本身份验证令牌 。它在Sepolia测试网上为项目准备了适当的端点,然后用所有信息实例化了Web3库中的一个Web3对象 。这个对象将允许通过一个方便的Python接口调用Infura API(而不是构造JSON-RPC请求并解析结果) 。
复制
@staticmethod
def __create_web3_instance():
infura_api_key = os.environ['INFURA_API_KEY']
infura_api_key_secret = os.environ['INFURA_API_KEY_SECRET']
data = https://www.isolves.com/it/cxkf/yy/Python/2023-05-25/f'{infura_api_key}:{infura_api_key_secret}'.encode('ascii')
basic_auth_token = .b64encode(data).strip().decode('utf-8')
infura_sepolia_endpoint = f'https://sepolia.infura.io/v3/{infura_api_key}'
headers = dict(Authorization=f'Basic {basic_auth_token}')
return web3.Web3(web3.HTTPProvider(infura_sepolia_endpoint, request_kwargs=dict(headers=headers)))
方法3:get_balance()
下一个是get_balance()方法 。
这是一种极其简单的方法 。它只调用Web3对象的w3.eth.get_balance()方法并传递帐户 。eth.get_balance()总是返回Wei的结果,Wei通常太小 。而这种方法提供了将结果转换为另一种面额(例如Gwei或Ether)的选项 。它通过调用Web3实例再次提供的w3.fromWei()方法来实现 。需要注意的是,不必使用私钥来检查余额 。
复制
balance = self.w3.eth.get_balance(selpytf.account)
if unit != 'wei':
return self.w3.fromWei(balance, unit)
方法4:send_eth()
最后但同样重要的是send_eth()方法 。这里有很多内容,所以可以将其分成多个块 。
首先,send_eth()转换要发送给Wei的金额(如果需要),然后它获取该帐户的交易计数并将其存储为nonce 。nonce允许在需要时覆盖挂起的交易 。
复制
def send_eth(self, target_account, amount, unit='wei'):
if unit != 'wei':
amount = self.w3.toWei(amount, unit)
nonce = self.w3.eth.get_transaction_count(self.account)
接下来,它构造一个交易对象 。最重要的字段是from(加密钱包的账户)、to(交易的接收者)和value(要发送多少钱) 。然后,还要决定支付多少Gas,Gas越多,验证器包含交易的可能性就越大 。chainId标识运行这一交易的网络和几个管理字段(空数据和类型) 。
复制
tx = {'nonce': nonce,
'maxFeePerGas': self.max_fee_per_gas,
'maxPriorityFeePerGas': self.max_priority_fee_per_gas,
'from': self.account,
'to': target_account,
'value': amount,
'data': b'',
'type': 2,
'chainId': self.chain_id}
tx['gas'] = self.w3.eth.estimate_gas(tx)
这里有一笔交易,可以发送吗?先不要这么快发送 。首先,需要采用私钥签名 。这是防止其他人从用户的账户转账的原因 。使用私钥签署交易允许验证器确认私钥与帐户的公钥相对应 。
复制
signed_tx = self.w3.eth.account.sign_transaction(tx, self.account_private_key)
现在可以将交易作为原始交易发送 。这意味着Infura永远不会看到用户的私钥,它不能改变交易或将其转账到另一个账户 。这就是区块链的魔力 。在发送交易后,返回一个哈希码并等待交易完成 。如果结果的状态为1,则一切正常 。如果不是,代码将引发异常 。
复制
tx_hash = self.w3.eth.send_raw_transaction(signed_tx.rawTransaction)
result = self.w3.eth.wait_for_transaction_receipt(tx_hash)
if result['status'] != 1:
raise RuntimeError('transaction failed: {tx_hash}')
这就是以一种非常基本但安全的方式与区块链交互所需要的全部内容 。
结论:用Infura开始Web3之旅
即使对于一名经验丰富的程序员来说,从头开始进入Web3的世界也可能令人望而生畏 。而在逐步的学习中学到了很多技巧 。在大多数情况下,人们知道自己还有很多内容要学 。Infura通过提供可靠的API、出色的指导以及与生态系统的其他组件(例如MetaMask和web3.py库)的强大集成,使其变得简单 。如果人们处于类似的位置,希望学习Web3开发,或者甚至想要开始Web3的职业生涯,那么强烈建议从Infura开始 。
推荐阅读
- 懂八门语言、能理解上下文的AI内容审核来了!微软推出新产品:能检测文本和图片
- 酥油茶是什么做的 酥油茶的做法和配方最新介绍
- 安溪铁观音怎么样 安溪铁观音好处和功效一览
- 玫瑰花和什么搭配泡水好 玫瑰花泡水的最佳搭档
- 吃海带有什么好处和坏处 吃海带的利弊
- 小叶紫檀|价值百万的紫檀红木家具和你有缘分吗?
- 玛瑙|民间藏家(和田玉)
- |华表奖男星怼脸生图:全部是普男,苏有朋和韩庚发福,王一博脸肿
- 黄秋生|黄秋生金像奖上拥抱刘青云,刘先生满脸的敷衍和抗拒太明显了
- 张译|30岁杨紫美回颜值巅峰,生图变瘦变美,鞋子和体态成槽点!
