mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-28 00:58:09 +00:00
Merge remote-tracking branch 'origin/master' into andrewkozlik/slip0039
This commit is contained in:
commit
0a99ad3f13
10
Pipfile.lock
generated
10
Pipfile.lock
generated
@ -247,9 +247,9 @@
|
|||||||
},
|
},
|
||||||
"inform": {
|
"inform": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:15814162c32cb245395234767dc6996e13f32623dbaffd94c22af2eab57644b3"
|
"sha256:9fa86429435552ecba03eeae34fb2864049b16ad59ac888cb125e49f9ad36632"
|
||||||
],
|
],
|
||||||
"version": "==1.15.0"
|
"version": "==1.16.0"
|
||||||
},
|
},
|
||||||
"isort": {
|
"isort": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
@ -381,10 +381,10 @@
|
|||||||
},
|
},
|
||||||
"pbr": {
|
"pbr": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
"sha256:8257baf496c8522437e8a6cfe0f15e00aedc6c0e0e7c9d55eeeeab31e0853843",
|
"sha256:6901995b9b686cb90cceba67a0f6d4d14ae003cd59bc12beb61549bdfbe3bc89",
|
||||||
"sha256:8c361cc353d988e4f5b998555c88098b9d5964c2e11acf7b0d21925a66bb5824"
|
"sha256:d950c64aeea5456bbd147468382a5bb77fe692c13c9f00f0219814ce5b642755"
|
||||||
],
|
],
|
||||||
"version": "==5.1.3"
|
"version": "==5.2.0"
|
||||||
},
|
},
|
||||||
"pep8": {
|
"pep8": {
|
||||||
"hashes": [
|
"hashes": [
|
||||||
|
@ -5,9 +5,9 @@ Monorepo notes
|
|||||||
Generating
|
Generating
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Use the [create-monorepo] script to regenerate from current master(s).
|
Use the [create_monorepo] script to regenerate from current master(s).
|
||||||
|
|
||||||
[create-monorepo]: create-monorepo.py
|
[create_monorepo]: create_monorepo.py
|
||||||
|
|
||||||
|
|
||||||
Structure
|
Structure
|
||||||
|
@ -9,7 +9,7 @@ ENV TOOLCHAIN_FLAVOR=$TOOLCHAIN_FLAVOR
|
|||||||
|
|
||||||
RUN apt-get update && apt-get install -y \
|
RUN apt-get update && apt-get install -y \
|
||||||
build-essential wget git libsodium-dev graphviz \
|
build-essential wget git libsodium-dev graphviz \
|
||||||
valgrind check libssl-dev libusb-1.0-0-dev libudev-dev
|
valgrind check libssl-dev libusb-1.0-0-dev libudev-dev zlib1g-dev
|
||||||
|
|
||||||
# TODO are all apt packages actually needed?
|
# TODO are all apt packages actually needed?
|
||||||
|
|
||||||
|
@ -27,6 +27,12 @@ build core unix:
|
|||||||
untracked: true
|
untracked: true
|
||||||
expire_in: 1 day
|
expire_in: 1 day
|
||||||
|
|
||||||
|
build core unix frozen:
|
||||||
|
stage: build
|
||||||
|
script:
|
||||||
|
- cd core
|
||||||
|
- pipenv run make build_unix_noui_frozen
|
||||||
|
|
||||||
test core unix unit:
|
test core unix unit:
|
||||||
stage: test
|
stage: test
|
||||||
variables:
|
variables:
|
||||||
|
42
common/defs/bitcoin/bellcoin.json
Normal file
42
common/defs/bitcoin/bellcoin.json
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"coin_name": "Bellcoin",
|
||||||
|
"coin_shortcut": "BELL",
|
||||||
|
"coin_label": "Bellcoin",
|
||||||
|
"website": "https://bellcoin.web4u.jp",
|
||||||
|
"github": "https://github.com/bellcoin-org/bellcoin",
|
||||||
|
"maintainer": "ilmango-doge <ilmango.doge@gmail.com>",
|
||||||
|
"curve_name": "secp256k1",
|
||||||
|
"address_type": 25,
|
||||||
|
"address_type_p2sh": 85,
|
||||||
|
"maxfee_kb": 1000000,
|
||||||
|
"minfee_kb": 1000,
|
||||||
|
"signed_message_header": "Bellcoin Signed Message:\n",
|
||||||
|
"hash_genesis_block": "000008f3b6bd10c2d03b06674a006b8d9731f6cb58179ef1eee008cee2209603",
|
||||||
|
"xprv_magic": 76066276,
|
||||||
|
"xpub_magic": 76067358,
|
||||||
|
"xpub_magic_segwit_p2sh": 77429938,
|
||||||
|
"xpub_magic_segwit_native": 78792518,
|
||||||
|
"bech32_prefix": "bm",
|
||||||
|
"cashaddr_prefix": null,
|
||||||
|
"slip44": 25252,
|
||||||
|
"segwit": true,
|
||||||
|
"decred": false,
|
||||||
|
"fork_id": null,
|
||||||
|
"force_bip143": false,
|
||||||
|
"bip115": false,
|
||||||
|
"default_fee_b": {
|
||||||
|
"Normal": 20
|
||||||
|
},
|
||||||
|
"dust_limit": 546,
|
||||||
|
"blocktime_seconds": 60,
|
||||||
|
"uri_prefix": "bellcoin",
|
||||||
|
"min_address_length": 27,
|
||||||
|
"max_address_length": 34,
|
||||||
|
"bitcore": [],
|
||||||
|
"blockbook": [
|
||||||
|
"https://bellcoin-blockbook.ilmango.work",
|
||||||
|
"https://bell.blockbook.ovh"
|
||||||
|
],
|
||||||
|
"cooldown": 100,
|
||||||
|
"consensus_branch_id": null
|
||||||
|
}
|
BIN
common/defs/bitcoin/bellcoin.png
Normal file
BIN
common/defs/bitcoin/bellcoin.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.6 KiB |
@ -3,7 +3,7 @@
|
|||||||
"coin_shortcut": "MUE",
|
"coin_shortcut": "MUE",
|
||||||
"coin_label": "MonetaryUnit",
|
"coin_label": "MonetaryUnit",
|
||||||
"website": "https://www.monetaryunit.org",
|
"website": "https://www.monetaryunit.org",
|
||||||
"github": "https://github.com/muecoin/MUECore",
|
"github": "https://github.com/muecoin/MUE",
|
||||||
"maintainer": "Sotiris Blad <swthrhs@protonmail.com>",
|
"maintainer": "Sotiris Blad <swthrhs@protonmail.com>",
|
||||||
"curve_name": "secp256k1",
|
"curve_name": "secp256k1",
|
||||||
"address_type": 16,
|
"address_type": 16,
|
||||||
@ -11,7 +11,7 @@
|
|||||||
"maxfee_kb": 100000,
|
"maxfee_kb": 100000,
|
||||||
"minfee_kb": 1000,
|
"minfee_kb": 1000,
|
||||||
"signed_message_header": "MonetaryUnit Signed Message:\n",
|
"signed_message_header": "MonetaryUnit Signed Message:\n",
|
||||||
"hash_genesis_block": "000002acd994a815401fbaae0e52404b32857efd0b7b0c77b8e0715ccdd6d437",
|
"hash_genesis_block": "0b58ed450b3819ca54ab0054c4d220ca4f887d21c9e55d2a333173adf76d987f",
|
||||||
"xprv_magic": 76066276,
|
"xprv_magic": 76066276,
|
||||||
"xpub_magic": 76067358,
|
"xpub_magic": 76067358,
|
||||||
"xpub_magic_segwit_p2sh": null,
|
"xpub_magic_segwit_p2sh": null,
|
||||||
@ -33,7 +33,9 @@
|
|||||||
"min_address_length": 27,
|
"min_address_length": 27,
|
||||||
"max_address_length": 34,
|
"max_address_length": 34,
|
||||||
"bitcore": [],
|
"bitcore": [],
|
||||||
"blockbook": [],
|
"blockbook": [
|
||||||
|
"https://blockbook.monetaryunit.org"
|
||||||
|
],
|
||||||
"cooldown": 100,
|
"cooldown": 100,
|
||||||
"consensus_branch_id": null
|
"consensus_branch_id": null
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,5 @@
|
|||||||
"erc20:eth:LINK Platform": true,
|
"erc20:eth:LINK Platform": true,
|
||||||
"erc20:eth:NXX": false,
|
"erc20:eth:NXX": false,
|
||||||
"erc20:eth:Hdp": true,
|
"erc20:eth:Hdp": true,
|
||||||
"erc20:eth:Hdp.ф": true,
|
"erc20:eth:Hdp.ф": true
|
||||||
"erc20:eth:USDT": false,
|
|
||||||
"erc20:eth:BNB": false,
|
|
||||||
"erc20:eth:QTUM": false
|
|
||||||
}
|
}
|
||||||
|
@ -289,6 +289,7 @@
|
|||||||
"erc20:eth:BRD": "1.6.2",
|
"erc20:eth:BRD": "1.6.2",
|
||||||
"erc20:eth:BRLN": "1.8.0",
|
"erc20:eth:BRLN": "1.8.0",
|
||||||
"erc20:eth:BSDC": "1.6.2",
|
"erc20:eth:BSDC": "1.6.2",
|
||||||
|
"erc20:eth:BST": "1.6.2",
|
||||||
"erc20:eth:BTCA": "1.8.0",
|
"erc20:eth:BTCA": "1.8.0",
|
||||||
"erc20:eth:BTCE": "1.6.2",
|
"erc20:eth:BTCE": "1.6.2",
|
||||||
"erc20:eth:BTCL": "1.6.2",
|
"erc20:eth:BTCL": "1.6.2",
|
||||||
@ -1276,7 +1277,7 @@
|
|||||||
"erc20:eth:A18:bde8": "(AUTO) duplicate key",
|
"erc20:eth:A18:bde8": "(AUTO) duplicate key",
|
||||||
"erc20:eth:ATH": "(AUTO) duplicate key",
|
"erc20:eth:ATH": "(AUTO) duplicate key",
|
||||||
"erc20:eth:ATH (AIgatha Token)": "(AUTO) duplicate key",
|
"erc20:eth:ATH (AIgatha Token)": "(AUTO) duplicate key",
|
||||||
"erc20:eth:ATS": "(AUTO) duplicate key",
|
"erc20:eth:ATS": "duplicate key with eth:ATS",
|
||||||
"erc20:eth:BCAP:1f41": "(AUTO) duplicate key",
|
"erc20:eth:BCAP:1f41": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BCAP:ff35": "(AUTO) duplicate key",
|
"erc20:eth:BCAP:ff35": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BKB:5c39": "(AUTO) duplicate key",
|
"erc20:eth:BKB:5c39": "(AUTO) duplicate key",
|
||||||
@ -1285,7 +1286,6 @@
|
|||||||
"erc20:eth:BNC:ef51": "(AUTO) duplicate key",
|
"erc20:eth:BNC:ef51": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BOX:63f5": "(AUTO) duplicate key",
|
"erc20:eth:BOX:63f5": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BOX:e1a1": "(AUTO) duplicate key",
|
"erc20:eth:BOX:e1a1": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BST": "(AUTO) duplicate key",
|
|
||||||
"erc20:eth:BTL (Battle)": "(AUTO) duplicate key",
|
"erc20:eth:BTL (Battle)": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BTL (Bitlle)": "(AUTO) duplicate key",
|
"erc20:eth:BTL (Bitlle)": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BTR:499a": "(AUTO) duplicate key",
|
"erc20:eth:BTR:499a": "(AUTO) duplicate key",
|
||||||
@ -1305,7 +1305,7 @@
|
|||||||
"erc20:eth:COIN:eb54": "(AUTO) duplicate key",
|
"erc20:eth:COIN:eb54": "(AUTO) duplicate key",
|
||||||
"erc20:eth:COSS:6529": "(AUTO) duplicate key",
|
"erc20:eth:COSS:6529": "(AUTO) duplicate key",
|
||||||
"erc20:eth:COSS:9e96": "(AUTO) duplicate key",
|
"erc20:eth:COSS:9e96": "(AUTO) duplicate key",
|
||||||
"erc20:eth:CPC": "(AUTO) duplicate key",
|
"erc20:eth:CPC": "duplicate key with bitcoin:CPC",
|
||||||
"erc20:eth:CPT:88d5": "(AUTO) duplicate key",
|
"erc20:eth:CPT:88d5": "(AUTO) duplicate key",
|
||||||
"erc20:eth:CPT:9b62": "(AUTO) duplicate key",
|
"erc20:eth:CPT:9b62": "(AUTO) duplicate key",
|
||||||
"erc20:eth:DEPO": "(AUTO) duplicate key",
|
"erc20:eth:DEPO": "(AUTO) duplicate key",
|
||||||
@ -1332,7 +1332,7 @@
|
|||||||
"erc20:eth:FANX:7f67": "(AUTO) duplicate key",
|
"erc20:eth:FANX:7f67": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FLMC:04cc": "(AUTO) duplicate key",
|
"erc20:eth:FLMC:04cc": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FLMC:5976": "(AUTO) duplicate key",
|
"erc20:eth:FLMC:5976": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FTC": "(AUTO) duplicate key",
|
"erc20:eth:FTC": "duplicate key with bitcoin:FTC",
|
||||||
"erc20:eth:FUCK:65be": "(AUTO) duplicate key",
|
"erc20:eth:FUCK:65be": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FUCK:ab16": "(AUTO) duplicate key",
|
"erc20:eth:FUCK:ab16": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FXC:4a57": "(AUTO) duplicate key",
|
"erc20:eth:FXC:4a57": "(AUTO) duplicate key",
|
||||||
@ -1386,7 +1386,7 @@
|
|||||||
"erc20:eth:PRPS:7641": "(AUTO) duplicate key",
|
"erc20:eth:PRPS:7641": "(AUTO) duplicate key",
|
||||||
"erc20:eth:PRPS:d94f": "(AUTO) duplicate key",
|
"erc20:eth:PRPS:d94f": "(AUTO) duplicate key",
|
||||||
"erc20:eth:PRPS:e40c": "(AUTO) duplicate key",
|
"erc20:eth:PRPS:e40c": "(AUTO) duplicate key",
|
||||||
"erc20:eth:PTC": "(AUTO) duplicate key",
|
"erc20:eth:PTC": "duplicate key with bitcoin:PTC",
|
||||||
"erc20:eth:RCT:13f2": "(AUTO) duplicate key",
|
"erc20:eth:RCT:13f2": "(AUTO) duplicate key",
|
||||||
"erc20:eth:RCT:2a3a": "(AUTO) duplicate key",
|
"erc20:eth:RCT:2a3a": "(AUTO) duplicate key",
|
||||||
"erc20:eth:RING:86e5": "(AUTO) duplicate key",
|
"erc20:eth:RING:86e5": "(AUTO) duplicate key",
|
||||||
@ -1396,7 +1396,7 @@
|
|||||||
"erc20:eth:SKRP:324a": "(AUTO) duplicate key",
|
"erc20:eth:SKRP:324a": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SKRP:6e34": "(AUTO) duplicate key",
|
"erc20:eth:SKRP:6e34": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SKRP:fdfe": "(AUTO) duplicate key",
|
"erc20:eth:SKRP:fdfe": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SMART": "(AUTO) duplicate key",
|
"erc20:eth:SMART": "duplicate key with bitcoin:SMART",
|
||||||
"erc20:eth:SMT:2dcf": "(AUTO) duplicate key",
|
"erc20:eth:SMT:2dcf": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SMT:55f9": "(AUTO) duplicate key",
|
"erc20:eth:SMT:55f9": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SMT:78eb": "(AUTO) duplicate key",
|
"erc20:eth:SMT:78eb": "(AUTO) duplicate key",
|
||||||
@ -1408,7 +1408,6 @@
|
|||||||
"erc20:eth:TIC:7243": "(AUTO) duplicate key",
|
"erc20:eth:TIC:7243": "(AUTO) duplicate key",
|
||||||
"erc20:eth:TICO:7f4b": "(AUTO) duplicate key",
|
"erc20:eth:TICO:7f4b": "(AUTO) duplicate key",
|
||||||
"erc20:eth:TICO:a5db": "(AUTO) duplicate key",
|
"erc20:eth:TICO:a5db": "(AUTO) duplicate key",
|
||||||
"erc20:eth:TRC": "(AUTO) duplicate key",
|
|
||||||
"erc20:eth:TRX": "switched to custom network",
|
"erc20:eth:TRX": "switched to custom network",
|
||||||
"erc20:eth:UMKA:105d": "(AUTO) duplicate key",
|
"erc20:eth:UMKA:105d": "(AUTO) duplicate key",
|
||||||
"erc20:eth:UMKA:8e5a": "(AUTO) duplicate key",
|
"erc20:eth:UMKA:8e5a": "(AUTO) duplicate key",
|
||||||
@ -1637,6 +1636,7 @@
|
|||||||
"erc20:eth:BRD": "2.0.7",
|
"erc20:eth:BRD": "2.0.7",
|
||||||
"erc20:eth:BRLN": "2.0.10",
|
"erc20:eth:BRLN": "2.0.10",
|
||||||
"erc20:eth:BSDC": "2.0.7",
|
"erc20:eth:BSDC": "2.0.7",
|
||||||
|
"erc20:eth:BST": "2.0.7",
|
||||||
"erc20:eth:BTCA": "2.0.10",
|
"erc20:eth:BTCA": "2.0.10",
|
||||||
"erc20:eth:BTCE": "2.0.7",
|
"erc20:eth:BTCE": "2.0.7",
|
||||||
"erc20:eth:BTCL": "2.0.7",
|
"erc20:eth:BTCL": "2.0.7",
|
||||||
@ -2627,7 +2627,7 @@
|
|||||||
"erc20:eth:A18:bde8": "(AUTO) duplicate key",
|
"erc20:eth:A18:bde8": "(AUTO) duplicate key",
|
||||||
"erc20:eth:ATH": "(AUTO) duplicate key",
|
"erc20:eth:ATH": "(AUTO) duplicate key",
|
||||||
"erc20:eth:ATH (AIgatha Token)": "(AUTO) duplicate key",
|
"erc20:eth:ATH (AIgatha Token)": "(AUTO) duplicate key",
|
||||||
"erc20:eth:ATS": "(AUTO) duplicate key",
|
"erc20:eth:ATS": "duplicate key with eth:ATS",
|
||||||
"erc20:eth:BCAP:1f41": "(AUTO) duplicate key",
|
"erc20:eth:BCAP:1f41": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BCAP:ff35": "(AUTO) duplicate key",
|
"erc20:eth:BCAP:ff35": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BKB:5c39": "(AUTO) duplicate key",
|
"erc20:eth:BKB:5c39": "(AUTO) duplicate key",
|
||||||
@ -2636,7 +2636,6 @@
|
|||||||
"erc20:eth:BNC:ef51": "(AUTO) duplicate key",
|
"erc20:eth:BNC:ef51": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BOX:63f5": "(AUTO) duplicate key",
|
"erc20:eth:BOX:63f5": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BOX:e1a1": "(AUTO) duplicate key",
|
"erc20:eth:BOX:e1a1": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BST": "(AUTO) duplicate key",
|
|
||||||
"erc20:eth:BTL (Battle)": "(AUTO) duplicate key",
|
"erc20:eth:BTL (Battle)": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BTL (Bitlle)": "(AUTO) duplicate key",
|
"erc20:eth:BTL (Bitlle)": "(AUTO) duplicate key",
|
||||||
"erc20:eth:BTR:499a": "(AUTO) duplicate key",
|
"erc20:eth:BTR:499a": "(AUTO) duplicate key",
|
||||||
@ -2656,7 +2655,7 @@
|
|||||||
"erc20:eth:COIN:eb54": "(AUTO) duplicate key",
|
"erc20:eth:COIN:eb54": "(AUTO) duplicate key",
|
||||||
"erc20:eth:COSS:6529": "(AUTO) duplicate key",
|
"erc20:eth:COSS:6529": "(AUTO) duplicate key",
|
||||||
"erc20:eth:COSS:9e96": "(AUTO) duplicate key",
|
"erc20:eth:COSS:9e96": "(AUTO) duplicate key",
|
||||||
"erc20:eth:CPC": "(AUTO) duplicate key",
|
"erc20:eth:CPC": "duplicate key with bitcoin:CPC",
|
||||||
"erc20:eth:CPT:88d5": "(AUTO) duplicate key",
|
"erc20:eth:CPT:88d5": "(AUTO) duplicate key",
|
||||||
"erc20:eth:CPT:9b62": "(AUTO) duplicate key",
|
"erc20:eth:CPT:9b62": "(AUTO) duplicate key",
|
||||||
"erc20:eth:DEPO": "(AUTO) duplicate key",
|
"erc20:eth:DEPO": "(AUTO) duplicate key",
|
||||||
@ -2683,7 +2682,7 @@
|
|||||||
"erc20:eth:FANX:7f67": "(AUTO) duplicate key",
|
"erc20:eth:FANX:7f67": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FLMC:04cc": "(AUTO) duplicate key",
|
"erc20:eth:FLMC:04cc": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FLMC:5976": "(AUTO) duplicate key",
|
"erc20:eth:FLMC:5976": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FTC": "(AUTO) duplicate key",
|
"erc20:eth:FTC": "duplicate key with bitcoin:FTC",
|
||||||
"erc20:eth:FUCK:65be": "(AUTO) duplicate key",
|
"erc20:eth:FUCK:65be": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FUCK:ab16": "(AUTO) duplicate key",
|
"erc20:eth:FUCK:ab16": "(AUTO) duplicate key",
|
||||||
"erc20:eth:FXC:4a57": "(AUTO) duplicate key",
|
"erc20:eth:FXC:4a57": "(AUTO) duplicate key",
|
||||||
@ -2737,7 +2736,7 @@
|
|||||||
"erc20:eth:PRPS:7641": "(AUTO) duplicate key",
|
"erc20:eth:PRPS:7641": "(AUTO) duplicate key",
|
||||||
"erc20:eth:PRPS:d94f": "(AUTO) duplicate key",
|
"erc20:eth:PRPS:d94f": "(AUTO) duplicate key",
|
||||||
"erc20:eth:PRPS:e40c": "(AUTO) duplicate key",
|
"erc20:eth:PRPS:e40c": "(AUTO) duplicate key",
|
||||||
"erc20:eth:PTC": "(AUTO) duplicate key",
|
"erc20:eth:PTC": "duplicate key with bitcoin:PTC",
|
||||||
"erc20:eth:RCT:13f2": "(AUTO) duplicate key",
|
"erc20:eth:RCT:13f2": "(AUTO) duplicate key",
|
||||||
"erc20:eth:RCT:2a3a": "(AUTO) duplicate key",
|
"erc20:eth:RCT:2a3a": "(AUTO) duplicate key",
|
||||||
"erc20:eth:RING:86e5": "(AUTO) duplicate key",
|
"erc20:eth:RING:86e5": "(AUTO) duplicate key",
|
||||||
@ -2747,7 +2746,7 @@
|
|||||||
"erc20:eth:SKRP:324a": "(AUTO) duplicate key",
|
"erc20:eth:SKRP:324a": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SKRP:6e34": "(AUTO) duplicate key",
|
"erc20:eth:SKRP:6e34": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SKRP:fdfe": "(AUTO) duplicate key",
|
"erc20:eth:SKRP:fdfe": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SMART": "(AUTO) duplicate key",
|
"erc20:eth:SMART": "duplicate key with bitcoin:SMART",
|
||||||
"erc20:eth:SMT:2dcf": "(AUTO) duplicate key",
|
"erc20:eth:SMT:2dcf": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SMT:55f9": "(AUTO) duplicate key",
|
"erc20:eth:SMT:55f9": "(AUTO) duplicate key",
|
||||||
"erc20:eth:SMT:78eb": "(AUTO) duplicate key",
|
"erc20:eth:SMT:78eb": "(AUTO) duplicate key",
|
||||||
@ -2759,7 +2758,6 @@
|
|||||||
"erc20:eth:TIC:7243": "(AUTO) duplicate key",
|
"erc20:eth:TIC:7243": "(AUTO) duplicate key",
|
||||||
"erc20:eth:TICO:7f4b": "(AUTO) duplicate key",
|
"erc20:eth:TICO:7f4b": "(AUTO) duplicate key",
|
||||||
"erc20:eth:TICO:a5db": "(AUTO) duplicate key",
|
"erc20:eth:TICO:a5db": "(AUTO) duplicate key",
|
||||||
"erc20:eth:TRC": "(AUTO) duplicate key",
|
|
||||||
"erc20:eth:TRX": "switched to custom network",
|
"erc20:eth:TRX": "switched to custom network",
|
||||||
"erc20:eth:UMKA:105d": "(AUTO) duplicate key",
|
"erc20:eth:UMKA:105d": "(AUTO) duplicate key",
|
||||||
"erc20:eth:UMKA:8e5a": "(AUTO) duplicate key",
|
"erc20:eth:UMKA:8e5a": "(AUTO) duplicate key",
|
||||||
|
@ -304,17 +304,19 @@ def support_info_single(support_data, coin):
|
|||||||
key = coin["key"]
|
key = coin["key"]
|
||||||
dup = coin.get("duplicate")
|
dup = coin.get("duplicate")
|
||||||
for device, values in support_data.items():
|
for device, values in support_data.items():
|
||||||
if dup and is_token(coin):
|
if key in values["unsupported"]:
|
||||||
support_value = False
|
|
||||||
elif key in values["unsupported"]:
|
|
||||||
support_value = False
|
support_value = False
|
||||||
elif key in values["supported"]:
|
elif key in values["supported"]:
|
||||||
support_value = values["supported"][key]
|
support_value = values["supported"][key]
|
||||||
elif device in MISSING_SUPPORT_MEANS_NO:
|
elif device in MISSING_SUPPORT_MEANS_NO:
|
||||||
support_value = False
|
support_value = False
|
||||||
elif is_token(coin):
|
elif is_token(coin):
|
||||||
# tokens are implicitly supported in next release
|
if dup:
|
||||||
support_value = "soon"
|
# if duplicate token that is not explicitly listed, it's unsupported
|
||||||
|
support_value = False
|
||||||
|
else:
|
||||||
|
# otherwise implicitly supported in next
|
||||||
|
support_value = "soon"
|
||||||
else:
|
else:
|
||||||
support_value = None
|
support_value = None
|
||||||
support_info[device] = support_value
|
support_info[device] = support_value
|
||||||
@ -409,7 +411,7 @@ def deduplicate_erc20(buckets, networks):
|
|||||||
This function works on results of `mark_duplicate_shortcuts`.
|
This function works on results of `mark_duplicate_shortcuts`.
|
||||||
|
|
||||||
Buckets that contain at least one non-token are ignored - symbol collisions
|
Buckets that contain at least one non-token are ignored - symbol collisions
|
||||||
with non-tokens are always fatal.
|
with non-tokens always apply.
|
||||||
|
|
||||||
Otherwise the following rules are applied:
|
Otherwise the following rules are applied:
|
||||||
|
|
||||||
@ -502,8 +504,6 @@ def collect_coin_info():
|
|||||||
`erc20` for ERC20 tokens,
|
`erc20` for ERC20 tokens,
|
||||||
`nem` for NEM mosaics,
|
`nem` for NEM mosaics,
|
||||||
`misc` for other networks.
|
`misc` for other networks.
|
||||||
|
|
||||||
Automatically removes duplicate symbols from the result.
|
|
||||||
"""
|
"""
|
||||||
all_coins = CoinsInfo(
|
all_coins = CoinsInfo(
|
||||||
bitcoin=_load_btc_coins(),
|
bitcoin=_load_btc_coins(),
|
||||||
@ -548,13 +548,14 @@ def coin_info_with_duplicates():
|
|||||||
|
|
||||||
|
|
||||||
def coin_info():
|
def coin_info():
|
||||||
"""Collects coin info, marks and prunes duplicate ERC20 symbols, fills out support
|
"""Collects coin info, fills out support info and returns the result.
|
||||||
info and returns the result.
|
|
||||||
|
Does not auto-delete duplicates. This should now be based on support info.
|
||||||
"""
|
"""
|
||||||
all_coins, _ = coin_info_with_duplicates()
|
all_coins, _ = coin_info_with_duplicates()
|
||||||
all_coins["erc20"] = [
|
# all_coins["erc20"] = [
|
||||||
coin for coin in all_coins["erc20"] if not coin.get("duplicate")
|
# coin for coin in all_coins["erc20"] if not coin.get("duplicate")
|
||||||
]
|
# ]
|
||||||
return all_coins
|
return all_coins
|
||||||
|
|
||||||
|
|
||||||
|
@ -145,6 +145,13 @@ def render_file(src, dst, coins, support_info):
|
|||||||
# ====== validation functions ======
|
# ====== validation functions ======
|
||||||
|
|
||||||
|
|
||||||
|
def mark_unsupported(support_info, coins):
|
||||||
|
for coin in coins:
|
||||||
|
key = coin["key"]
|
||||||
|
# checking for explicit False because None means unknown
|
||||||
|
coin["unsupported"] = all(v is False for v in support_info[key].values())
|
||||||
|
|
||||||
|
|
||||||
def highlight_key(coin, color):
|
def highlight_key(coin, color):
|
||||||
"""Return a colorful string where the SYMBOL part is bold."""
|
"""Return a colorful string where the SYMBOL part is bold."""
|
||||||
keylist = coin["key"].split(":")
|
keylist = coin["key"].split(":")
|
||||||
@ -193,7 +200,6 @@ def check_eth(coins):
|
|||||||
|
|
||||||
def check_btc(coins):
|
def check_btc(coins):
|
||||||
check_passed = True
|
check_passed = True
|
||||||
support_infos = coin_info.support_info(coins)
|
|
||||||
|
|
||||||
# validate individual coin data
|
# validate individual coin data
|
||||||
for coin in coins:
|
for coin in coins:
|
||||||
@ -213,7 +219,7 @@ def check_btc(coins):
|
|||||||
color = "green"
|
color = "green"
|
||||||
elif name == "Bitcoin":
|
elif name == "Bitcoin":
|
||||||
color = "red"
|
color = "red"
|
||||||
elif coin.get("unsupported"):
|
elif coin["unsupported"]:
|
||||||
color = "grey"
|
color = "grey"
|
||||||
prefix = crayon("blue", "(X)", bold=True)
|
prefix = crayon("blue", "(X)", bold=True)
|
||||||
else:
|
else:
|
||||||
@ -239,15 +245,9 @@ def check_btc(coins):
|
|||||||
and not c["name"].endswith("Regtest")
|
and not c["name"].endswith("Regtest")
|
||||||
]
|
]
|
||||||
|
|
||||||
have_bitcoin = False
|
have_bitcoin = any(coin["name"] == "Bitcoin" for coin in mainnets)
|
||||||
for coin in mainnets:
|
supported_mainnets = [c for c in mainnets if not c["unsupported"]]
|
||||||
if coin["name"] == "Bitcoin":
|
supported_networks = [c for c in bucket if not c["unsupported"]]
|
||||||
have_bitcoin = True
|
|
||||||
if all(v is False for k, v in support_infos[coin["key"]].items()):
|
|
||||||
coin["unsupported"] = True
|
|
||||||
|
|
||||||
supported_mainnets = [c for c in mainnets if not c.get("unsupported")]
|
|
||||||
supported_networks = [c for c in bucket if not c.get("unsupported")]
|
|
||||||
|
|
||||||
if len(mainnets) > 1:
|
if len(mainnets) > 1:
|
||||||
if (have_bitcoin or strict) and len(supported_networks) > 1:
|
if (have_bitcoin or strict) and len(supported_networks) > 1:
|
||||||
@ -290,7 +290,7 @@ def check_btc(coins):
|
|||||||
return check_passed
|
return check_passed
|
||||||
|
|
||||||
|
|
||||||
def check_dups(buckets, print_at_level=logging.ERROR):
|
def check_dups(buckets, print_at_level=logging.WARNING):
|
||||||
"""Analyze and pretty-print results of `coin_info.mark_duplicate_shortcuts`.
|
"""Analyze and pretty-print results of `coin_info.mark_duplicate_shortcuts`.
|
||||||
|
|
||||||
`print_at_level` can be one of logging levels.
|
`print_at_level` can be one of logging levels.
|
||||||
@ -305,15 +305,19 @@ def check_dups(buckets, print_at_level=logging.ERROR):
|
|||||||
"""Colorize coins. Tokens are cyan, nontokens are red. Coins that are NOT
|
"""Colorize coins. Tokens are cyan, nontokens are red. Coins that are NOT
|
||||||
marked duplicate get a green asterisk.
|
marked duplicate get a green asterisk.
|
||||||
"""
|
"""
|
||||||
if coin_info.is_token(coin):
|
prefix = ""
|
||||||
|
if coin["unsupported"]:
|
||||||
|
color = "grey"
|
||||||
|
prefix = crayon("blue", "(X)", bold=True)
|
||||||
|
elif coin_info.is_token(coin):
|
||||||
color = "cyan"
|
color = "cyan"
|
||||||
else:
|
else:
|
||||||
color = "red"
|
color = "red"
|
||||||
highlighted = highlight_key(coin, color)
|
|
||||||
if not coin.get("duplicate"):
|
if not coin.get("duplicate"):
|
||||||
prefix = crayon("green", "*", bold=True)
|
prefix = crayon("green", "*", bold=True) + prefix
|
||||||
else:
|
|
||||||
prefix = ""
|
highlighted = highlight_key(coin, color)
|
||||||
return "{}{}".format(prefix, highlighted)
|
return "{}{}".format(prefix, highlighted)
|
||||||
|
|
||||||
check_passed = True
|
check_passed = True
|
||||||
@ -323,17 +327,29 @@ def check_dups(buckets, print_at_level=logging.ERROR):
|
|||||||
if not bucket:
|
if not bucket:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
supported = [coin for coin in bucket if not coin["unsupported"]]
|
||||||
nontokens = [coin for coin in bucket if not coin_info.is_token(coin)]
|
nontokens = [coin for coin in bucket if not coin_info.is_token(coin)]
|
||||||
|
cleared = not any(coin.get("duplicate") for coin in bucket)
|
||||||
|
|
||||||
# string generation
|
# string generation
|
||||||
dup_str = ", ".join(coin_str(coin) for coin in bucket)
|
dup_str = ", ".join(coin_str(coin) for coin in bucket)
|
||||||
if not nontokens:
|
if len(nontokens) > 1:
|
||||||
level = logging.DEBUG
|
# Two or more colliding nontokens. This is always fatal.
|
||||||
elif len(nontokens) == 1:
|
# XXX consider allowing two nontokens as long as only one is supported?
|
||||||
level = logging.INFO
|
|
||||||
else:
|
|
||||||
level = logging.ERROR
|
level = logging.ERROR
|
||||||
check_passed = False
|
check_passed = False
|
||||||
|
elif len(supported) > 1:
|
||||||
|
# more than one supported coin in bucket
|
||||||
|
if cleared:
|
||||||
|
# some previous step has explicitly marked them as non-duplicate
|
||||||
|
level = logging.INFO
|
||||||
|
else:
|
||||||
|
# at most 1 non-token - we tenatively allow token collisions
|
||||||
|
# when explicitly marked as supported
|
||||||
|
level = logging.WARNING
|
||||||
|
else:
|
||||||
|
# At most 1 supported coin, at most 1 non-token. This is informational only.
|
||||||
|
level = logging.DEBUG
|
||||||
|
|
||||||
# deciding whether to print
|
# deciding whether to print
|
||||||
if level < print_at_level:
|
if level < print_at_level:
|
||||||
@ -342,7 +358,7 @@ def check_dups(buckets, print_at_level=logging.ERROR):
|
|||||||
if symbol == "_override":
|
if symbol == "_override":
|
||||||
print_log(level, "force-set duplicates:", dup_str)
|
print_log(level, "force-set duplicates:", dup_str)
|
||||||
else:
|
else:
|
||||||
print_log(level, "duplicate symbol {}:".format(symbol), dup_str)
|
print_log(level, "duplicate symbol {}:".format(symbol.upper()), dup_str)
|
||||||
|
|
||||||
return check_passed
|
return check_passed
|
||||||
|
|
||||||
@ -571,6 +587,8 @@ def check(backend, icons, show_duplicates):
|
|||||||
raise click.ClickException("Missing requirements for icon check")
|
raise click.ClickException("Missing requirements for icon check")
|
||||||
|
|
||||||
defs, buckets = coin_info.coin_info_with_duplicates()
|
defs, buckets = coin_info.coin_info_with_duplicates()
|
||||||
|
support_info = coin_info.support_info(defs)
|
||||||
|
mark_unsupported(support_info, defs.as_list())
|
||||||
all_checks_passed = True
|
all_checks_passed = True
|
||||||
|
|
||||||
print("Checking BTC-like coins...")
|
print("Checking BTC-like coins...")
|
||||||
@ -586,7 +604,7 @@ def check(backend, icons, show_duplicates):
|
|||||||
elif show_duplicates == "nontoken":
|
elif show_duplicates == "nontoken":
|
||||||
dup_level = logging.INFO
|
dup_level = logging.INFO
|
||||||
else:
|
else:
|
||||||
dup_level = logging.ERROR
|
dup_level = logging.WARNING
|
||||||
print("Checking unexpected duplicates...")
|
print("Checking unexpected duplicates...")
|
||||||
if not check_dups(buckets, dup_level):
|
if not check_dups(buckets, dup_level):
|
||||||
all_checks_passed = False
|
all_checks_passed = False
|
||||||
|
@ -72,11 +72,7 @@ def print_support(coin):
|
|||||||
key, name, shortcut = coin["key"], coin["name"], coin["shortcut"]
|
key, name, shortcut = coin["key"], coin["name"], coin["shortcut"]
|
||||||
print(f"{key} - {name} ({shortcut})")
|
print(f"{key} - {name} ({shortcut})")
|
||||||
if coin.get("duplicate"):
|
if coin.get("duplicate"):
|
||||||
if coin_info.is_token(coin):
|
print(" * DUPLICATE SYMBOL")
|
||||||
print(" * DUPLICATE SYMBOL (no support)")
|
|
||||||
return
|
|
||||||
else:
|
|
||||||
print(" * DUPLICATE SYMBOL")
|
|
||||||
for dev, where in SUPPORT_INFO.items():
|
for dev, where in SUPPORT_INFO.items():
|
||||||
missing_means_no = dev in coin_info.MISSING_SUPPORT_MEANS_NO
|
missing_means_no = dev in coin_info.MISSING_SUPPORT_MEANS_NO
|
||||||
print(" *", dev, ":", support_value(where, key, missing_means_no))
|
print(" *", dev, ":", support_value(where, key, missing_means_no))
|
||||||
@ -86,7 +82,7 @@ def print_support(coin):
|
|||||||
|
|
||||||
|
|
||||||
def check_support_values():
|
def check_support_values():
|
||||||
def _check_value_version_soon(val):
|
def _check_value_version_soon(value):
|
||||||
if not isinstance(value, str):
|
if not isinstance(value, str):
|
||||||
raise ValueError(f"non-str value: {value}")
|
raise ValueError(f"non-str value: {value}")
|
||||||
|
|
||||||
@ -131,8 +127,6 @@ def find_unsupported_coins(coins_dict):
|
|||||||
|
|
||||||
result[device] = []
|
result[device] = []
|
||||||
for key, coin in coins_dict.items():
|
for key, coin in coins_dict.items():
|
||||||
if coin.get("duplicate") and coin_info.is_token(coin):
|
|
||||||
continue
|
|
||||||
if key not in support_set:
|
if key not in support_set:
|
||||||
result[device].append(coin)
|
result[device].append(coin)
|
||||||
|
|
||||||
@ -201,6 +195,16 @@ def process_erc20(coins_dict):
|
|||||||
clear_support(device, key)
|
clear_support(device, key)
|
||||||
|
|
||||||
|
|
||||||
|
def clear_erc20_mixed_buckets(buckets):
|
||||||
|
for bucket in buckets.values():
|
||||||
|
tokens = [coin for coin in bucket if coin_info.is_token(coin)]
|
||||||
|
if tokens == bucket:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if len(tokens) == 1:
|
||||||
|
tokens[0]["duplicate"] = False
|
||||||
|
|
||||||
|
|
||||||
@click.group()
|
@click.group()
|
||||||
def cli():
|
def cli():
|
||||||
pass
|
pass
|
||||||
@ -213,7 +217,8 @@ def fix(dry_run):
|
|||||||
|
|
||||||
Prunes orphaned keys and ensures that ERC20 duplicate info matches support info.
|
Prunes orphaned keys and ensures that ERC20 duplicate info matches support info.
|
||||||
"""
|
"""
|
||||||
all_coins, _ = coin_info.coin_info_with_duplicates()
|
all_coins, buckets = coin_info.coin_info_with_duplicates()
|
||||||
|
clear_erc20_mixed_buckets(buckets)
|
||||||
coins_dict = all_coins.as_dict()
|
coins_dict = all_coins.as_dict()
|
||||||
|
|
||||||
orphaned = find_orphaned_support_keys(coins_dict)
|
orphaned = find_orphaned_support_keys(coins_dict)
|
||||||
@ -246,7 +251,8 @@ def check(check_tokens, ignore_missing):
|
|||||||
support info, but will not fail when missing coins are found. This is
|
support info, but will not fail when missing coins are found. This is
|
||||||
useful in Travis.
|
useful in Travis.
|
||||||
"""
|
"""
|
||||||
all_coins, _ = coin_info.coin_info_with_duplicates()
|
all_coins, buckets = coin_info.coin_info_with_duplicates()
|
||||||
|
clear_erc20_mixed_buckets(buckets)
|
||||||
coins_dict = all_coins.as_dict()
|
coins_dict = all_coins.as_dict()
|
||||||
checks_ok = True
|
checks_ok = True
|
||||||
|
|
||||||
@ -466,12 +472,6 @@ def set_support_value(key, entries, reason):
|
|||||||
(or null, in case of trezor1/2)
|
(or null, in case of trezor1/2)
|
||||||
Setting variable to empty ("trezor1=") will set to null, or clear the entry.
|
Setting variable to empty ("trezor1=") will set to null, or clear the entry.
|
||||||
Setting to "soon", "planned", "2.1.1" etc. will set the literal string.
|
Setting to "soon", "planned", "2.1.1" etc. will set the literal string.
|
||||||
|
|
||||||
Entries that are always present:
|
|
||||||
trezor1 trezor2 webwallet connect
|
|
||||||
|
|
||||||
Entries with other names will be inserted into "others". This is a good place
|
|
||||||
to store links to 3rd party software, such as Electrum forks or claim tools.
|
|
||||||
"""
|
"""
|
||||||
defs, _ = coin_info.coin_info_with_duplicates()
|
defs, _ = coin_info.coin_info_with_duplicates()
|
||||||
coins = defs.as_dict()
|
coins = defs.as_dict()
|
||||||
@ -483,7 +483,6 @@ def set_support_value(key, entries, reason):
|
|||||||
if coins[key].get("duplicate") and coin_info.is_token(coins[key]):
|
if coins[key].get("duplicate") and coin_info.is_token(coins[key]):
|
||||||
shortcut = coins[key]["shortcut"]
|
shortcut = coins[key]["shortcut"]
|
||||||
click.echo(f"Note: shortcut {shortcut} is a duplicate.")
|
click.echo(f"Note: shortcut {shortcut} is a duplicate.")
|
||||||
click.echo(f"Coin will NOT be listed regardless of support.json status.")
|
|
||||||
|
|
||||||
for entry in entries:
|
for entry in entries:
|
||||||
try:
|
try:
|
||||||
|
@ -108,6 +108,9 @@ build_unix: res ## build unix port
|
|||||||
build_unix_noui: res ## build unix port without UI support
|
build_unix_noui: res ## build unix port without UI support
|
||||||
$(SCONS) CFLAGS="$(CFLAGS)" $(UNIX_BUILD_DIR)/micropython $(UNIX_PORT_OPTS) TREZOR_EMULATOR_NOUI=1
|
$(SCONS) CFLAGS="$(CFLAGS)" $(UNIX_BUILD_DIR)/micropython $(UNIX_PORT_OPTS) TREZOR_EMULATOR_NOUI=1
|
||||||
|
|
||||||
|
build_unix_noui_frozen: res build_cross ## build unix port without UI support with frozen modules
|
||||||
|
$(SCONS) CFLAGS="$(CFLAGS)" $(UNIX_BUILD_DIR)/micropython $(UNIX_PORT_OPTS) TREZOR_EMULATOR_NOUI=1 TREZOR_FROZEN=1
|
||||||
|
|
||||||
build_unix_raspi: res ## build unix port for Raspberry Pi
|
build_unix_raspi: res ## build unix port for Raspberry Pi
|
||||||
$(SCONS) CFLAGS="$(CFLAGS)" $(UNIX_BUILD_DIR)/micropython $(UNIX_PORT_OPTS) TREZOR_EMULATOR_RASPI=1
|
$(SCONS) CFLAGS="$(CFLAGS)" $(UNIX_BUILD_DIR)/micropython $(UNIX_PORT_OPTS) TREZOR_EMULATOR_RASPI=1
|
||||||
|
|
||||||
|
@ -412,24 +412,25 @@ env.Ignore(qstr_collected, qstr_generated)
|
|||||||
# Frozen modules
|
# Frozen modules
|
||||||
#
|
#
|
||||||
|
|
||||||
if env.get('TREZOR_MODEL') == '1':
|
if True:
|
||||||
SOURCE_PY_DIR = 'src1/'
|
if env.get('TREZOR_MODEL') == '1':
|
||||||
else:
|
SOURCE_PY_DIR = 'src1/'
|
||||||
SOURCE_PY_DIR = 'src/'
|
else:
|
||||||
|
SOURCE_PY_DIR = 'src/'
|
||||||
|
|
||||||
# TODO: recursive Glob
|
# TODO: recursive Glob
|
||||||
SOURCE_PY = Glob(SOURCE_PY_DIR + '*.py')
|
SOURCE_PY = Glob(SOURCE_PY_DIR + '*.py')
|
||||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*.py'))
|
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*.py'))
|
||||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*.py'))
|
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*.py'))
|
||||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*.py'))
|
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*.py'))
|
||||||
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*/*.py'))
|
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*/*.py'))
|
||||||
|
|
||||||
source_mpy = env.FrozenModule(source=SOURCE_PY, source_dir=SOURCE_PY_DIR)
|
source_mpy = env.FrozenModule(source=SOURCE_PY, source_dir=SOURCE_PY_DIR)
|
||||||
|
|
||||||
source_mpyc = env.FrozenCFile(
|
source_mpyc = env.FrozenCFile(
|
||||||
target='frozen_mpy.c', source=source_mpy, qstr_header=qstr_preprocessed)
|
target='frozen_mpy.c', source=source_mpy, qstr_header=qstr_preprocessed)
|
||||||
|
|
||||||
env.Depends(source_mpyc, qstr_generated)
|
env.Depends(source_mpyc, qstr_generated)
|
||||||
|
|
||||||
#
|
#
|
||||||
# static secp256-zkp ecmult context
|
# static secp256-zkp ecmult context
|
||||||
@ -464,7 +465,8 @@ obj_program.extend(env.Object(source=SOURCE_MICROPYTHON))
|
|||||||
obj_program.extend(env.Object(source=SOURCE_MICROPYTHON_SPEED, COPT='-O3'))
|
obj_program.extend(env.Object(source=SOURCE_MICROPYTHON_SPEED, COPT='-O3'))
|
||||||
obj_program.extend(env.Object(source=SOURCE_STMHAL))
|
obj_program.extend(env.Object(source=SOURCE_STMHAL))
|
||||||
obj_program.extend(env.Object(source=SOURCE_TREZORHAL))
|
obj_program.extend(env.Object(source=SOURCE_TREZORHAL))
|
||||||
obj_program.extend(env.Object(source=source_mpyc))
|
if True:
|
||||||
|
obj_program.extend(env.Object(source=source_mpyc))
|
||||||
|
|
||||||
VENDORHEADER = 'embed/vendorheader/vendorheader_' + ('unsafe_signed_prod.bin' if ARGUMENTS.get('PRODUCTION', '0') == '0' else 'satoshilabs_signed_prod.bin')
|
VENDORHEADER = 'embed/vendorheader/vendorheader_' + ('unsafe_signed_prod.bin' if ARGUMENTS.get('PRODUCTION', '0') == '0' else 'satoshilabs_signed_prod.bin')
|
||||||
|
|
||||||
|
@ -5,9 +5,8 @@ import os
|
|||||||
CCFLAGS_MOD = ''
|
CCFLAGS_MOD = ''
|
||||||
CPPPATH_MOD = []
|
CPPPATH_MOD = []
|
||||||
CPPDEFINES_MOD = []
|
CPPDEFINES_MOD = []
|
||||||
SOURCE_MOD_SECP256K1_ZKP = []
|
|
||||||
SOURCE_MOD = []
|
SOURCE_MOD = []
|
||||||
LIBS_MOD = []
|
SOURCE_MOD_SECP256K1_ZKP = []
|
||||||
|
|
||||||
# modtrezorconfig
|
# modtrezorconfig
|
||||||
CPPPATH_MOD += [
|
CPPPATH_MOD += [
|
||||||
@ -73,6 +72,7 @@ SOURCE_MOD += [
|
|||||||
'vendor/trezor-crypto/hasher.c',
|
'vendor/trezor-crypto/hasher.c',
|
||||||
'vendor/trezor-crypto/hmac.c',
|
'vendor/trezor-crypto/hmac.c',
|
||||||
'vendor/trezor-crypto/memzero.c',
|
'vendor/trezor-crypto/memzero.c',
|
||||||
|
'vendor/trezor-crypto/nem.c',
|
||||||
'vendor/trezor-crypto/nist256p1.c',
|
'vendor/trezor-crypto/nist256p1.c',
|
||||||
'vendor/trezor-crypto/pbkdf2.c',
|
'vendor/trezor-crypto/pbkdf2.c',
|
||||||
'vendor/trezor-crypto/rand.c',
|
'vendor/trezor-crypto/rand.c',
|
||||||
@ -81,12 +81,11 @@ SOURCE_MOD += [
|
|||||||
'vendor/trezor-crypto/sha2.c',
|
'vendor/trezor-crypto/sha2.c',
|
||||||
'vendor/trezor-crypto/sha3.c',
|
'vendor/trezor-crypto/sha3.c',
|
||||||
'vendor/trezor-crypto/shamir.c',
|
'vendor/trezor-crypto/shamir.c',
|
||||||
'vendor/trezor-crypto/nem.c',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# libsecp256k1-zkp
|
# libsecp256k1-zkp
|
||||||
CPPPATH_MOD += [
|
CPPPATH_MOD += [
|
||||||
'vendor/secp256k1-zkp/',
|
'vendor/secp256k1-zkp',
|
||||||
'vendor/secp256k1-zkp/src',
|
'vendor/secp256k1-zkp/src',
|
||||||
'vendor/secp256k1-zkp/include',
|
'vendor/secp256k1-zkp/include',
|
||||||
]
|
]
|
||||||
@ -315,12 +314,12 @@ env.Replace(
|
|||||||
|
|
||||||
env.Replace(
|
env.Replace(
|
||||||
COPT=env.get('OPTIMIZE', env.get('ENV').get('OPTIMIZE', '-Os')),
|
COPT=env.get('OPTIMIZE', env.get('ENV').get('OPTIMIZE', '-Os')),
|
||||||
CCFLAGS='$COPT '
|
CCFLAGS='$COPT -DMPZ_DIG_SIZE=16 '
|
||||||
'-g3 '
|
'-g3 '
|
||||||
'-std=gnu99 -Wall -Werror -Wuninitialized '
|
'-std=gnu99 -Wall -Werror -Wuninitialized '
|
||||||
'-fdata-sections -ffunction-sections ' + CCFLAGS_MOD,
|
'-fdata-sections -ffunction-sections ' + CCFLAGS_MOD,
|
||||||
CCFLAGS_QSTR='-DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB',
|
CCFLAGS_QSTR='-DNO_QSTR -DN_X64 -DN_X86 -DN_THUMB',
|
||||||
LIBS=['m'] + LIBS_MOD,
|
LIBS=['m'],
|
||||||
CPPPATH=[
|
CPPPATH=[
|
||||||
'.',
|
'.',
|
||||||
'embed/unix',
|
'embed/unix',
|
||||||
@ -374,6 +373,30 @@ qstr_generated = env.GenerateQstrDefs(
|
|||||||
|
|
||||||
env.Ignore(qstr_collected, qstr_generated)
|
env.Ignore(qstr_collected, qstr_generated)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Frozen modules
|
||||||
|
#
|
||||||
|
|
||||||
|
if ARGUMENTS.get('TREZOR_FROZEN', 0):
|
||||||
|
if env.get('TREZOR_MODEL') == '1':
|
||||||
|
SOURCE_PY_DIR = 'src1/'
|
||||||
|
else:
|
||||||
|
SOURCE_PY_DIR = 'src/'
|
||||||
|
|
||||||
|
# TODO: recursive Glob
|
||||||
|
SOURCE_PY = Glob(SOURCE_PY_DIR + '*.py')
|
||||||
|
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*.py'))
|
||||||
|
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*.py'))
|
||||||
|
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*.py'))
|
||||||
|
SOURCE_PY.extend(Glob(SOURCE_PY_DIR + '*/*/*/*/*.py'))
|
||||||
|
|
||||||
|
source_mpy = env.FrozenModule(source=SOURCE_PY, source_dir=SOURCE_PY_DIR)
|
||||||
|
|
||||||
|
source_mpyc = env.FrozenCFile(
|
||||||
|
target='frozen_mpy.c', source=source_mpy, qstr_header=qstr_preprocessed)
|
||||||
|
|
||||||
|
env.Depends(source_mpyc, qstr_generated)
|
||||||
|
|
||||||
#
|
#
|
||||||
# static secp256-zkp ecmult context
|
# static secp256-zkp ecmult context
|
||||||
#
|
#
|
||||||
@ -400,10 +423,12 @@ secp256k1_zkp_ecmult_static_context = host_env.Command(
|
|||||||
#
|
#
|
||||||
|
|
||||||
obj_program = []
|
obj_program = []
|
||||||
obj_program += env.Object(source=SOURCE_MOD)
|
obj_program.extend(env.Object(source=SOURCE_MOD))
|
||||||
obj_program += env.Object(source=SOURCE_MOD_SECP256K1_ZKP, CCFLAGS='$CCFLAGS -Wno-unused-function')
|
obj_program.extend(env.Object(source=SOURCE_MOD_SECP256K1_ZKP, CCFLAGS='$CCFLAGS -Wno-unused-function'))
|
||||||
obj_program += env.Object(source=SOURCE_MICROPYTHON)
|
obj_program.extend(env.Object(source=SOURCE_MICROPYTHON))
|
||||||
obj_program += env.Object(source=SOURCE_UNIX)
|
obj_program.extend(env.Object(source=SOURCE_UNIX))
|
||||||
|
if ARGUMENTS.get('TREZOR_FROZEN', 0):
|
||||||
|
obj_program.extend(env.Object(source=source_mpyc))
|
||||||
|
|
||||||
env.Depends(obj_program, qstr_generated)
|
env.Depends(obj_program, qstr_generated)
|
||||||
env.Depends(obj_program, secp256k1_zkp_ecmult_static_context)
|
env.Depends(obj_program, secp256k1_zkp_ecmult_static_context)
|
||||||
|
@ -34,4 +34,5 @@ docker run -t -v $(pwd):/local -v $(pwd)/build/core:/build:z --user="$USER:$GROU
|
|||||||
ln -s /build build &&
|
ln -s /build build &&
|
||||||
git checkout $TAG && \
|
git checkout $TAG && \
|
||||||
git submodule update --init --recursive && \
|
git submodule update --init --recursive && \
|
||||||
PRODUCTION=$PRODUCTION make clean vendor build_boardloader build_bootloader build_firmware"
|
pipenv install && \
|
||||||
|
PRODUCTION=$PRODUCTION pipenv run make clean vendor build_boardloader build_bootloader build_firmware"
|
||||||
|
@ -70,7 +70,7 @@
|
|||||||
#define MICROPY_STREAMS_POSIX_API (1)
|
#define MICROPY_STREAMS_POSIX_API (1)
|
||||||
#define MICROPY_OPT_COMPUTED_GOTO (1)
|
#define MICROPY_OPT_COMPUTED_GOTO (1)
|
||||||
#ifndef MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE
|
#ifndef MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE
|
||||||
#define MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE (1)
|
#define MICROPY_OPT_CACHE_MAP_LOOKUP_IN_BYTECODE (0)
|
||||||
#endif
|
#endif
|
||||||
#define MICROPY_CAN_OVERRIDE_BUILTINS (0)
|
#define MICROPY_CAN_OVERRIDE_BUILTINS (0)
|
||||||
#define MICROPY_PY_FUNCTION_ATTRS (1)
|
#define MICROPY_PY_FUNCTION_ATTRS (1)
|
||||||
|
@ -159,6 +159,7 @@ tokens = [
|
|||||||
(1, b"\x80\x04\x63\x05\xaa\xab\x08\xf6\x03\x3b\x56\xa3\x60\xc1\x84\x39\x11\x65\xdc\x2d", "BRLN", 18), # eth / Berlin Coin
|
(1, b"\x80\x04\x63\x05\xaa\xab\x08\xf6\x03\x3b\x56\xa3\x60\xc1\x84\x39\x11\x65\xdc\x2d", "BRLN", 18), # eth / Berlin Coin
|
||||||
(1, b"\xb2\x2c\x27\x86\xa5\x49\xb0\x08\x51\x7b\x67\x62\x5f\x52\x96\xe8\xfa\xf9\x58\x9e", "BRP", 18), # eth / Rental Processor Token
|
(1, b"\xb2\x2c\x27\x86\xa5\x49\xb0\x08\x51\x7b\x67\x62\x5f\x52\x96\xe8\xfa\xf9\x58\x9e", "BRP", 18), # eth / Rental Processor Token
|
||||||
(1, b"\xf2\x6e\xf5\xe0\x54\x53\x84\xb7\xdc\xc0\xf2\x97\xf2\x67\x41\x89\x58\x68\x30\xdf", "BSDC", 18), # eth / BSDC
|
(1, b"\xf2\x6e\xf5\xe0\x54\x53\x84\xb7\xdc\xc0\xf2\x97\xf2\x67\x41\x89\x58\x68\x30\xdf", "BSDC", 18), # eth / BSDC
|
||||||
|
(1, b"\x50\x9a\x38\xb7\xa1\xcc\x0d\xcd\x83\xaa\x9d\x06\x21\x46\x63\xd9\xec\x7c\x7f\x4a", "BST", 18), # eth / BlocksquareToken
|
||||||
(1, b"\x02\x72\x58\x36\xeb\xf3\xec\xdb\x1c\xdf\x1c\x7b\x02\xfc\xbb\xfa\xa2\x73\x6a\xf8", "BTCA", 8), # eth / BitAir
|
(1, b"\x02\x72\x58\x36\xeb\xf3\xec\xdb\x1c\xdf\x1c\x7b\x02\xfc\xbb\xfa\xa2\x73\x6a\xf8", "BTCA", 8), # eth / BitAir
|
||||||
(1, b"\x08\x86\x94\x9c\x1b\x8c\x41\x28\x60\xc4\x26\x4c\xeb\x80\x83\xd1\x36\x5e\x86\xcf", "BTCE", 8), # eth / EthereumBitcoin
|
(1, b"\x08\x86\x94\x9c\x1b\x8c\x41\x28\x60\xc4\x26\x4c\xeb\x80\x83\xd1\x36\x5e\x86\xcf", "BTCE", 8), # eth / EthereumBitcoin
|
||||||
(1, b"\x5a\xcd\x19\xb9\xc9\x1e\x59\x6b\x1f\x06\x2f\x18\xe3\xd0\x2d\xa7\xed\x8d\x1e\x50", "BTCL", 8), # eth / BTC Lite
|
(1, b"\x5a\xcd\x19\xb9\xc9\x1e\x59\x6b\x1f\x06\x2f\x18\xe3\xd0\x2d\xa7\xed\x8d\x1e\x50", "BTCL", 8), # eth / BTC Lite
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Version 1.8.1 [unreleased]
|
Version 1.8.1 [May 2019]
|
||||||
* Fix fault when using the device with no PIN
|
* Fix fault when using the device with no PIN
|
||||||
* Fix OMNI transactions parsing
|
* Fix OMNI transactions parsing
|
||||||
|
|
||||||
|
@ -1352,6 +1352,7 @@ size_t stellar_publicAddressAsStr(const uint8_t *bytes, char *out,
|
|||||||
bool stellar_validateAddress(const char *str_address) {
|
bool stellar_validateAddress(const char *str_address) {
|
||||||
bool valid = false;
|
bool valid = false;
|
||||||
uint8_t decoded[STELLAR_ADDRESS_SIZE_RAW];
|
uint8_t decoded[STELLAR_ADDRESS_SIZE_RAW];
|
||||||
|
memzero(decoded, sizeof(decoded));
|
||||||
|
|
||||||
if (strlen(str_address) != STELLAR_ADDRESS_SIZE) {
|
if (strlen(str_address) != STELLAR_ADDRESS_SIZE) {
|
||||||
return false;
|
return false;
|
||||||
@ -1384,6 +1385,7 @@ bool stellar_validateAddress(const char *str_address) {
|
|||||||
*/
|
*/
|
||||||
bool stellar_getAddressBytes(const char *str_address, uint8_t *out_bytes) {
|
bool stellar_getAddressBytes(const char *str_address, uint8_t *out_bytes) {
|
||||||
uint8_t decoded[STELLAR_ADDRESS_SIZE_RAW];
|
uint8_t decoded[STELLAR_ADDRESS_SIZE_RAW];
|
||||||
|
memzero(decoded, sizeof(decoded));
|
||||||
|
|
||||||
// Ensure address is valid
|
// Ensure address is valid
|
||||||
if (!stellar_validateAddress(str_address)) return false;
|
if (!stellar_validateAddress(str_address)) return false;
|
||||||
|
@ -30,10 +30,12 @@ in
|
|||||||
gnumake
|
gnumake
|
||||||
graphviz
|
graphviz
|
||||||
openssl
|
openssl
|
||||||
|
pipenv
|
||||||
pkgconfig
|
pkgconfig
|
||||||
protobuf
|
protobuf
|
||||||
python2Packages.demjson
|
python2Packages.demjson
|
||||||
scons
|
scons
|
||||||
valgrind
|
valgrind
|
||||||
|
zlib
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ BEGIN {
|
|||||||
COLOR_RESET = "\033[0m"
|
COLOR_RESET = "\033[0m"
|
||||||
} /^[a-zA-Z0-9_-]+:.*?## / {
|
} /^[a-zA-Z0-9_-]+:.*?## / {
|
||||||
printf COLOR_DARKGREEN
|
printf COLOR_DARKGREEN
|
||||||
printf " make %-20s", $1
|
printf " make %-22s", $1
|
||||||
printf COLOR_RESET
|
printf COLOR_RESET
|
||||||
printf " %s\n", $2
|
printf " %s\n", $2
|
||||||
} /^##(.*)/ {
|
} /^##(.*)/ {
|
||||||
|
Loading…
Reference in New Issue
Block a user