Этот оператор вызывает функцию, представленную tx.data
по адресу tx.destination
с передачей в wei (tx.value
).
Чтобы разбить его дальше:
tx.destination
является address
.address
имеет встроенные элементы и функции, включая call
, который позволяет выполнять функции по контракту без ABI (см. Определение типа адреса ).Например, вы можете вызвать метод foobar
в контракте без определенного интерфейса, например:
contractAddress.call(bytes4(keccak256("foobar(uint256,uint256)")), val1, val2); // where val1 and val2 are the uint256 parameters to pass in
Использование только call
будет использовать некоторые значения по умолчанию при вызове метода другого контракта.Например, весь оставшийся газ будет переправлен.Если вы хотите изменить эти значения, вы можете изменить их, указав свои собственные значения газа и / или вей, которые выглядят как сам вызов функции:
contractAddress.call.value(9999999)();
Это отправит 9999999 вей в contractAddress
.Вы можете переопределить как газ, так и эфир, отправленный цепочкой нескольких вызовов функций:
contractAddress.call.value(99999999).gas(77777)();
Последний набор символов в обоих примерах указывает на использование функции отката при отправке wei.Подобный пример вы можете увидеть в Часто задаваемых документах Solidity .
Если вы хотите вызвать что-то отличное от резервной функции, вы бы объединили 2 приведенных выше примера, то есть кодотправил делает.Тот факт, что они используют tx
, немного сбивает с толку, поскольку обычно это встроенная ссылка, но они, вероятно, скрывают это и ссылаются на структуру с элементами destination
, value
и data
.