我正在构建一个为用户创建钱包的应用程序.一个选项是web3.py中的web3.personal API,它有一个newAccount('passphrase')方法.该方法仅返回已创建帐户的地址.
我正在寻找的是一个类似于web3.js中的eth.accounts API的函数,它有一个create([entropy])方法.它返回一个带有"地址"," 私钥 "和其他详细信息的帐户对象.
我对以太坊和这种开发实践的想法很新,所以很乐意从你那里得到一些帮助.先感谢您.
我正在尝试使用本地私钥在带有 web3.py 的 python 中发送 ERC20 令牌。
使用此代码,我可以发送以太:
w3 = Web3(HTTPProvider('https://api.myetherapi.com/eth'))
signed_txn = w3.eth.account.signTransaction(dict(
nonce=w3.eth.getTransactionCount(from_address),
gasPrice=w3.eth.gasPrice,
gas=100000,
to=to_address,
value=12345,
data=b'',
),
private_key,
)
w3.eth.sendRawTransaction(signed_txn.rawTransaction)
Run Code Online (Sandbox Code Playgroud)
然后我也发现了这个,但是估计Gas总是出错,在我看来,我无法像这样指定我发送的地址或通过某种签名证明它是我的地址?
contract = w3.eth.contract(address=address, abi=EIP20_ABI, bytecode=bytecode)
contract.functions.transfer(to_address, 121212).transact()
Run Code Online (Sandbox Code Playgroud)
所以我有 JSON abi、字节码、地址和我的私钥,我可以用我找到的代码以某种方式构建一个工作脚本吗?
提前致谢!
在尝试从异步生成器聚合结果时,如下所示:
async def result_tuple():
async def result_generator():
# some await things happening in here
yield 1
yield 2
return tuple(num async for num in result_generator())
Run Code Online (Sandbox Code Playgroud)
我得到一个
类型错误:“async_generator”对象不可迭代
执行该async for行时。
但PEP 530似乎暗示它应该是有效的:
异步理解
我们建议允许将 async 用于内部列表、集合和字典推导式。等待 PEP 525 批准,我们还可以允许创建异步生成器表达式。
例子:
- 集合理解:{i async for i in agen()};
- 列表理解:[i async for i in agen()];
- 字典理解:{i: i ** 2 async for i in agen()};
- 生成器表达式:(i ** 2 async for i in agen())。
发生了什么,我如何将异步生成器聚合成一个tuple?
> w3.eth.syncing
AttributeDict({
'currentBlock': 5787386,
'highestBlock': 5787491,
'knownStates': 138355583,
'pulledStates': 138341120,
'startingBlock': 5787335,
})
> w3.eth.blockNumber
0
Run Code Online (Sandbox Code Playgroud)
我已经完成了完全同步,但块号始终为 0。
这些用于发送交易的 web3.py 方法之间的实际区别是什么?
w3.eth.sendTransaction({})w3.eth.sendRawTransaction(signed_txn.rawTransaction)