code: func getInputs(accountGetter acmstate.AccountGetter, ins []*payload.TxInput) (map[crypto.Address]*acm.Account, uint64, error) {
  	var total uint64
  	accounts := map[crypto.Address]*acm.Account{}
  	for _, in := range ins {
  		// Account shouldn't be duplicated
  		if _, ok := accounts[in.Address]; ok {
  			return nil, total, errors.ErrorCodeDuplicateAddress
  		}
  		acc, err := accountGetter.GetAccount(in.Address)
  		if err != nil {
  			return nil, total, err
  		}
  		if acc == nil {
  			return nil, total, errors.ErrorCodeInvalidAddress
  		}
  		accounts[in.Address] = acc
  		total += in.Amount
  	}
  	return accounts, total, nil
  }
docs: // The accounts from the TxInputs must either already have
  // acm.PublicKey().(type) != nil, (it must be known),
  // or it must be specified in the TxInput.  If redeclared,
  // the TxInput is modified and input.PublicKey() set to nil.