Я успешно развернул свой контракт в Kaleido, но у меня возникли проблемы с поиском правильной проверки. Вот исходный код развертывания контракта, и я проверил, что адрес, напечатанный последним оператором печати, появляется в моей цепочке блоков Kaleido:
from web3 import Web3
from web3.providers import HTTPProvider
from solc import compile_source
# Solidity source code
contract_source_code = '''
pragma solidity ^0.4.0;
contract Greeter {
string public greeting;
function Greeter() {
greeting = 'Hello';
}
function setGreeting(string _greeting) public {
greeting = _greeting;
}
function greet() constant returns (string) {
return greeting;
}
}
'''
compiled_sol = compile_source(contract_source_code) # Compiled source code
contract_interface = compiled_sol[':Greeter']
w3 = Web3(HTTPProvider("https://XXXXX:YYYYY@ZZZZZZZ.kaleido.io"))
contract_ = w3.eth.contract(
abi=contract_interface['abi'],
bytecode=contract_interface['bin'])
# note: when interacting with kaleido, gasPrice MUST be 0 (I think because of the consensus algorithm I chose)
# and it seems it doesn't matter what account this is sent from
construct_txn = contract_.constructor().buildTransaction({
'from': w3.eth.accounts[0],
'gas': 1728712,
'gasPrice': 0})
txn = w3.eth.sendTransaction(construct_txn)
tx_receipt = w3.eth.getTransactionReceipt(txn)
contract_address = tx_receipt['contractAddress']
print(contract_address)
Когда я пытаюсь проверить свой контракт, меня просят предоставить исходный код, имя контракта, версию компилятора и использовалась ли оптимизация.
Я использую следующее для запрошенного исходного кода
pragma solidity ^0.4.0;
contract Greeter {
string public greeting;
function Greeter() {
greeting = 'Hello';
}
function setGreeting(string _greeting) public {
greeting = _greeting;
}
function greet() constant returns (string) {
return greeting;
}
}
Я использую Greeter
в качестве названия контракта. solc --version
возвращает Version: 0.4.24+commit.e67f0147.Darwin.appleclang
, которые, как я обнаружил, были совершены 16 мая: https://github.com/ethereum/solidity/search?q=e67f0147&type=Commits.
Я испробовал все следующие комбинации для версии компилятора + включена оптимизация: {0.4.24, 0.4.24-nightly.2018.5.16} x {оптимизация включена, оптимизация отключена}, и ни одна из этих комбинаций не сработала. Я получаю следующую ошибку при попытке 0.4.24-nightly.2018.5.16, так как компилятор и оптимизация не включены .:
The compiled result does not match the input creation bytecode located at 0x4c94e89d5ec3125339906109f143673f40868df2.
Compilation failed: ["Warning: This is a pre-release compiler version, please do not use it in production.\n",":6:5: Warning: Defining constructors as functions with the same name as the contract is deprecated. Use \"constructor(...) { ... }\" instead.\n function Greeter() {\n ^ (Relevant source part starts here and spans across multiple lines).\n",":6:5: Warning: No visibility specified. Defaulting to \"public\". \n function Greeter() {\n ^ (Relevant source part starts here and spans across multiple lines).\n",":14:5: Warning: No visibility specified. Defaulting to \"public\". \n function greet() constant returns (string) {\n ^ (Relevant source part starts here and spans across multiple lines).\n"] .