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

1
{
2
percentRiskScore: string,
3
decimalRiskScore: {
4
value: int256,
5
decimals: int256
6
},
7
targetName: string,
8
targetType: string,
9
signals: {
10
atm: string,
11
darkMarket: string,
12
darkService: string,
13
exchange: string,
14
gambling: string,
15
illegalService: string,
16
marketplace: string,
17
miner: string,
18
mixer: string,
19
payment: string,
20
ransom: string,
21
riskyExchange: string,
22
scam: string,
23
stolenCoins: string,
24
trustedExchange: string,
25
wallet: string
26
}
27
}
Copied!

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.
1
stream QuickMonitor
2
from Transfers
3
where @to == MyEthereumAddress || @from == MyEthereumAddress
4
process
5
6
let isCrystalProviderDataReady = false
7
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: ""}}
8
9
let executionTarget = MyEthereumAddress
10
let counterpartyAddress = 0x0
11
12
if @to == executionTarget then counterpartyAddress = @from
13
else counterpartyAddress = @to
14
end
15
16
let txInfo = { txHash: @tx_hash }
17
18
if (!isCrystalProviderDataReady) then
19
crystalProviderData = getCrystalDataForETH(counterpartyAddress)
20
isCrystalProviderDataReady = true
21
end
22
23
let crystalProvider_txRiskScore = crystalProviderData.decimalRiskScore
24
let crystalProvider_txRiskScore_percent = crystalProviderData.percentRiskScore
25
26
27
emit { @from, @to, @value, txInfo, crystalProvider_txRiskScore, crystalProvider_txRiskScore_percent }
28
29
end
Copied!
If you want to be notified about the transaction with the address that have a risk score of more than 70%, use this code.
1
stream QuickMonitor
2
from Transfers
3
where @to == MyEthereumAddress || @from == MyEthereumAddress
4
process
5
6
let isCrystalProviderDataReady = false
7
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: ""}}
8
9
let executionTarget = MyEthereumAddress
10
let counterpartyAddress = 0x0
11
12
if @to == executionTarget then counterpartyAddress = @from
13
else counterpartyAddress = @to end
14
15
let txInfo = { txHash: @tx_hash }
16
17
if (!isCrystalProviderDataReady) then
18
crystalProviderData = getCrystalDataForETH(counterpartyAddress)
19
isCrystalProviderDataReady = true
20
end
21
22
let crystalProvider_txRiskScore = crystalProviderData.decimalRiskScore
23
let crystalProvider_txRiskScore_percent = crystalProviderData.percentRiskScore
24
25
if toSmallestDivisibleUnits(crystalProvider_txRiskScore_percent, 1) >= toSmallestDivisibleUnits("70", 1) then
26
emit { @from, @to, @value, txInfo, crystalProvider_txRiskScore, crystalProvider_txRiskScore_percent }
27
end
28
end
Copied!