Ich versuche, eine Funktion von der bereitgestellten Vertragsadresse im folgenden Format aufzurufen
DeployedContractAddress.call(bytes4(keccak256("get(address)")),0xfffff);
Wenn Sie jedoch versuchen, get(_address) mithilfe der bereitgestellten Vertragsadresse (ohne abi-codiert) aufzurufen, sollte ein Array zurückgegeben werden . Aber hier gibt es die booleschen Werte true oder false zurück .
function get(address _address) public returns (uint256[]){
for(uint i=0;i<n;i++){
arr[address].push(i);
}
return (arr);
}
Gibt es eine einfache Möglichkeit, Array-Werte zu erhalten, ohne ABI-codiert zu verwenden?
Laut der Solidity-Dokumentation ist es ab Version 0.5.0 möglich, auf die Rückgabedaten eines Anrufs zuzugreifen:
address.call(bytes memory) returns (bool, bytes memory)
gibt Low-Level
CALL
mit der gegebenen Nutzlast aus, gibt Erfolgsbedingung zurück und gibt Daten zurück, leitet alles verfügbare Gas weiter, einstellbar
Die Daten werden als einzelnes Array angegeben , sodass Sie sie wahrscheinlich mit decodierenbytes
möchten, um sie zu verwenden.abi.decode
Vor Version 0.5.0 können Sie sich darauf verlassen, dass die Rückgabewerte bei der call()
Rückgabe auf dem Stack verbleiben. Auf sie kann zugegriffen werden, aber Sie müssen Assembler verwenden.
Die Aufrufmethode gibt nur einen booleschen Wert ( true / false ) zurück, basierend auf dem Erfolg, den sie beim Aufrufen der Methode hatte.
Wenn Sie die "zurückgegebenen Werte" lesen möchten, müssen Sie sich mit dem ABI befassen, oder Sie können einen Assembly-Aufruf durchführen und die Werte manuell lesen und verarbeiten.
Sehen Sie sich an, wie erstelle ich einen Aufruf zu einem anderen Vertrag mithilfe von Inline-Assemblierung?
Sie können immer eine abstrakte Schnittstelle für das zu verwendende abi angeben:
contract AbiInterface {
function get(address _address) public returns (uint256[]);
}
function doIt() {
AbiInterface myContract = AbiInterface.at(DeployedContractAddress);
myContract.get(0xfffff);
}
Aber das funktioniert natürlich nicht, wenn Sie versuchen, beliebige Methoden aufzurufen.
lekshmi
Micky Socaci
lekshmi
Micky Socaci
lekshmi
Micky Socaci