Go-Ethereum

通過非互動式控制台(geth –exec)執行自定義 JavaScript 片段

  • June 24, 2016

我有一個 JavaScript 片段來獲取與帳戶之間的最新交易。啟動 geth 實例後,我在互動式 JS 控制台中執行此操作:

jsFunction 是 filename.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

我用普通的 web3.js 函式(如eth.getTransactioneth.getBlock)執行了相同的命令(geth –exec),它執行良好。我不明白執行自定義腳本有什麼問題。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

引用自:https://ethereum.stackexchange.com/questions/6500