Я хочу посмотреть контракт Solidity с помощью браузера Mist. Я знаю, как это сделать, и ему нужен адрес и json. У меня есть адрес, но у меня нет json. У меня есть исходный код.
Могу ли я сгенерировать json из исходного кода и/или адреса Ethereum?
JSON называется ABI.
Вам действительно нужен исходный код, как и у вас, и один из способов получить ABI — вставить его в Remix IDE , скомпилировать, а затем нажать кнопку «ABI», чтобы скопировать ABI в буфер обмена.
Если контракт проверен в Etherscan, следующий сценарий извлекает ABI и сохраняет его в файл JSON. Используйте это как
$ python fetch_abi.py <contract address> -o <target JSON file>
fetch_abi.py
#!/usr/bin/python
import argparse
import requests
import json
# Exports contract ABI in JSON
ABI_ENDPOINT = 'https://api.etherscan.io/api?module=contract&action=getabi&address='
parser = argparse.ArgumentParser()
parser.add_argument('addr', type=str, help='Contract address')
parser.add_argument('-o', '--output', type=str, help="Path to the output JSON file", required=True)
def __main__():
args = parser.parse_args()
response = requests.get('%s%s'%(ABI_ENDPOINT, args.addr))
response_json = response.json()
abi_json = json.loads(response_json['result'])
result = json.dumps({"abi":abi_json}, indent=4, sort_keys=True)
open(args.output, 'w').write(result)
if __name__ == '__main__':
__main__()
Вот как вы получаете abi
с помощью вашего локального solc
компилятора:
solc filename.sol --abi
Вам также нужен bin
код для развертывания контракта, который вы можете получить следующим образом:
solc filename.sol --bin
Если вам нужен комбинированный вывод solc (например, для четности), где bin
часть abi
строки json, используйте это:
solc filename.sol --combined-json abi,bin
РЕДАКТИРОВАТЬ
На Compile
вкладке (правое верхнее меню) просто нажмите на Details
.
СТАРЫЙ МЕТОД
В новой версии браузера Solidity вы можете найти Interface
значение, нажав наContract details (bytecode, interface etc.)
Contract details (bytecode, interface etc.)
находится? @NineCattoRulesCompile
вкладке просто нажмите наDetails
Вы можете получить ABI json из API etherscan, как показано ниже.
var Web3 = require('web3');
var web3 = new Web3(new Web3.providers.HttpProvider());
var version = web3.version.api;
$.getJSON('https://api.etherscan.io/api?module=contract&action=getabi&address=0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359', function (data) {
var contractABI = "";
contractABI = JSON.parse(data.result);
if (contractABI != ''){
var MyContract = web3.eth.contract(contractABI);
var myContractInstance = MyContract.at("0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359");
var result = myContractInstance.memberId("0xfe8ad7dd2f564a877cc23feea6c0a9cc2e783715");
console.log("result1 : " + result);
var result = myContractInstance.members(1);
console.log("result2 : " + result);
} else {
console.log("Error" );
}
})
Перейдите в EtherScan> введите адрес контракта> щелкните код в заголовке раздела вкладки> прокрутите вниз, чтобы найти ABI контракта> щелкните значок «Копировать», чтобы скопировать его.
Просто перейдите на http://remix.ethereum.org/ и вставьте исходный код контракта. Нажмите «Начать компиляцию», и примерно через несколько секунд ваш контракт будет обработан. Нажмите кнопку «Подробнее» (находится в правом верхнем углу). Во всплывающем окне вы найдете ABI, METADATA, BYTECODE и т. д.
Дэйвид
эт