{"content":{"title":"venus-wallet 代码解析 笔记","body":"1. 必须开启一个wallet http服务才能产生公私钥，也就是说直接用cmd无法产生本地账户。不方便。\r\n2. 不依赖别的任何服务。可以通过websocket连接gateway，为其服务。wallet-event/listenevent.go：NewAPIRegisterHub()方法会连接gateway，为其提供WalletList和WalletSign两个接口服务。\r\n3. 通过build/builder.go文件的代码把storage/wallet.go中的wallet类注册到rpc server中为外部提供钱包的各种api服务。同时也是通过build/builder.go文件的代码把common/api_common.go中的Common类注册到rpc server中为外部提供各种auth服务。\r\n4. auth服务提供了外部用户访问wallet服务是的权限控制能力。\r\n5. storage/wallet.go:wallet类进行walletnew方法调用时，会通过w.bus.Publish(\"wallet:add_address\", addr)通知gateway。通知方法是\r\n```\r\n_ = bus.Subscribe(\"wallet:add_address\", func(addr address.Address) {  \r\n   log.Infof(\"wallet add address %s\", addr)  \r\n   err := apiRegister.AddNewAddress(context.TODO(), []address.Address{addr})  \r\n   if err != nil {  \r\n      log.Errorf(\"cannot add address %s, %s\", addr, err.Error())  \r\n   }  \r\n})\r\n```\r\n但是为什么要通知gateway呐？？"},"author":{"user":"https://learnblockchain.cn/people/808","address":null},"history":null,"timestamp":1682312801,"version":1}