如何做一个功能完整的以太坊钱包?以太坊官方提供了一些API()给开发者使用,但是依靠这些API不足以做成一个完整功能的钱包。主要在转账这块,由于安全性考虑,在加解密,数字签名这块不可能有现成的API暴露给开发者。官方给了一个Nodejs的模块给我们使用,叫web3。
web3
web3模块主要连接以太坊暴露出来的RPC层。开发者利用web3连接RPC层,可以连接任何暴露了RPC接口的节点,从而与区块链交互。
web3
中有eth
对象-web.eth
具体来表示与以太坊区块链和智能合约之间的交互。web3.util
有一些辅助函数。另外还有shh和bzz用于通信和文件存储的对象。
github地址:web3
文档:web3
Koa
我们的钱包项目使用web3可以与区块链交互了,这个web3是Nodejs的库,那么我们就用nodejs提供后台接口供前端调用即可,这里使用Koa框架。
Koa是富有表现力的HTTP中间件框架,使web应用程序和API更易于编写,他的特点优雅、简洁、表达力强、自由度高。
github地址:Koa
中间件
Koa的最大特色,也是最重要的一个设计,就是中间件。Koa中间件是简单的函数,调用app.use()
传入MiddlewareFunction
函数带有两个参数(ctx,next)
。中间件处在HTTP Request
和HTTP Response
之间,用来实现某种中间功能。如:
app.use(async (ctx, next) => {
console.log(`Process ${ctx.request.method} ${ctx.request.url} ...`);
await next();
});
ctx
是一个请求的上下文,该对象封装了一个传入的http消息,并对该消息进行了相应的响应。Koa提供了一个Request
对象作为Context
和request
属性。Koa
的Request
对象提供了用于处理http
请求的方法。Koa
提供了一个Response
对象作为Context
和response
属性。Koa
的Response
对象提供了用于处理http
响应的方法。
next
是一个被调用来执行下游中间件的函数,必须手动调用next()
以运行下游中间件。