Я хочу получить доступ к развернутому контракту и взаимодействовать с ним. Мое ограничение: Знание API (функций, полей), но не реализации.
Я просматривал документацию Ethereum «Доступ к контрактам и транзакциям» ( http://ethdocs.org/en/latest/contracts-and-transactions/accessing-contracts-and-transactions.html ).
У них есть этот Web3.js
var source = 'contract Multiply7 { event Print(uint); function multiply(uint input) returns (uint) { Print(input * 7); return input * 7; } }';
var compiled = web3.eth.compile.solidity(source);
var Multiply7 = web3.eth.contract(compiled.Multiply7.info.abiDefinition);
var multi = Multiply7.at("0x0ab60714033847ad7f0677cc7514db48313976e2")
multi.multiply.sendTransaction(6, {from: "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a"})
Однако для этого требуется знать реализацию контракта, что для меня не имеет смысла.
Спасибо за любую помощь.
Все, что вам нужно, это адрес контракта и JSON-представление двоичного интерфейса приложения.
Чтобы получить АБИ:
> var source = 'contract Multiply7 { event Print(uint); function multiply(uint input) returns (uint) { Print(input * 7); return input * 7; } }';
undefined
> var compiled = web3.eth.compile.solidity(source);
undefined
> compiled.Multiply7.info.abiDefinition
[{
constant: false,
inputs: [{
name: "input",
type: "uint256"
}],
name: "multiply",
outputs: [{
name: "",
type: "uint256"
}],
payable: false,
type: "function"
}, {
anonymous: false,
inputs: [{
indexed: false,
name: "",
type: "uint256"
}],
name: "Print",
type: "event"
}]
Итак, не зная реализации, а только адрес и ABI, вы сможете выполнить следующую команду:
var Multiply7 = web3.eth.contract([{constant: false, inputs: [{name: "input", type: "uint256"}], name: "multiply", outputs: [{name: "", type: "uint256"}], payable: false, type: "function"}, {anonymous: false, inputs: [{indexed: false, name: "", type: "uint256"}], name: "Print", type: "event"}]);
var multi = Multiply7.at("0x0ab60714033847ad7f0677cc7514db48313976e2")
multi.multiply.sendTransaction(6, {from: "0xeb85a5557e5bdc18ee1934a89d8bb402398ee26a"})