// The accounts from the TxInputs must either already have // crypto.PubKey.(type) != nil, (it must be known), // or it must be specified in the TxInput. func getInputs(state types.AccountGetter, ins []types.TxInput) (map[string]*types.Account, tmsp.Result) { accounts := map[string]*types.Account{} for _, in := range ins { // Account shouldn't be duplicated if _, ok := accounts[string(in.Address)]; ok { return nil, tmsp.ErrBaseDuplicateAddress } acc := state.GetAccount(in.Address) if acc == nil { return nil, tmsp.ErrBaseUnknownAddress } if in.PubKey != nil { acc.PubKey = in.PubKey } accounts[string(in.Address)] = acc } return accounts, tmsp.OK }
func getOrMakeOutputs(state types.AccountGetter, accounts map[string]*types.Account, outs []types.TxOutput) (map[string]*types.Account, tmsp.Result) { if accounts == nil { accounts = make(map[string]*types.Account) } for _, out := range outs { // Account shouldn't be duplicated if _, ok := accounts[string(out.Address)]; ok { return nil, tmsp.ErrBaseDuplicateAddress } acc := state.GetAccount(out.Address) // output account may be nil (new) if acc == nil { acc = &types.Account{ PubKey: nil, Sequence: 0, } } accounts[string(out.Address)] = acc } return accounts, tmsp.OK }