Specifically, it adds an address into the wallet.

Easy to test now thanks to https://github.com/bitcoin/bitcoin/pull/14410
```
diff --git a/test/functional/wallet_importmulti.py b/test/functional/wallet_importmulti.py
index 9ba6860..bff37b2 100755
--- a/test/functional/wallet_importmulti.py
+++ b/test/functional/wallet_importmulti.py
@@ -95,6 +95,7 @@ class ImportMultiTest(BitcoinTestFramework):
         assert_equal(address_assert['iswatchonly'], True)
         assert_equal(address_assert['ismine'], False)
         assert_equal(address_assert['timestamp'], timestamp)
+        assert_equal(address_assert['ischange'], True)
 
         # ScriptPubKey + internal + label
         self.log.info("Should not allow a label to be specified when internal is true")
```

}
            CPubKey pubKey = key.GetPubKey();
            assert(key.VerifyPubKey(pubKey));
            CKeyID vchAddress = pubKey.GetID();
            pwallet->MarkDirty();
            if (pwallet->HaveKey(vchAddress)) {
                throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Already have this key");
            }
            pwallet->mapKeyMetadata[vchAddress].nCreateTime = timestamp;
            if (!pwallet->AddKeyPubKey(key, pubKey)) {
                throw JSONRPCError(RPC_WALLET_ERROR, "Error adding key to wallet");
            }
            pwallet->UpdateTimeFirstKey(timestamp);
        }
        UniValue result = UniValue(UniValue::VOBJ);
        result.pushKV("success", UniValue(true));
        return result;
    } catch (const UniValue& e) {
        UniValue result = UniValue(UniValue::VOBJ);
        result.pushKV("success", UniValue(false));
        result.pushKV("error", e);
        return result;
    } catch (...) {
        UniValue result = UniValue(UniValue::VOBJ);
        result.pushKV("success", UniValue(false));
        result.pushKV("error", JSONRPCError(RPC_MISC_ERROR, "Missing required fields"));
        return result;
    }
}
static int64_t GetImportTimestamp(const UniValue& data, int64_t now)