dir : cmd/geth/main.go
node를 시작
utils.StartNode(ctx, stack, isConsole)
flag에 지정한 account 잠금 해제
unlockAccounts(ctx, stack)
지갑 관련 event handler를 등록
events := make(chan accounts.WalletEvent, 16)
stack.AccountManager().Subscribe(events)
local geth node와 상호작용할 client 생성
rpcClient, err := stack.Attach()
...
// 주어진 rpc client를 사용하는 client 생성
ethClient := ethClient.NewClient(rpcClient)
지갑 관련 이벤트를 listen
go func() {
// 이미 attach된 지갑은 open
for _, wallet := stack.AccountManager().Wallets() {
if err := wallet.Open(""); ...
}
for event := range events {
switch event.Kind {
// 새로오는 지갑은 추가
case accounts.WalletArrived:
...
case accounts.WalletOpened:
...
// 드랍된 지갑은 Close
case accounts.WalletDropped:
...
}
}
}()