ethereum geth console中添加方法

本文介绍如何使用Otto包在Go语言中实现JS命令,包括在交互模式和非交互模式下使用。文章详细讲解了添加新API的过程,从定义方法到在JS中注册,以及两种注册方法的区别和操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

otto包,可以直接在go语言中实现js命令。可以在console这种交互模式或者script这种非交互模式中使用

相关的源码分析就省略了。

要添加新的api,首先需要在合适的地方定义具体方法。合适地方…例如backend.go的GetAPIs()为api集合,可在相应的namespace对应的Service中定义,例如在PublicEthereumAPI中添加方法test,访问路径为eth.test()

func (s *PublicBlockChainAPI) Test(ctx context.Context) error {
   fmt.Println("test")
   return nil
}

接下来就是要在js中进行注册,才能定向到上面的方法中。

js中注册有两种方式。

第一种是直接在go文件中添加js静态代码。在web3ext.go中对应位置添加,如

const Eth_JS = `
web3._extend({
	property: 'eth',
	methods: [
		new web3._extend.Method({
			name: 'test',
			call: 'eth_test',
			params: 0
		}),
	]
	...
	`

这样添加后,直接重新编译即可make all

第二种是在js文件中添加代码,在web3.js中对应位置添加,如

var methods = function () {
    var test = new Method({
        name: 'test',
        call: 'eth_test',
        params: 0
    });
	...
	 return [
	 	test
	 ]

}

修改js文件,要进行编译成go(bindata.go)文件才能生效。

编译deps.go中有go:generate语句,用来重新生成bindata.go文件.

生成bindata.go文件,需要安装go-bindata。安装方法如下。

go get github.com/jteeuwen/go-bindata
go install github.com/jteeuwen/go-bindata/go-bindata

安装后生成bindata.go文件,可以在IDE中点击生成,也可以在命令行中执行命令生成。

cd $GOPATH/src/github.com/ethereum/go-ethereum/internal/jsre/deps
go-bindata -nometadata -pkg deps -o bindata.go bignumber.js web3.js
gofmt -w -s bindata.go

最后再进行编译即可make all

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值