Ich möchte auf einen bereitgestellten Vertrag zugreifen und mit ihm interagieren. Meine Einschränkung: Ich kenne die API (Funktionen, Felder), aber nicht die Implementierung.
Ich habe mir die Ethereum-Dokumentation "Zugriff auf Verträge und Transaktionen" angesehen ( http://ethdocs.org/en/latest/contracts-and-transactions/accessing-contracts-and-transactions.html ).
Sie haben diese 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"})
Dazu muss man aber die Vertragsdurchführung kennen, was für mich nicht nachvollziehbar ist.
Danke für jede Hilfe.
Sie benötigen lediglich die Vertragsadresse und die JSON-Darstellung des Application Binary Interface.
Um das ABI zu bekommen:
> 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"
}]
Ohne die Implementierung zu kennen, aber nur die Adresse und die ABI, sollten Sie in der Lage sein, den folgenden Befehl auszuführen:
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"})