UK’s FCA Extends Temporary Registration Regime for Crypto Asset Firms

Merkle Science
July 5, 2021

In line with the prediction made by ‘Merkle Science Regwatch — The UK Regulation Roadmap’ panelists, the Financial Conduct Authority (FCA) issued a statement on 3 June 2021 extending the temporary registration deadline for crypto asset firms and providing insights on the status of the UK’s crypto licensing regime. This temporary scheme allows those firms which registered before December 2020 and are yet to receive approval from the FCA to continue conducting operations until they get the green light or their applications are formally rejected.

The pandemic had created a backlog in registration as resources within the FCA have been focused on initiatives such as loan schemes to support vulnerable UK citizens. Post Covid-19, the UK’s financial regulator is now transitioning back into stability. To catch up with this backlog, the FCA pushed back the deadline for the temporary license registration from 9 July 2021 to 31 March 2022. The FCA further stated that “the extended date allows cryptoasset firms to continue to carry on businesses while the FCA continues with its robust assessment.”

In addition, the FCA announced that an “unprecedented number” of firms have withdrawn their applications from the temporary permit scheme. The FCA has reached an agreement with these 51 firms, they may either reapply, change their business models, or remove a particular offering to ensure compliance. However, the FCA has not yet indicated the date of re-application leaving such companies to face an uncertain future.

As of 3 June 2021, 90 of the 200+ applicant firms have received temporary registration and are allowed to continue their business activities under the temporary permit scheme while their applications are being processed. However, this does not amount to a green light from the FCA. Overall, the FCA has warned that a “significantly large” number of crypto businesses are not meeting the anti-money laundering threshold set out by the regulators. Furthermore, the FCA is concerned about inadequate compliance systems, expertise, enhanced due diligence regimes, and effective transaction monitoring. The FCA provided further guidance to crypto asset businesses that overlap into other regulated activities such as deposit-taking, holding clients’ funds, collective investment schemes — they have suggested these businesses may want to consider streamlining their business models. With less overspill into the other regulated areas, the companies may, in turn, increase their chances of acquiring a license.

To date, only five crypto-asset firms have been admitted to the FCA’s formal register so far including crypto trading platforms Gemini, Archax, and Ziglu, and crypto custodian Digivault. As per the suggestion of webinar speaker Claire Cummings, the firms that are still waiting to hear from the FCA on their application should act like they are already registered. Therefore, it is important, now more than ever, for the crypto asset firms to have a robust internal compliance program in place to ensure compliance with the anti-money laundering standards set up by the regulators.

How Merkle Science Can Help

With the FCA specifically highlighting the importance of transaction monitoring and enhanced due diligence for crypto asset businesses, Merkle Science’s highly customizable and easy-to-use platform provides businesses with 360-degree compliance support. Our predictive cryptocurrency risk and intelligence platform sets the standard for the next generation of financial safeguards and criminal detection. Merkle Science proprietary Behavioral Rule Engine allows users to tailor the tool according to businesses’ own risk policies — which may differ from jurisdiction to jurisdiction.

As the FCA has extended its deadline for crypto asset licensing, crypto businesses that are able to proactively put compliance frameworks in place will be about to mitigate regulatory risks — giving them a clear competitive advantage. For more information, please download Merkle Science’s Guide to the UK Regulations for Cryptoasset Businesses.

To find out how Merkle Science works for your business, please contact us via our website.

