Search…
Crystal Blockchain
Crystal provides cryptocurrency analysis and transaction tracing that serves the needs of compliance teams under FATF and 5th AML Directive requirements. With Crystal, PARSIQ users can now access a risk scoring system.

Crystal

It is required to have Pro subscription or higher to gain access to Risk Data Providers.
You need to buy Crystal Blockchain Risk Data calls in addition to your subscription. Contact us at [email protected] to get more info about pricing.
Crystal Blockchain is an advanced blockchain explorer and analytics tool. It helps to understand where cryptocurrencies are flowing from and to. By providing identification for entities behind transactions, Crystal enables risk-based assessment for their users.
The functions getCrystalDataForETH(targetAddress) and getCrystalDataForBTC(targetAddress) take the Ethereum or Bitcoin address and return the structured data from the Crystal Blockchain associated with this address.

Support

Drop us a message at [email protected] if you want to use Crystal on not supported blockchains, if the demand is there - we will implement it!
Blockchain
Is supported
Bitcoin (BTC)
Ethereum (ETH)
Algorand (ALGO)
DASH (DASH)
Polygon (MATIC)

Details

{
percentRiskScore: string,
decimalRiskScore: {
value: int256,
decimals: int256
},
targetName: string,
targetType: string,
signals: {
atm: string,
darkMarket: string,
darkService: string,
exchange: string,
gambling: string,
illegalService: string,
marketplace: string,
miner: string,
mixer: string,
payment: string,
ransom: string,
riskyExchange: string,
scam: string,
stolenCoins: string,
trustedExchange: string,
wallet: string
}
}

Code Samples

This code sample will get data from Crystal Blockchain about the address your Native Ethereum wallet is interacting with. Works both for deposits and withdrawals.
stream QuickMonitor
from Transfers
where @to == MyEthereumAddress || @from == MyEthereumAddress
process
let isCrystalProviderDataReady = false
let crystalProviderData = {percentRiskScore: "0", decimalRiskScore: {value: 0, decimals: 0}, targetName: "", targetType: "", signals: {atm: "", darkMarket: "", darkService: "", exchange: "", gambling: "", illegalService: "", marketplace: "", miner: "", mixer: "", payment: "", ransom: "", riskyExchange: "", scam: "", stolenCoins: "", trustedExchange: "", wallet: ""}}
let executionTarget = MyEthereumAddress
let counterpartyAddress = 0x0
if @to == executionTarget then counterpartyAddress = @from
else counterpartyAddress = @to
end
let txInfo = { txHash: @tx_hash }
if (!isCrystalProviderDataReady) then
crystalProviderData = getCrystalDataForETH(counterpartyAddress)
isCrystalProviderDataReady = true
end
let crystalProvider_txRiskScore = crystalProviderData.decimalRiskScore
let crystalProvider_txRiskScore_percent = crystalProviderData.percentRiskScore
emit { @from, @to, @value, txInfo, crystalProvider_txRiskScore, crystalProvider_txRiskScore_percent }
end
If you want to be notified about the transaction with the address that have a risk score of more than 70%, use this code.
stream QuickMonitor
from Transfers
where @to == MyEthereumAddress || @from == MyEthereumAddress
process
let isCrystalProviderDataReady = false
let crystalProviderData = {percentRiskScore: "0", decimalRiskScore: {value: 0, decimals: 0}, targetName: "", targetType: "", signals: {atm: "", darkMarket: "", darkService: "", exchange: "", gambling: "", illegalService: "", marketplace: "", miner: "", mixer: "", payment: "", ransom: "", riskyExchange: "", scam: "", stolenCoins: "", trustedExchange: "", wallet: ""}}
let executionTarget = MyEthereumAddress
let counterpartyAddress = 0x0
if @to == executionTarget then counterpartyAddress = @from
else counterpartyAddress = @to end
let txInfo = { txHash: @tx_hash }
if (!isCrystalProviderDataReady) then
crystalProviderData = getCrystalDataForETH(counterpartyAddress)
isCrystalProviderDataReady = true
end
let crystalProvider_txRiskScore = crystalProviderData.decimalRiskScore
let crystalProvider_txRiskScore_percent = crystalProviderData.percentRiskScore
if toSmallestDivisibleUnits(crystalProvider_txRiskScore_percent, 1) >= toSmallestDivisibleUnits("70", 1) then
emit { @from, @to, @value, txInfo, crystalProvider_txRiskScore, crystalProvider_txRiskScore_percent }
end
end