## Archival Nodes
| Endpoint | Country |
| -------- | -------- |
| wss://a1.calamari.systems | UK |
| wss://a2.calamari.systems | US |
| wss://avocado.calamari.systems | UK |
| wss://fritti.calamari.systems | Japan |
## The block includes 1st private tx
Block number:
```
https://calamari.subscan.io/block/3190993
```
Basically, you can start to scan blocks from `3190993 `.
## Tokens
| Token Name | Asset Id | Decimal |
| -------- | -------- | -------- |
| KMA | 1 | 12 |
| KAR | 8 | 12 |
| MOVR | 11 | 18 |
| KSM | 12 | 12 |
| USDT | 14 | 6 |
| USDC | 16 | 6 |
| DAI | 15 | 18 |
## How to decode
### The metadata from mantapay
- Module name
```
mantaPay
```
- Event name
- `ToPrivate`: public token to private token
Two fields in this event:
- `asset`: contains asset id, how many token will be `ToPrivate`ed.
- `source`: signer
If `ToPrivate` is detected, you can decode it in this way.
```ts
const [asset, signer] = event.data;
const assetId = decodeAssetId(asset.toJSON().valueOf()['id']);
const amount = toUnit(decodeAssetValue(asset.toJSON().valueOf()['value']), assetId).toNumber();
```
- `PrivateTransfer`: private token to private token,
Only one field in this event, no one knows how many tokens is transfered:
- `origin`: signer
If `PrivateTransfer` is detected, you can decode it in this way.
```ts
const [signer] = event.data;
```
- `ToPublic`: private token to public token
Two fields in this event:
- `asset`: contains asset id, how many token will be `ToPublic`ed.
- `sink`: signer
If `ToPublic` is detected, you can decode it in this way.
```ts
const [asset, signer] = event.data;
const assetId = decodeAssetId(asset.toJSON().valueOf()['id']);
const amount = toUnit(decodeAssetValue(asset.toJSON().valueOf()['value']), assetId).toNumber();
```
- Utility Functions
```ts
function decodeAssetValue(hexString: string) {
const array = hexToU8a(hexString);
const value = u8aToBn(array);
return value;
}
function toUnit(balance: BN, assetId: number) {
const decimal = todo!(); // get decimal by asset id.
const b = new BigNumber(decimal.toString());
const c = a.div(b);
return c;
}
function decodeAssetId(assetId: string) {
const array = hexToU8a(assetId);
const value = u8aToBn(array);
return value.toNumber();
}
```