// Texture object for PointGlobe sparkle/shimmer const textures = { // Clouds.png is availible in assets folder noise: "https://cdn.prod.website-files.com/6058883b1b6e85eceae76f61/608643a77a8a725f65670a43_clouds.png", }; // Makes a random geojson object of count length. This should be replaced with a geojson asset load const generateRandomGeoJson = (count) => { const geojson = { type: "FeatureCollection", features: [], }; for (let i = 0; i < count; i += 1) { const feature = { type: "Feature", properties: {}, geometry: { type: "Point", coordinates: [], }, }; const lat = Math.random() * 180 - 90; const lon = Math.random() * 360 - 180; // Geojson records longitude first, this is a common gotcha feature.geometry.coordinates = [lon, lat]; // Geojson properties are the catchall for any data values // feature.properties.mythicalCreatureSightings = Math.floor(Math.random() * 30); // // geojson.features.push(feature); } return geojson; }; // Generate some random Geojson const randomGeojson = generateRandomGeoJson(10000); class MyGlobeKit { constructor(canvas) { /** * gkOptions setup some base settings in GlobeKit * note: the apiKey and wasmPath settings */ this.gkOptions = { apiKey, wasmPath: "https://storage.googleapis.com/goldeneye-globekit/gkweb_bg.wasm", attributes: { alpha: false, }, }; // Create the GlobeKitView object this.gkview = new GlobeKitView(canvas, this.gkOptions); // ********************************************************************** // ONSELECTION // ********************************************************************** // onSelection gets called when the globe reports a selection event this.gkview.onSelection = (list) => { // Uncomment this line to see the list object // console.log(list); // Iterate over the drawables that reported a selection list.drawables.forEach((el) => { // This gets run if the points object is selected if (el.obj.id === this.pointglobe.id) { // Check that selection is valid if (el.selection !== undefined) { // Create a ripple at the location with duration of 3 seconds this.pointglobe.rippleAtLocation( el.selection.lat, el.selection.lon, 3000 ); } } else if (el.obj.id === this.points.id) { if (el.selection !== undefined) { // Do something with selected point } } }); }; // ********************************************************************** // BACKGROUNDS // ********************************************************************** // Backgrounds provide more control over the look of the rendered scene // They require a texture image source // this.background = new Background("https://cdn.prod.website-files.com/6058883b1b6e85eceae76f61/6097862d1b93b32bb6fad6f3_bg.png"); this.background = new Background("https://cdn.prod.website-files.com/6058883b1b6e85eceae76f61/6097862d1b93b32bb6fad6f3_bg.png"); // Adding this drawable first ensures that it is drawn first. this.gkview.addDrawable(this.background); // ********************************************************************** // ATMOSPHERES // ********************************************************************** this.atmosphere = new Atmosphere({ texture: "https://cdn.prod.website-files.com/6058883b1b6e85eceae76f61/608643a77014f0e22bc482ad_disk-3.png", }); this.atmosphere.nScale = 1.02; this.gkview.addDrawable(this.atmosphere); // ********************************************************************** // POINTGLOBE // ********************************************************************** // Load the binary from static server fetch("https://storage.googleapis.com/goldeneye-globekit/pointglobe.bin") .then((res) => res.arrayBuffer()) .then((data) => { // Some pointglobe settings const pointglobeParams = { pointSize: 0.006, randomPointSizeVariance: 0.001, // randomPointSizeRatio: 0.1, // minPointAlpha: 1, // minPointSize: 0.07, // color: "#031DFF", // color: "#ffffff", color: "#ffffff", }; this.pointglobe = new PointGlobe(textures, data, pointglobeParams); this.pointglobe.setInteractive(true, true, false); }) .then(() => { // Add the drawable, start drawing when it finishes this.gkview.addDrawable(this.pointglobe, () => { this.gkview.startDrawing(); }); // ********************************************************************** // POINTS // ********************************************************************** this.points = new Points(); // Transforms allow you to specify how data influences geometry this.points.transform = (element, point) => { // We are lerping colors based on a property from the geojson point.color = GKUtils.lerpColor( "#0000ff", "#00ff00", element.properties.mythicalCreatureSightings / 30 ); // Transforms have to return the point object return point; }; // Add geojson to the points object now that the transform is defined this.points.addGeojson(randomGeojson); this.points.setInteractive(true, true, false); this.gkview.addDrawable(this.points); }); } } export { MyGlobeKit }; const canvas = document.getElementById('globekit-canvas'); const gk = new MyGlobeKit(canvas);