mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-03-03 08:46:05 +00:00
fix(core/cardano): reintroduce max tx output size
Output size is currently limited to 4000 bytes at protocol level. Given the maximum transaction size Trezor can handle (~9kB), we also want to enforce this size limit here so that when the limit is raised at protocol level again, Trezor would still not be able to produce larger outputs than it could reliably spend. Once Cardano-transaction signing is refactored to be completely streamed and maximum supported transaction size is thus raised, this limit can be lifted.
This commit is contained in:
parent
a92b5fc333
commit
b2de8909d1
495
common/tests/fixtures/cardano/sign_tx.failed.json
vendored
495
common/tests/fixtures/cardano/sign_tx.failed.json
vendored
@ -797,6 +797,501 @@
|
|||||||
"error_message": "Invalid certificate path"
|
"error_message": "Invalid certificate path"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"description": "Too many tokens in output",
|
||||||
|
"parameters": {
|
||||||
|
"protocol_magic": 764824073,
|
||||||
|
"network_id": 1,
|
||||||
|
"fee": 42,
|
||||||
|
"ttl": 10,
|
||||||
|
"certificates": [],
|
||||||
|
"withdrawals": [],
|
||||||
|
"auxiliary_data": null,
|
||||||
|
"inputs": [
|
||||||
|
{
|
||||||
|
"path": "m/1852'/1815'/0'/0/0",
|
||||||
|
"prev_hash": "3b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b7",
|
||||||
|
"prev_index": 0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"address": "Ae2tdPwUPEZCanmBz5g2GEwFqKTKpNJcGYPKfDxoNeKZ8bRHr8366kseiK2",
|
||||||
|
"amount": "3003112",
|
||||||
|
"token_bundle": [
|
||||||
|
{
|
||||||
|
"policy_id": "00a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "01aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "7878754"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "02aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "1234"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "03aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "1234"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "04aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "1234"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "05aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "1234"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "06aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "1234"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "07aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "1234"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "08aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "1234"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "09aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "1234"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "01a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "10aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "11aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "12aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "13aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "14aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "15aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "16aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "17aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "02a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "18aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "19aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "20aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "21aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "23aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "24aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "25aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "03a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "26aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "27aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "28aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "29aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "30aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "31aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "32aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "33aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "04a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "34aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "35aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "36aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "37aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "38aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "39aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "40aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "41aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "05a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "42aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "43aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "44aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "45aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "46aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "47aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "48aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "49aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "06a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "50aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "51aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "52aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "53aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "54aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "55aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "56aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "57aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "07a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "58aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "59aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "60aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "61aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "62aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "63aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "64aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "65aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "08a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "66aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "67aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "68aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "69aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "70aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "71aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "72aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "73aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "09a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "74aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "75aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "76aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "77aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "78aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "79aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "80aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "81aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "10a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "82aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "83aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "84aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "85aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "86aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "87aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "88aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "89aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "11a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "90aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "91aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "92aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "93aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "94aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "95aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "96aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "97aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"policy_id": "12a292ffee938be03e9bae5657982a74e9014eb4960108c9e23a5b39",
|
||||||
|
"tokens": [
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "98aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "99aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"asset_name_bytes": "100aaaaaaaaaaaaaaaaaaaaaaa",
|
||||||
|
"amount": "47"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"result": {
|
||||||
|
"error_message": "Maximum tx output value size"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"description": "Repeated asset name in multiasset token group",
|
"description": "Repeated asset name in multiasset token group",
|
||||||
"parameters": {
|
"parameters": {
|
||||||
|
@ -95,6 +95,7 @@ if False:
|
|||||||
MINTING_POLICY_ID_LENGTH = 28
|
MINTING_POLICY_ID_LENGTH = 28
|
||||||
MAX_ASSET_NAME_LENGTH = 32
|
MAX_ASSET_NAME_LENGTH = 32
|
||||||
MAX_TX_CHUNK_SIZE = 256
|
MAX_TX_CHUNK_SIZE = 256
|
||||||
|
MAX_TX_OUTPUT_SIZE = 4000
|
||||||
|
|
||||||
|
|
||||||
@seed.with_keychain
|
@seed.with_keychain
|
||||||
@ -136,7 +137,7 @@ async def _sign_ordinary_tx(
|
|||||||
ctx, keychain, i.address_n, SCHEMA_ADDRESS.match(i.address_n)
|
ctx, keychain, i.address_n, SCHEMA_ADDRESS.match(i.address_n)
|
||||||
)
|
)
|
||||||
|
|
||||||
_validate_outputs(msg.outputs, msg.protocol_magic, msg.network_id)
|
_validate_outputs(keychain, msg.outputs, msg.protocol_magic, msg.network_id)
|
||||||
_validate_certificates(msg.certificates, msg.protocol_magic, msg.network_id)
|
_validate_certificates(msg.certificates, msg.protocol_magic, msg.network_id)
|
||||||
_validate_withdrawals(msg.withdrawals)
|
_validate_withdrawals(msg.withdrawals)
|
||||||
validate_auxiliary_data(msg.auxiliary_data)
|
validate_auxiliary_data(msg.auxiliary_data)
|
||||||
@ -165,7 +166,7 @@ async def _sign_stake_pool_registration_tx(
|
|||||||
_validate_stake_pool_registration_tx_structure(msg)
|
_validate_stake_pool_registration_tx_structure(msg)
|
||||||
|
|
||||||
_ensure_no_signing_inputs(msg.inputs)
|
_ensure_no_signing_inputs(msg.inputs)
|
||||||
_validate_outputs(msg.outputs, msg.protocol_magic, msg.network_id)
|
_validate_outputs(keychain, msg.outputs, msg.protocol_magic, msg.network_id)
|
||||||
_validate_certificates(msg.certificates, msg.protocol_magic, msg.network_id)
|
_validate_certificates(msg.certificates, msg.protocol_magic, msg.network_id)
|
||||||
validate_auxiliary_data(msg.auxiliary_data)
|
validate_auxiliary_data(msg.auxiliary_data)
|
||||||
|
|
||||||
@ -206,6 +207,7 @@ def _validate_stake_pool_registration_tx_structure(msg: CardanoSignTx) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def _validate_outputs(
|
def _validate_outputs(
|
||||||
|
keychain: seed.Keychain,
|
||||||
outputs: list[CardanoTxOutputType],
|
outputs: list[CardanoTxOutputType],
|
||||||
protocol_magic: int,
|
protocol_magic: int,
|
||||||
network_id: int,
|
network_id: int,
|
||||||
@ -229,11 +231,43 @@ def _validate_outputs(
|
|||||||
)
|
)
|
||||||
|
|
||||||
_validate_token_bundle(output.token_bundle)
|
_validate_token_bundle(output.token_bundle)
|
||||||
|
_validate_max_tx_output_size(keychain, output, protocol_magic, network_id)
|
||||||
|
|
||||||
if total_amount > LOVELACE_MAX_SUPPLY:
|
if total_amount > LOVELACE_MAX_SUPPLY:
|
||||||
raise wire.ProcessError("Total transaction amount is out of range!")
|
raise wire.ProcessError("Total transaction amount is out of range!")
|
||||||
|
|
||||||
|
|
||||||
|
def _validate_max_tx_output_size(
|
||||||
|
keychain: seed.Keychain,
|
||||||
|
output: CardanoTxOutputType,
|
||||||
|
protocol_magic: int,
|
||||||
|
network_id: int,
|
||||||
|
) -> None:
|
||||||
|
"""
|
||||||
|
Output value size is currently limited to 4000 bytes at protocol level. Given
|
||||||
|
the maximum transaction size Trezor can handle (~9kB), we also want to enforce
|
||||||
|
this size limit here so that when the limit is raised at protocol level again,
|
||||||
|
Trezor would still not be able to produce larger outputs than it could
|
||||||
|
reliably spend. Once Cardano-transaction signing is refactored to be completely
|
||||||
|
streamed and maximum supported transaction size is thus raised, this limit can be lifted.
|
||||||
|
"""
|
||||||
|
cborized_output = _cborize_output(keychain, output, protocol_magic, network_id)
|
||||||
|
|
||||||
|
assert len(cborized_output) == 2
|
||||||
|
# only the output value is used for counting the size in cardano-ledger-specs
|
||||||
|
cborized_output_value = cborized_output[1]
|
||||||
|
serialized_output_chunks = cbor.encode_streamed(cborized_output_value)
|
||||||
|
|
||||||
|
serialized_output_size = 0
|
||||||
|
for chunk in serialized_output_chunks:
|
||||||
|
serialized_output_size += len(chunk)
|
||||||
|
|
||||||
|
if serialized_output_size > MAX_TX_OUTPUT_SIZE:
|
||||||
|
raise wire.ProcessError(
|
||||||
|
"Maximum tx output value size (%s bytes) exceeded!" % MAX_TX_OUTPUT_SIZE
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def _validate_token_bundle(token_bundle: list[CardanoAssetGroupType]) -> None:
|
def _validate_token_bundle(token_bundle: list[CardanoAssetGroupType]) -> None:
|
||||||
seen_policy_ids = set()
|
seen_policy_ids = set()
|
||||||
for token_group in token_bundle:
|
for token_group in token_bundle:
|
||||||
|
Loading…
Reference in New Issue
Block a user