Go-Ethereum
如何在 geth 控制台中自定義我自己的命令?
如何在 geth 控制台中自定義我自己的命令?
我們知道,在 geth 控制台中,我們可以輸入 eth.accounts 和其他命令。我發現有一個名為 Otto 的 JavaScript 解析器/解釋器可以執行此操作,但是如何在 geth 控制台中添加新命令,例如 eth.mycommand?
非常感謝你。
可以修改原始碼來實現,創建本地私有鏈。
- 安裝去
- 複製
go-ethereum
項目git clone https://github.com/ethereum/go-ethereum.git
- 重建所有命令
make all
,例如geth
- 測試是否一切正常。
./build/bin/geth --datadir=./dev/data0 --networkid 2 console
. 首先,您應該創建目錄./dev/data0
來保存鏈數據。如果好的,現在你已經進入了 geth 控制台。現在,我們修改原始碼。啟動時
geth
會創建一個執行緒通過Interactive方法與控制台互動,最後console.Evaluate()
處理輸入命令。所以你可以在這裡實現你的邏輯。現在我們定義一個eth.custom(params)
命令來顯示say-hello。修改原始碼如下:// Evaluate executes code and pretty prints the result to the specified output // stream. func (c *Console) Evaluate(statement string) error { //fmt.Println(isCustomCommand(statement)) if (isCustomCommand(statement)) {//custom command,return result := "Hello " + statement[strings.Index(statement,"\"")+1:len(statement)-3] log.Info(result) return nil } defer func() { if r := recover(); r != nil { fmt.Fprintf(c.printer, "[native] error: %v\n", r) } }() return c.jsre.Evaluate(statement, c.printer) } //our custom is eth.custom(param) func isCustomCommand(input string) bool{ return strings.HasPrefix(input,"eth.custom") }
如果您輸入
eth.custom("BinBin")
,它會顯示Hello BinBin
在終端上。現在執行
make all
命令重建,然後執行命令進入控制台:
./build/bin/geth --datadir=./dev/data0 --networkid 2 console
現在,我們開始測試,輸入命令如下:
eth.custom("BinBin")
結果是
完美的!
希望有幫助~