Web3.py : 如何在没有源码的情况下调用token函数
Web3.py : How to call token functions without source code
我使用 OpenZeppelin 框架创建了一个基本的 MintableToken
,但我丢失了源代码。我想铸造更多我的代币,我正在尝试通过 web3.py
这是我当前的代码
web3 = Web3(Web3.HTTPProvider("https://mainnet.infura.io/v3/MYAPI"))
web3.eth.defaultAccount = 'MYACC_ADDR'
abi = [
{
"constant": False,
"inputs": [
{
"name": "_to",
"type": "address"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "mint",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": False,
"stateMutability": "pure",
"type": "function"
}
]
address = web3.toChecksumAddress('CONTRACT_ADDR') # FILL IN YOUR ACTUAL ADDRESS
contract = web3.eth.contract(address=address, abi=abi)
print(contract.functions.mint('MYACC_ADDR', 200).call())
运行 此代码通过 python3 mint.py
打印 True
,但实际并未调用合约。有什么建议吗?
"stateMutability": "pure"
这是错误的,这意味着默认情况下 web3.py
将对节点进行本地调用,而不是发送实际交易。
我认为应该是这样的:
"stateMutability": "nonpayable"
当然,更改后请注意,您需要提供 web3.py
from
地址和用于签署交易的私钥。
我使用 OpenZeppelin 框架创建了一个基本的 MintableToken
,但我丢失了源代码。我想铸造更多我的代币,我正在尝试通过 web3.py
这是我当前的代码
web3 = Web3(Web3.HTTPProvider("https://mainnet.infura.io/v3/MYAPI"))
web3.eth.defaultAccount = 'MYACC_ADDR'
abi = [
{
"constant": False,
"inputs": [
{
"name": "_to",
"type": "address"
},
{
"name": "_amount",
"type": "uint256"
}
],
"name": "mint",
"outputs": [
{
"name": "",
"type": "bool"
}
],
"payable": False,
"stateMutability": "pure",
"type": "function"
}
]
address = web3.toChecksumAddress('CONTRACT_ADDR') # FILL IN YOUR ACTUAL ADDRESS
contract = web3.eth.contract(address=address, abi=abi)
print(contract.functions.mint('MYACC_ADDR', 200).call())
运行 此代码通过 python3 mint.py
打印 True
,但实际并未调用合约。有什么建议吗?
"stateMutability": "pure"
这是错误的,这意味着默认情况下 web3.py
将对节点进行本地调用,而不是发送实际交易。
我认为应该是这样的:
"stateMutability": "nonpayable"
当然,更改后请注意,您需要提供 web3.py
from
地址和用于签署交易的私钥。