Можно ли вызвать функцию смарт-контракта «без» установки «Geth» или «Parity»?

Можно ли вызвать функцию смарт-контракта для отправки транзакции (например, записи в блокчейне Ethereum), но «без» установки клиентов «Geth» или «Parity»?

Если задать более общий вопрос, можно ли взаимодействовать с блокчейном Ethereum без установки Geth или Parity?

Вы можете взаимодействовать с существующим узлом, например с инфурой :)
Можно ли использовать infuraв micro-controller, из-за ограничений установки Gethили Parityна этих устройствах? Спасибо
Это просто конечная точка, к которой можно подключиться через json rpc.

Ответы (2)

Вы можете загрузить код контракта и часть StateDB, которую этот контракт использует для хранения, а также часть SateDB адресов, участвующих в вызовах контракта, а затем вы можете использовать двоичный код для запуска кода этого контракта cmd/evm:

cmd/evm run --input 0xa5e4d2b41223289af53234 --code 0xcontract'scode ....

Это очень хакерски, но вы спросили, возможно ли это, и как это можно сделать без установки Gethили Parity.

Что касается общего вопроса — взаимодействие с Ethereum без использования клиента, то это зависит от определения «взаимодействия». Если он ограничен только отправкой транзакций, то краткий ответ — да, при условии, что:

  • имеет закрытый ключ учетной записи
  • знать одноразовый номер учетной записи
  • имеет ABI вызываемого контракта (не требуется для простых платежных транзакций).

С учетом вышеизложенного транзакция может быть построена байт за байтом. Один реальный пример здесь . Построенную «сырую» транзакцию можно переслать с помощью таких инструментов, как вещатель etherscan (ну, теоретически и от этого можно избавиться, но тогда придется реализовать — хотя бы частично — протокол RLPx ).

На самом деле это то, что затрудняет цензуру транзакции блокчейна: всегда можно создать транзакцию в автономном режиме и отправить байты по почте (или даже голосом) друзьям, которые затем могут помочь протолкнуть в сеть.

Хотя проблема в том, что "одностороннюю" отправку вряд ли можно назвать "взаимодействующей". Чтобы дело шло двумя путями, нужен получатель, который должен будет проверять валидность входящих сообщений. Это, в свою очередь, требует полной реализации протокола. Теперь мы только что вернули «клиента».

Для исходного вопроса, вызывающего метод контракта без использования geth или четности, можно использовать ту же методологию построения байтов из вышеупомянутого поста, хотя становится необходимым ABI контракта. См. этот вопрос для более подробной информации.