Web3.py:如何在没有源代码的情况下调用令牌函数

时间:2019-06-10 17:37:18

标签: python ethereum web3

我使用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,但实际上并未调用合同。有提示吗?

1 个答案:

答案 0 :(得分:0)

"stateMutability": "pure"

这是错误的,这意味着默认情况下,web3.py将对节点进行本地调用,而不是发送实际交易。

我相信应该是这样:

"stateMutability": "nonpayable"

当然,在进行此更改后,请注意,您需要为web3.py提供一个from地址和一个私钥,以用来签署交易。