Quiero acceder e interactuar con un contrato implementado. Mi restricción: Conocer la API (funciones, campos), pero no la implementación.
Estaba mirando la documentación de Ethereum "Acceso a contratos y transacciones" ( http://ethdocs.org/en/latest/contracts-and-transactions/accessing-contracts-and-transactions.html ).
Tienen este 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"})
Sin embargo, esto requiere saber la ejecución del contrato, lo que no tiene sentido para mí.
Gracias por cualquier ayuda.
Todo lo que necesita es la dirección del contrato y la representación JSON de la interfaz binaria de la aplicación.
Para obtener el ABI:
> 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"
}]
Entonces, sin conocer la implementación pero solo la dirección y el ABI, debería poder ejecutar el siguiente comando:
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"})