У меня есть фрагмент JavaScript для получения последней транзакции в/из учетной записи. После запуска экземпляра geth я сделал это в интерактивной консоли JS:
jsFunction — это функция в файле name.js.
>loadScript("/path/to/file/filename.js")
true
>jsFunction(<parameters>)
<Returns the results as expected>
Но когда я пытаюсь сделать то же самое в неинтерактивном режиме, у меня ничего не получается:
$ geth --exec 'loadScript("/path/to/file/filename.js")' attach ipc:/path/to/ipc
true
$ geth --exec 'jsFunction(<parameters>)' attach ipc:/path/to/ipc
ReferenceError: 'jsFunction' is not defined
at <anonymous>:1:1
Я выполнил ту же команду (geth --exec) с обычными функциями web3.js, такими как eth.getTransaction , eth.getBlock , и она отлично работает. Я не понимаю, что не так с выполнением пользовательских скриптов. Поддерживает ли клиент geth эту функцию? Я что-то упускаю?
PS: я запускаю частный блокчейн, но не упомянул --datadir , --networkid , --genesis и т. д . в приведенных выше командах для удобства чтения.
Каждый geth exec запускает один интерпретатор. Поэтому, если вы определяете функцию в первом, она недоступна во втором... Пожалуйста, объедините их в один exec:
Подводить итоги:
geth --exec 'loadScript("/path/to/file/filename.js"); jsFunction(...)' attach
Это также сработало:
geth --exec "loadscript(\"/path/to/file/filename.js\");jsFunction(<params>)" attach ipc:/path/to/ipc
Исмаэль
geth --exec 'loadscript("/path/to/file/filename.js"); jsFunction(<params>); ' attach ipc:/path/to/ipc
Эллис