Option 2: Everything under one data key
```
3,0xA00000,1,0xDD,255,0xAA...0032,0xBB...0032,0xCC...0032
```
0xA00000
| prefix length 1 - 1 byte | prefix 1 - dynamic length | prefix length - 1 byte | prefix 2 - dynamic length | full-match divider - 1 byte (value: 255) | full key 1 - 32 bytes | full key 2 - 32 bytes | full key 3 - 32 bytes |
```
3,0xA00000, // exactly 3 bytes
1,0xDD, // exactly 1 byte
255, // seperator (0xff) 1111 1111
0xAA...0032, // 32 bytes
0xBB...0032, // 32 bytes
0xCC...0032 // 32 bytes
```
1 + 3 + 1 + 1 + 1 + 32*3 == 103 bytes
```
0x 03 A00000 01 DD FF AA...0032 BB...0032 CC...0032
```
The full raw bytes of allowed ERC725Y Keys would look like this:
```
0x03A00000001DDFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
```
It should work if separator is present or not (if there is fixed keys or not/ only dynamic keys).
```
0x03A00000001DD20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA20BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB20CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
```
```json
{
"name": "AddressPermissions:AllowedERC725DataKeys:<address>",
"key": "0x04b80742de2b3a28b9de0000<address>",
"keyType": "MappingWithGrouping",
"valueType": "CompactBytesArray",
"valueContent": "Bytes"
}
```
check if it goes out of bounds
0x dD e1c7436a77a009a97e48e4e10c92e89fd95fe1556fc5c62ecef57cea51aa37
dd == 221 !< bytes.length
CompactBytesArray
## `AddressPermissions:AllowedCalls:<address>`
`Standard:Address:Function`
`<bytes4>:<bytes20>:</bytes4>`
```json
{
"name": "AddressPermissions:AllowedCalls:<address>",
"key": "0x4b80742de2bf393a64c70000<address>",
"keyType": "MappingWithGrouping",
"valueType": "(bytes4,address,bytes4)[CompactBytesArray]",
"valueContent": "(Bytes4,Address,Bytes4)"
}
```
check if multiple of 29
value.length % (modulo) 29 should equal to 0
*example:*
For:
```
0xaaaaaaaacafecafecafecafecafecafecafecafecafecafebbbbbbbb
0xccccccccbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefdddddddd
```
28 in decimals = 0x1c
```
0x1caaaaaaaacafecafecafecafecafecafecafecafecafecafebbbbbbbb1cccccccccbeefbeefbeefbeefbeefbeefbeefbeefbeefbeefdddddddd
```
## Allowed Standards
Instead of having
```
[
ERC1271:ANY:ANY
]
```
Have this?
```
[
ANY_ADDRESS:isValidSignature(...)
]
```
this (for optimisation)
```
ANY_ADD:SIG1(4 bytes),SIG2,SIG3
```
or this
```
[
ANY_ADD:SIG1,
ANY_ADD:SIG2,
ANY_ADDSIG3
]
```
```
impl.sol
externalNFT.mint{value: msg.value}()
```