Determine whether this is a fake deposit
[
{
"update": {
"Transaction": {
"value": {
"updateId": "12205af58737ef43256b66f2e3747dd788117f6d0318a8e7f78da687713d397bf779",
"commandId": "",
"workflowId": "",
"effectiveAt": "2026-04-11T07: 23: 00.775770Z",
"events": [
{
"ExercisedEvent": {
"offset": 3206017,
"nodeId": 1,
"contractId": "008c3212d325f169b57c867c85aa7e0071157d7ffd224c13d8032457a250562fa1ca12122095f977bb4161387db10ea2ebfcc0f21510aaf4273d5fa3476227f3459db34280",
"templateId": "c208d7ead1e4e9b610fc2054d0bf00716144ad444011bce0b02dcd6cd0cb8a23:Splice.AmuletRules:TransferPreapproval",
"interfaceId": null,
"choice": "TransferPreapproval_Send",
"choiceArgument": {
"context": {
"amuletRules": "006183fd00806750daaf45e9a0fbab710dc0ad8f275c169ad3847d16b6ce976b0bca121220e9d15cdea12881d86c85ed7dd5bbdddd7fc001b2b255d08f9af8980ac799ecef",
"context": {
"openMiningRound": "002e7b52f733b54d92be12ff288d2cd941c0b7b67e58dcce38ae7d92ac7a1d7118ca12122099c728791c6d643f132130692072b3636ff37bd981de052d1118898144aaa259",
"issuingMiningRounds": ,
"validatorRights":
}
},
"inputs": [
{
"tag": "InputAmulet",
"value": "009e07a3b96d5310c0f49bdeafbd56a6e1048104ef464c580fbd999ed351ebad33ca121220c71ea82efc2d41d76f24629e261870f943659375b42340037b3513bfffda60d5"
}
],
"amount": "13.2423760000",
"sender": "okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179",
"description": "88888888"
},
"actingParties": [
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179"
],
"consuming": false,
"witnessParties": [
"DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"htx-validator-1: : 1220968c44e8ff599a05ae7136a729a5289a5e1be765f6126d8649cc3b4a6670a3cf",
"htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179"
],
"lastDescendantNodeId": 7,
"exerciseResult": {
"result": {
"round": {
"number": "91251"
},
"summary": {
"inputAppRewardAmount": "0.0000000000",
"inputValidatorRewardAmount": "0.0000000000",
"inputSvRewardAmount": "0.0000000000",
"inputAmuletAmount": "15.8386700000",
"balanceChanges": [
[
"htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
{
"changeToInitialAmountAsOfRoundZero": "24.9330343654",
"changeToHoldingFeesRate": "0.0001281154"
}
],
[
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179",
{
"changeToInitialAmountAsOfRoundZero": "-13.3559623414",
"changeToHoldingFeesRate": "-0.0000012632"
}
]
],
"holdingFees": "0.0000000000",
"outputFees": [
"0.0000000000"
],
"senderChangeFee": "0.0000000000",
"senderChangeAmount": "2.5962940000",
"amuletPrice": "0.1485060000",
"inputValidatorFaucetAmount": "0.0000000000",
"inputUnclaimedActivityRecordAmount": "0.0000000000",
"inputDevelopmentFundAmount": "0.0000000000"
},
"createdAmulets": [
{
"tag": "TransferResultAmulet",
"value": "000b0e1ef010393796992678141674ad365874f48f5445790262aa178e654d1aa3ca1212200a4e18e0b023a931de14a58713b07c0e7ef6f8221dbaca3de91c09be7dc884ea"
}
],
"senderChangeAmulet": "004c53b1880f4771c9c1bb2e2e518cd785ae1c037543a321f482282c55e34914e0ca121220e5c2aef7ac6f0590d1751963ea4a5b5157df57c9162fc02bdbc71bef917a9699"
},
"meta": {
"values": {
"splice.lfdecentralizedtrust.org/reason": "88888888",
"splice.lfdecentralizedtrust.org/sender": "okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179",
"splice.lfdecentralizedtrust.org/tx-kind": "transfer"
}
}
},
"packageName": "splice-amulet",
"implementedInterfaces": ,
"acsDelta": false
}
},
{
"ExercisedEvent": {
"offset": 3206017,
"nodeId": 2,
"contractId": "006183fd00806750daaf45e9a0fbab710dc0ad8f275c169ad3847d16b6ce976b0bca121220e9d15cdea12881d86c85ed7dd5bbdddd7fc001b2b255d08f9af8980ac799ecef",
"templateId": "c208d7ead1e4e9b610fc2054d0bf00716144ad444011bce0b02dcd6cd0cb8a23:Splice.AmuletRules:AmuletRules",
"interfaceId": null,
"choice": "AmuletRules_Transfer",
"choiceArgument": {
"transfer": {
"sender": "okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179",
"provider": "htx-validator-1: : 1220968c44e8ff599a05ae7136a729a5289a5e1be765f6126d8649cc3b4a6670a3cf",
"inputs": [
{
"tag": "InputAmulet",
"value": "009e07a3b96d5310c0f49bdeafbd56a6e1048104ef464c580fbd999ed351ebad33ca121220c71ea82efc2d41d76f24629e261870f943659375b42340037b3513bfffda60d5"
}
],
"outputs": [
{
"receiver": "htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
"receiverFeeRatio": "0.0000000000",
"amount": "13.2423760000"
}
]
},
"context": {
"openMiningRound": "002e7b52f733b54d92be12ff288d2cd941c0b7b67e58dcce38ae7d92ac7a1d7118ca12122099c728791c6d643f132130692072b3636ff37bd981de052d1118898144aaa259",
"issuingMiningRounds": ,
"validatorRights":
},
"expectedDso": "DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc"
},
"actingParties": [
"htx-validator-1: : 1220968c44e8ff599a05ae7136a729a5289a5e1be765f6126d8649cc3b4a6670a3cf",
"htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179"
],
"consuming": false,
"witnessParties": [
"DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"htx-validator-1: : 1220968c44e8ff599a05ae7136a729a5289a5e1be765f6126d8649cc3b4a6670a3cf",
"htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179"
],
"lastDescendantNodeId": 7,
"exerciseResult": {
"round": {
"number": "91251"
},
"summary": {
"inputAppRewardAmount": "0.0000000000",
"inputValidatorRewardAmount": "0.0000000000",
"inputSvRewardAmount": "0.0000000000",
"inputAmuletAmount": "15.8386700000",
"balanceChanges": [
[
"htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
{
"changeToInitialAmountAsOfRoundZero": "24.9330343654",
"changeToHoldingFeesRate": "0.0001281154"
}
],
[
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179",
{
"changeToInitialAmountAsOfRoundZero": "-13.3559623414",
"changeToHoldingFeesRate": "-0.0000012632"
}
]
],
"holdingFees": "0.0000000000",
"outputFees": [
"0.0000000000"
],
"senderChangeFee": "0.0000000000",
"senderChangeAmount": "2.5962940000",
"amuletPrice": "0.1485060000",
"inputValidatorFaucetAmount": "0.0000000000",
"inputUnclaimedActivityRecordAmount": "0.0000000000",
"inputDevelopmentFundAmount": "0.0000000000"
},
"createdAmulets": [
{
"tag": "TransferResultAmulet",
"value": "000b0e1ef010393796992678141674ad365874f48f5445790262aa178e654d1aa3ca1212200a4e18e0b023a931de14a58713b07c0e7ef6f8221dbaca3de91c09be7dc884ea"
}
],
"senderChangeAmulet": "004c53b1880f4771c9c1bb2e2e518cd785ae1c037543a321f482282c55e34914e0ca121220e5c2aef7ac6f0590d1751963ea4a5b5157df57c9162fc02bdbc71bef917a9699",
"meta": {
"values": {
"splice.lfdecentralizedtrust.org/sender": "okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179",
"splice.lfdecentralizedtrust.org/tx-kind": "transfer"
}
}
},
"packageName": "splice-amulet",
"implementedInterfaces": ,
"acsDelta": false
}
},
{
"ExercisedEvent": {
"offset": 3206017,
"nodeId": 5,
"contractId": "009e07a3b96d5310c0f49bdeafbd56a6e1048104ef464c580fbd999ed351ebad33ca121220c71ea82efc2d41d76f24629e261870f943659375b42340037b3513bfffda60d5",
"templateId": "c208d7ead1e4e9b610fc2054d0bf00716144ad444011bce0b02dcd6cd0cb8a23:Splice.Amulet:Amulet",
"interfaceId": null,
"choice": "Archive",
"choiceArgument": {},
"actingParties": [
"DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179"
],
"consuming": true,
"witnessParties": [
"DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"htx-validator-1: : 1220968c44e8ff599a05ae7136a729a5289a5e1be765f6126d8649cc3b4a6670a3cf",
"htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179"
],
"lastDescendantNodeId": 5,
"exerciseResult": {},
"packageName": "splice-amulet",
"implementedInterfaces": ,
"acsDelta": false
}
},
{
"CreatedEvent": {
"offset": 3206017,
"nodeId": 6,
"contractId": "000b0e1ef010393796992678141674ad365874f48f5445790262aa178e654d1aa3ca1212200a4e18e0b023a931de14a58713b07c0e7ef6f8221dbaca3de91c09be7dc884ea",
"templateId": "c208d7ead1e4e9b610fc2054d0bf00716144ad444011bce0b02dcd6cd0cb8a23:Splice.Amulet:Amulet",
"contractKey": null,
"createArgument": {
"dso": "DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"owner": "htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
"amount": {
"initialAmount": "13.2423760000",
"createdAt": {
"number": "91251"
},
"ratePerRound": {
"rate": "0.0001281154"
}
}
},
"createdEventBlob": "CgMyLjES7gQKRQALDh7wEDk3lpkmeBQWdK02WHT0j1RFeQJiqheOZU0ao8oSEiAKThjgsCOpMd4UpYcTsHwOfvb4Ih26yj3pHAm+fciE6hINc3BsaWNlLWFtdWxldBpaCkBjMjA4ZDdlYWQxZTRlOWI2MTBmYzIwNTRkMGJmMDA3MTYxNDRhZDQ0NDAxMWJjZTBiMDJkY2Q2Y2QwY2I4YTIzEgZTcGxpY2USBkFtdWxldBoGQW11bGV0IucBauQBCk0KSzpJRFNPOjoxMjIwYjE0MzFlZjIxNzM0MmRiNDRkNTE2YmI5YmVmZGU4MDJiZTdkODg5OTYzN2QyOTA4OTVmYTU4ODgwZjE5YWNjYwpUClI6UGh0eC13YWxsZXQ6OjEyMjBkMDcyY2IwN2UzYzJhMjgwZjMxZDk0NWI5ZDhmOWU3YjAxZDU2N2M2YmM5NWIxZTkzYzkxODY0Y2I4NDk1NjRlCj0KO2o5ChEKDzINMTMuMjQyMzc2MDAwMAoMCgpqCAoGCgQY5pELChYKFGoSChAKDjIMMC4wMDAxMjgxMTU0KklEU086OjEyMjBiMTQzMWVmMjE3MzQyZGI0NGQ1MTZiYjliZWZkZTgwMmJlN2Q4ODk5NjM3ZDI5MDg5NWZhNTg4ODBmMTlhY2NjKlBodHgtd2FsbGV0OjoxMjIwZDA3MmNiMDdlM2MyYTI4MGYzMWQ5NDViOWQ4ZjllN2IwMWQ1NjdjNmJjOTViMWU5M2M5MTg2NGNiODQ5NTY0ZTlaM5geKk8GAEIqCiYKJAgBEiAx36Ukq0HbIWRIGrDuEsI82aWe346O6kYFt4GtFfGJ6xAe",
"interfaceViews": ,
"witnessParties": [
"DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"htx-validator-1: : 1220968c44e8ff599a05ae7136a729a5289a5e1be765f6126d8649cc3b4a6670a3cf",
"htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179"
],
"signatories": [
"DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e"
],
"observers": ,
"createdAt": "2026-04-11T07: 23: 00.775770Z",
"packageName": "splice-amulet",
"representativePackageId": "c208d7ead1e4e9b610fc2054d0bf00716144ad444011bce0b02dcd6cd0cb8a23",
"acsDelta": true
}
},
{
"CreatedEvent": {
"offset": 3206017,
"nodeId": 7,
"contractId": "004c53b1880f4771c9c1bb2e2e518cd785ae1c037543a321f482282c55e34914e0ca121220e5c2aef7ac6f0590d1751963ea4a5b5157df57c9162fc02bdbc71bef917a9699",
"templateId": "c208d7ead1e4e9b610fc2054d0bf00716144ad444011bce0b02dcd6cd0cb8a23:Splice.Amulet:Amulet",
"contractKey": null,
"createArgument": {
"dso": "DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"owner": "okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179",
"amount": {
"initialAmount": "2.5962940000",
"createdAt": {
"number": "91251"
},
"ratePerRound": {
"rate": "0.0001281154"
}
}
},
"createdEventBlob": "CgMyLjES4wQKRQBMU7GID0dxycG7Li5RjNeFrhwDdUOjIfSCKCxV40kU4MoSEiDlwq73rG8FkNF1GWPqSltRV99XyRYvwCvbxxvvkXqWmRINc3BsaWNlLWFtdWxldBpaCkBjMjA4ZDdlYWQxZTRlOWI2MTBmYzIwNTRkMGJmMDA3MTYxNDRhZDQ0NDAxMWJjZTBiMDJkY2Q2Y2QwY2I4YTIzEgZTcGxpY2USBkFtdWxldBoGQW11bGV0IuEBat4BCk0KSzpJRFNPOjoxMjIwYjE0MzFlZjIxNzM0MmRiNDRkNTE2YmI5YmVmZGU4MDJiZTdkODg5OTYzN2QyOTA4OTVmYTU4ODgwZjE5YWNjYwpPCk06S29reC0xOjoxMjIwODExMTRkZmQ4OGViM2ViNzVjM2E0M2EyNjU4M2M1YzI3ZmJiZmE4NGEzOTk1OTM1NDA1ZGRjMWZhMjQ0YzE3OQo8CjpqOAoQCg4yDDIuNTk2Mjk0MDAwMAoMCgpqCAoGCgQY5pELChYKFGoSChAKDjIMMC4wMDAxMjgxMTU0KklEU086OjEyMjBiMTQzMWVmMjE3MzQyZGI0NGQ1MTZiYjliZWZkZTgwMmJlN2Q4ODk5NjM3ZDI5MDg5NWZhNTg4ODBmMTlhY2NjKktva3gtMTo6MTIyMDgxMTE0ZGZkODhlYjNlYjc1YzNhNDNhMjY1ODNjNWMyN2ZiYmZhODRhMzk5NTkzNTQwNWRkYzFmYTI0NGMxNzk5WjOYHipPBgBCKgomCiQIARIgkTIo7saeFEm3OW1QPPfnMEO6VroT2NEKFpfXzzc8sGIQHg==",
"interfaceViews": ,
"witnessParties": [
"DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"htx-validator-1: : 1220968c44e8ff599a05ae7136a729a5289a5e1be765f6126d8649cc3b4a6670a3cf",
"htx-wallet: : 1220d072cb07e3c2a280f31d945b9d8f9e7b01d567c6bc95b1e93c91864cb849564e",
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179"
],
"signatories": [
"DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"okx-1: : 122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179"
],
"observers": ,
"createdAt": "2026-04-11T07: 23: 00.775770Z",
"packageName": "splice-amulet",
"representativePackageId": "c208d7ead1e4e9b610fc2054d0bf00716144ad444011bce0b02dcd6cd0cb8a23",
"acsDelta": false
}
}
],
"offset": 3206017,
"synchronizerId": "global-domain: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc",
"traceContext": {
"traceparent": "00-451bd0bd5a63ef6e7d7c4568d8482151-f7db512f7e3cc14c-01",
"tracestate": null
},
"recordTime": "2026-04-11T07: 23: 01.051987Z",
"externalTransactionHash": null,
"paidTrafficCost": null
}
}
}
}
]
This is a test transaction from OKX to HTX.
-
How can I determine whether this transaction is valid?
-
How can I determine whether this is a fake deposit?
-
Previously, I tried to use
templateIdwith a whitelist approach, buttemplateIdchanges frequently, even when our node has not been upgraded.
What is the identifier used to mark a CC asset?
Could there be other tokens as well?
Since the templateId changes with each upgrade, how should I uniquely identify the CC asset instead of other assets?
Hi @Bb_Hi ,
I formatted your JSON for easier readability, hope you don’t mind.
The JSON doesn’t have the interface views for CIP-0056 so one cannot use a standardized method to infer whether it’s “real”.
Generally the way to do it is to look at the instrumentId and check that it matches that of Canton Coin - specifically whether it has the right admin party DSO: : 1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc. This is the real “Decentralized Synchronizer Operations” party representing super validator consensus so this is indeed a real transaction.
Did you get this transaction from your own Ledger API? If so, to get the interface views, add them to the transaction filter. Example here:
OFFSET=$(curl -X GET http://localhost:8080/api/ledger/v2/state/ledger-end | jq '.offset')
echo $OFFSET
curl -X POST http://localhost:8080/api/ledger/v2/updates/flats -d '{
"verbose" : false,
"beginExclusive": '"$OFFSET"',
"updateFormat": {
"includeTransactions" : {
"transactionShape" : "TRANSACTION_SHAPE_LEDGER_EFFECTS",
"eventFormat" : {
"verbose" : true,
"filtersForAnyParty": {
"cumulative": [
{
"identifierFilter": {"WildcardFilter": {"value": {
"includeCreatedEventBlob": false
}}}
},
{
"identifierFilter": {"InterfaceFilter": {"value": {
"includeInterfaceView":true,
"includeCreatedEventBlob": false,
"interfaceId": "#splice-api-token-holding-v1:Splice.Api.Token.HoldingV1:Holding"
}}}
},
{
"identifierFilter": {"InterfaceFilter": {"value": {
"includeInterfaceView":true,
"includeCreatedEventBlob": false,
"interfaceId": "#splice-api-token-transfer-instruction-v1:Splice.Api.Token.TransferInstructionV1:TransferInstruction"
}}}
}]
}
}
}
}
}'
“interfaceViews”: [
{
“interfaceId”: “718a0f77e505a8de22f188bd4c87fe74101274e9d4cb1bfac7d09aec7158d35b:Splice.Api.Token.HoldingV1:Holding”,
“viewStatus”: {
“code”: 0,
“message”: “”,
“details”:
},
“viewValue”: {
“owner”: “okx-1::122081114dfd88eb3eb75c3a43a26583c5c27fbbfa84a3995935405ddc1fa244c179”,
“instrumentId”: {
“admin”: “DSO::1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc”,
“id”: “Amulet”
},
“amount”: “2.5962940000”,
“lock”: null,
“meta”: {
“values”: {
“amulet.splice.lfdecentralizedtrust.org/created-in-round”: “91251”,
“amulet.splice.lfdecentralizedtrust.org/rate-per-round”: “0.0001281154”
}
}
}
}
] Will DSO::1220b1431ef217342db44d516bb9befde802be7d8899637d290895fa58880f19accc in the instrumentId (admin field) change frequently with exchange node upgrades?
That value never changes.
There is one value for the dso Party per network (DevNet, TestNet, MainNet), which you can extract from the network configs (e.g. for DevNet: https://docs.dev.global.canton.network.sync.global/dso ). Once you’ve extracted the value, you can hard-code it.
Hi Bb_Hi, I saw your thread asking whether a deposit was real. I'm working on the other side of the same problem: businesses on Canton that can't tell which customer an exchange withdrawal belongs to. My project, Naust, gives each customer their own deposit address so the deposit identifies itself.
Two questions, if you have a minute: when your exchange sends a withdrawal to a Canton business, does the business ever come back asking whose it was? And would per-customer addresses on their side make your support simpler?
Jadon