So wie ich es verstehe, ist es möglich, dass ein Vertrag einen anderen Vertrag aufruft, indem er verwendet
othercontractaddress.call(gas_amount).value(eth amount)(tx data).
Oder in diesem Fall Absender -> Vertrag A -> Vertrag B.
Kann man noch eine Ebene tiefer gehen?
Absender -> Vertrag A -> Vertrag B -> Vertrag C?
Etwas wie der folgende Pseudocode?:
othercontractaddress.call(gas_amount).value(eth amount)(thatothercontract.call(gas_amount).value(eth amount)(2ndtxdata))
Ja, obwohl natürlich jeder Vertrag den Anruf selbst ausführen muss. Sie können dies 1024 Mal tun, bis Sie die maximale Tiefe erreicht haben. In dieser Tiefe werden alle neuen Aufrufe fehlschlagen. Dies führte in der Vergangenheit sogar zu Schwachstellen.
Allerdings hat EIP-150 die Gaskosten für Anrufe so stark erhöht, dass Sie die maximale Tiefe nicht mehr erreichen können.
Bobo Amitheson
mafrasi2
b_addr.call(gas_amount)
, dann in Vertrag Bc_addr.call(gas_amount)
und so weiter. Sie können die Aufrufe nicht wie in Ihrem Code in einem einzigen Vertrag "kondensieren".Theo Port
mafrasi2
mafrasi2
msg.depth + 1
für eineCALL
Anleitung.ferit
mafrasi2