# Бинарный формат Ethereum-like транзакции
Нода Waves поддерживает транзакции в формате Ethereum (только Legacy) и интерпретирует их как вызов dApp-скрипта или перевод токена, в зависимости от содержания. Подробнее о поддержке Ethereum-like транзакций
Ethereum-like транзакции поддерживаются с момента активации фичи № 17 “Ride V6, MetaMask support”.
message SignedTransaction {
Transaction transaction = 1;
oneof transaction {
Transaction waves_transaction = 1;
bytes ethereum_transaction = 3;
}
repeated bytes proofs = 2;
}
Поле ethereum_transaction
содержит байты Ethereum-like транзакции целиком, включая подпись ECDSA (значения v
, r
, s
).
Массив proofs
в случае Ethereum-like транзакции пустой.
# Интерпретация полей
Хотя в protobuf-схеме не выделены отдельные поля Ethereum-like транзакции, однако нода Waves при валидации и выполнении транзакции разбирает структуру и интерпретирует значения полей следующим образом:
gasLimit
рассматривается как комиссия. Комиссия возможна только в WAVES.gasPrice
должен быть равен 10, иначе транзакция отклоняется.nonce
рассматривается какtimestamp
.Если поле
value
непустое, транзакция интерпретируется как перевод WAVES. В этом случае полеdata
должно быть пустым.Если поле
data
содержит вызов методаtransfer
смарт-контракта ERC20, а полеto
содержит первые 20 байт идентификатора пользовательского токена, транзакция интерпретируется как перевод этого токена.Первые 20 байт идентификатора однозначно определяют токен, поскольку на блокчейне нет токенов, у которых они совпадают.
В остальных случаях транзакция интерпретируется как вызова dApp-скрипта. Последний аргумент вызываемой функции должен быть массивом; он рассматривается как список приложенных к вызову платежей.