Metamask
如何使用 web3.py 和 Infura 發送交易?
我正在使用 Infura 與 Ropsten 測試網進行互動。我想將交易從一個帳戶發送到另一個帳戶,但以下程式碼不起作用:
w3 = Web3(Web3.HTTPProvider('InfuraUrl')) transaction = { 'from': 'accountAddress', 'to': 'accountAddress', 'value': w3.toWei(1, "ether"), 'gas': 2000000, 'chainId': 3 } w3.eth.sendTransaction(transaction)
我想我必須使用從 Metamask 獲得的私鑰。如果您知道如何使用本地私鑰發送交易,請提供幫助。
Infura 是一個公共託管節點。它無法解鎖您的本地帳戶。即使有辦法,也存在安全風險,因為任何人都可以連接到同一個節點並轉移您的資金。
為了通過 Infura 發送交易,您需要使用在本地簽署交易
web3.eth.sendRawTransaction()
。以下範例來自web3.py 文件:>>> transaction = { ... 'to': '0xF0109fC8DF283027b6285cc889F5aA624EaC1F55', ... 'value': 1000000000, ... 'gas': 2000000, ... 'gasPrice': 234567897654321, ... 'nonce': 0, ... 'chainId': 1 ... } >>> key = '0x4c0883a69102937d6231471b5dbb6204fe5129617082792ae468d01a3f362318' >>> signed = w3.eth.account.sign_transaction(transaction, key) >>> signed.rawTransaction HexBytes('0xf86a8086d55698372431831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a009ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9ca0440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428') >>> signed.hash HexBytes('0xd8f64a42b57be0d565f385378db2f6bf324ce14a594afc05de90436e9ce01f60') >>> signed.r 4487286261793418179817841024889747115779324305375823110249149479905075174044 >>> signed.s 30785525769477805655994251009256770582792548537338581640010273753578382951464 >>> signed.v 37 # When you run sendRawTransaction, you get back the hash of the transaction: >>> w3.eth.sendRawTransaction(signed.rawTransaction) '0xd8f64a42b57be0d565f385378db2f6bf324ce14a594afc05de90436e9ce01f60'
您可以嘗試使用 web3-hdwallet-provider為源自 12 字助記符的地址簽署交易。
const Web3 = require('web3'); const Web3HDWalletProvider = require('web3-hdwallet-provider'); const httpProvider = new Web3.providers.HttpProvider('InfuraUrl'); const mnemonic = 'YOUR PRIVATE KEY'; const web3 = new Web3HDWalletProvider(mnemonic, httpProvider) transaction = { 'from': 'accountAddress', 'to': 'accountAddress', 'value': w3.toWei(1, "ether"), 'gas': 2000000, 'chainId': 3} web3.eth.sendTransaction(transaction)
注意:注意不要暴露你的私鑰;改用文件路徑。