Получить аби контракта

В моем контакте есть несколько импортов и успешно развернут мой контракт. Это мой контрактный адрес0xc2d4d839001f9d985618a22b89155ea8d6550ae6

Как получить аби моих контрактов:

pragma solidity ^0.4.18;

import './DeveloperToken.sol';
import 'zeppelin-solidity/contracts/crowdsale/CappedCrowdsale.sol';
import 'zeppelin-solidity/contracts/crowdsale/RefundableCrowdsale.sol';

contract DeveloperCrowdsale is CappedCrowdsale, RefundableCrowdsale {

Я пробовал это:

var compiled = web3.eth.compile.solidity(contractaddress);

var code = compiled.code;
var abi = compiled.info.abiDefinition;

var contract = web3.eth.contract(abi);

Но это не работает. Как я могу получить abi моего смарт-контракта?

Ответы (2)

Сохраните исходный код в файле и используйте компилятор Solidity для создания ABI.

Вы можете установить его с помощью

npm install -g solc

или

yarn global add solc

а затем запустите его против вашего исходного кода

solcjs --abi contract.sol

Он сгенерирует ABI в вашем текущем каталоге.contract_sol_[ContractName].abi

Я попробовал это, это дает мне ошибку: solcjs --abi DeveloperCrowdsale.sol DeveloperCrowdsale.sol: 3: 1: ParserError: Источник «DeveloperToken.sol» не найден: файл изначально не предоставлен. импортировать './DeveloperToken.sol'; ^---------------------------^ DeveloperCrowdsale.sol:4:1: ParserError: Source "zeppelin-solidity/contracts/crowdsale/ CappedCrowdsale.sol" не найден: изначально файл не был предоставлен. импортировать 'zeppelin-solidity/contracts/crowdsale/CappedCrowdsale.sol'; ^---------------------------------------------------------------- ----------------^
DeveloperCrowdsale.sol:5:1: ParserError: Источник "zeppelin-solidity/contracts/crowdsale/RefundableCrowdsale.sol" не найден: файл изначально не предоставлен. импортировать 'zeppelin-solidity/contracts/crowdsale/RefundableCrowdsale.sol'; ^---------------------------------------------------------------- --------------------^

Простое решение для получения ABI — использовать Remix :

Например, если я немного изменю ваш код, чтобы он был следующим


pragma solidity ^0.4.18;

import 'https://github.com/OpenZeppelin/zeppelin-solidity/contracts/token/ERC20/ERC20.sol';
import 'https://github.com/OpenZeppelin/zeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol';
import 'https://github.com/OpenZeppelin/zeppelin-solidity/contracts/crowdsale/distribution/RefundableCrowdsale.sol';

contract DeveloperToken is ERC20 {

}   

contract DeveloperCrowdsale is CappedCrowdsale, RefundableCrowdsale {
}

Затем вы можете получить ABI в разделе сведений на вкладке компиляции, выполнив следующие простые шаги:

введите описание изображения здесь

Однако вы заметите, что между моими операторами импорта и вашими есть два отличия:

  1. Ремиксу нужен URL-адрес учетной записи github.
  2. Вы используете устаревшую версию библиотек OpenZeppelin.

Похоже, что у вас есть код из проекта Truffletruffle compile , и в этом случае, когда вы вызываете файл DeveloperCrowdsale.json, он будет создан в каталоге ../build/contracts. Этот JSON будет содержать ABI.

Да ты прав . Я использую трюфель для компиляции и развертывания контракта. Да, в сборке/контрактах есть файл DeceloperCrowdsale.json, который содержит следующий код pastebin.com/b9BskCAh