Web3.py: как вызывать функции токенов без исходного кода - PullRequest
0 голосов
/ 10 июня 2019

Я создал базовый MintableToken с платформой OpenZeppelin, но я потерял свой исходный код. Я хочу чеканить больше своих токенов и пытаюсь сделать это через 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 голосов
/ 10 июня 2019
"stateMutability": "pure"

Это неправильно и означает, что по умолчанию web3.py будет выполнять локальный вызов узла вместо отправки фактической транзакции.

Я считаю, что это должно быть так:

"stateMutability": "nonpayable"

Конечно, после этого изменения обратите внимание, что вам необходимо предоставить web3.py адрес from и закрытый ключ для подписания транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...