Skip to content

Commit

Permalink
Merge pull request #107 from obsidiansystems/display-delegate-names
Browse files Browse the repository at this point in the history
Display delegate names
  • Loading branch information
jonored committed Nov 21, 2019
2 parents eb72533 + 3b63241 commit 400ac46
Show file tree
Hide file tree
Showing 12 changed files with 142 additions and 16 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -5,6 +5,7 @@ obj
src/u2f_crypto_data.h
src/glyphs.h
src/glyphs.c
src/delegates.h

#ide
*.code-workspace
Expand Down
5 changes: 5 additions & 0 deletions Makefile
Expand Up @@ -170,3 +170,8 @@ dep/%.d: %.c Makefile

listvariants:
@echo VARIANTS APP tezos_wallet tezos_baking

# Generate delegates from baker list
src/delegates.h: tools/gen-delegates.sh tools/BakersRegistryCoreUnfilteredData.json
./tools/gen-delegates.sh ./tools/BakersRegistryCoreUnfilteredData.json
dep/to_string.d: src/delegates.h
2 changes: 1 addition & 1 deletion default.nix
Expand Up @@ -37,7 +37,7 @@ let
};
};

src = pkgs.lib.sources.sourceFilesBySuffices (pkgs.lib.sources.cleanSource ./.) [".c" ".h" ".gif" "Makefile"];
src = pkgs.lib.sources.sourceFilesBySuffices (pkgs.lib.sources.cleanSource ./.) [".c" ".h" ".gif" "Makefile" ".sh" ".json"];

build = bolos:
let
Expand Down
6 changes: 3 additions & 3 deletions nix/dep/nanos-secure-sdk/github.json
@@ -1,7 +1,7 @@
{
"owner": "LedgerHQ",
"repo": "nanos-secure-sdk",
"branch": "master",
"rev": "1f2706941b68d897622f75407a868b60eb2be8d7",
"sha256": "0dsgy89h32y817956jhbcfk6q2xmmjwvwpraxz818ms7zkz4vai2"
"branch": "og-1.6.0-1",
"rev": "5844b50daaf70108ef5464b7004561be0442edd1",
"sha256": "0r5bnn46ay01imxzsg0iy30aa6yaa9rx7j54ifj3a4ahlfw51nkc"
}
7 changes: 6 additions & 1 deletion src/apdu_sign.c
Expand Up @@ -336,12 +336,15 @@ bool prompt_transaction(
static const uint32_t FEE_INDEX = 1;
static const uint32_t SOURCE_INDEX = 2;
static const uint32_t DESTINATION_INDEX = 3;
static const uint32_t STORAGE_INDEX = 4;
static const uint32_t DESTINATION_NAME_INDEX = 4;
static const uint32_t STORAGE_INDEX = 5;

register_ui_callback(SOURCE_INDEX, parsed_contract_to_string,
&ops->operation.source);
register_ui_callback(DESTINATION_INDEX, parsed_contract_to_string,
&ops->operation.destination);
register_ui_callback(DESTINATION_NAME_INDEX, lookup_parsed_contract_name,
&ops->operation.destination);
register_ui_callback(FEE_INDEX, microtez_to_string_indirect, &ops->total_fee);
register_ui_callback(STORAGE_INDEX, number_to_string_indirect64,
&ops->total_storage_limit);
Expand All @@ -351,6 +354,7 @@ bool prompt_transaction(
PROMPT("Fee"),
PROMPT("Source"),
PROMPT("Delegate"),
PROMPT("Delegate Name"),
PROMPT("Storage Limit"),
NULL,
};
Expand All @@ -359,6 +363,7 @@ bool prompt_transaction(
PROMPT("Fee"),
PROMPT("Source"),
PROMPT("Delegate"),
PROMPT("Delegate Name"),
PROMPT("Storage Limit"),
NULL,
};
Expand Down
2 changes: 1 addition & 1 deletion src/operations.c
Expand Up @@ -225,7 +225,7 @@ static inline void michelson_read_address(parsed_contract_t *const out, const vo
PARSE_ERROR();
}
out->hash_ptr = (char*)data + *ix;
(*ix) += 36;
(*ix) += HASH_SIZE_B58;
out->originated = false;
out->signature_type = SIGNATURE_TYPE_UNSET;
break;
Expand Down
27 changes: 25 additions & 2 deletions src/to_string.c
Expand Up @@ -3,10 +3,12 @@
#include "apdu.h"
#include "base58.h"
#include "keys.h"
#include "delegates.h"

#include <string.h>

#define NO_CONTRACT_STRING "None"
#define NO_CONTRACT_NAME_STRING "Custom Delegate: please verify the address"

#define TEZOS_HASH_CHECKSUM_SIZE 4

Expand All @@ -27,8 +29,8 @@ void parsed_contract_to_string(
// If hash_ptr exists, show it to us now. Otherwise, we unpack the
// packed hash.
if (contract->hash_ptr != NULL) {
if (buff_size < 36) THROW(EXC_WRONG_LENGTH);
memcpy(buff, contract->hash_ptr, 36);
if (buff_size < HASH_SIZE_B58) THROW(EXC_WRONG_LENGTH);
memcpy(buff, contract->hash_ptr, HASH_SIZE_B58);
} else if (contract->originated == 0 && contract->signature_type == SIGNATURE_TYPE_UNSET) {
if (buff_size < sizeof(NO_CONTRACT_STRING)) THROW(EXC_WRONG_LENGTH);
strcpy(buff, NO_CONTRACT_STRING);
Expand All @@ -41,6 +43,27 @@ void parsed_contract_to_string(
}
}

void lookup_parsed_contract_name(
char *const buff,
size_t const buff_size,
parsed_contract_t const *const contract
) {
parsed_contract_to_string(buff, buff_size, contract);

for (uint16_t i = 0; i < sizeof(named_delegates) / sizeof(named_delegate_t); i++) {
if (memcmp(named_delegates[i].bakerAccount, buff, HASH_SIZE_B58) == 0) {
// Found a matching baker, display it.
const char* name = (const char*)pic((unsigned int)named_delegates[i].bakerName);
if (buff_size <= strlen(name)) THROW(EXC_WRONG_LENGTH);
strcpy(buff, name);
return;
}
}

if (buff_size <= strlen(NO_CONTRACT_NAME_STRING)) THROW(EXC_WRONG_LENGTH);
strcpy(buff, NO_CONTRACT_NAME_STRING);
}

void pubkey_to_pkh_string(
char *const out,
size_t const out_size,
Expand Down
1 change: 1 addition & 0 deletions src/to_string.h
Expand Up @@ -20,6 +20,7 @@ void bip32_path_with_curve_to_pkh_string(
);
void protocol_hash_to_string(char *const buff, size_t const buff_size, uint8_t const hash[PROTOCOL_HASH_SIZE]);
void parsed_contract_to_string(char *const buff, size_t const buff_size, parsed_contract_t const *const contract);
void lookup_parsed_contract_name(char *const buff, size_t const buff_size, parsed_contract_t const *const contract);
void chain_id_to_string(char *const buff, size_t const buff_size, chain_id_t const chain_id);
void chain_id_to_string_with_aliases(char *const out, size_t const out_size, chain_id_t const *const chain_id);

Expand Down
18 changes: 10 additions & 8 deletions src/ui_nano_s.c
Expand Up @@ -229,18 +229,20 @@ void ui_display(const bagl_element_t *elems, size_t sz, ui_callback_t ok_c, ui_c
if (!is_idling()) {
switch_screen(0);
}
#if CX_APILEVEL < 10

// TODO: Upgrade the nano-sdk to the master branch, and upgrade legacy ui functions
/* #if CX_APILEVEL < 10 */
ux.elements = elems;
ux.elements_count = sz;
ux.button_push_handler = button_handler;
ux.elements_preprocessor = prepro;
#else
ux.stack[0].element_arrays[0].element_array = elems;
ux.stack[0].element_arrays[0].element_array_count = sz;
ux.stack[0].element_arrays_count=1;
ux.stack[0].button_push_callback = button_handler;
G_ux.stack[0].screen_before_element_display_callback = prepro;
#endif
/* #else */
/* ux.stack[0].element_arrays[0].element_array = elems; */
/* ux.stack[0].element_arrays[0].element_array_count = sz; */
/* ux.stack[0].element_arrays_count=1; */
/* ux.stack[0].button_push_callback = button_handler; */
/* G_ux.stack[0].screen_before_element_display_callback = prepro; */
/* #endif */
UX_WAKE_UP();
UX_REDISPLAY();
}
Expand Down
50 changes: 50 additions & 0 deletions test/apdu-tests/named-delegates.sh
@@ -0,0 +1,50 @@
#!/usr/bin/env bash
set -euo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$DIR"

die() {
2>&1 echo "$@"
exit 1
}

# get version first to make sure ledger is available
echo 8000000000 | ./apdu.sh > /dev/null || die "Ledger is not connected, please reconnect it and rerun this script."

echo Running named delegates test...
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
cat <<EOF
UNNAMED DELEGATES
Please verify that the following fields appear on the ledger:
CONFIRM DELEGATION
Delegate: tz1cCTB1S2UYtGVJyuTQ9ktnnkemuqaSwvZn
Delegate name: Custom Delegate: please verify the address
(Ignore all of the other stuff)
afterwards you can accept this delegation.
EOF
{
echo 8004000311048000002c800006c18000000080000000
echo 8004810058035379ba9122785f71ec283a3b6398c05edc8f8d77eef885d167d22c50e9f9c26c6e00cf49f66b9ea137e11818f2a78b4b6fc9895b4e50c0843d9e1480ea30e0d403ff00b5a3c247300abfea1242d10f347c321f796c1b88
# echo 8004810053034376b9304606f1dc37a507b7d2e730e60a3040389f57d2ccc3cf2520607c52d66e00cf49f66b9ea137e11818f2a78b4b6fc9895b4e50e80904f44e00ff00cf49f66b9ea137e11818f2a78b4b6fc9895b4e50
} | ./apdu.sh > /dev/null
printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' -
cat <<EOF
NAMED DELEGATES
Please verify that the following fields appear on the ledger:
CONFIRM DELEGATION
Delegate: tz1TDSmoZXwVevLTEvKCTHWpomG76oC9S2fJ
Delegate name: Tezos Capital Legacy
afterwards you can accept this delegation.
EOF
{
echo 8004000311048000002c800006c18000000080000000
echo 8004810056035379ba9122785f71ec283a3b6398c05edc8f8d77eef885d167d22c50e9f9c26c6e00cf49f66b9ea137e11818f2a78b4b6fc9895b4e50019e1480ea30e0d403ff00531ab5764a29f77c5d40b80a5da45c84468f08a1
} | ./apdu.sh > /dev/null

echo Name delegate test suite is finished.
1 change: 1 addition & 0 deletions tools/BakersRegistryCoreUnfilteredData.json
@@ -0,0 +1 @@
[{"bakerName":"Obsidian","bakerAccount":"tz1eY5Aqa1kXDFoiebL28emyXFoneAoVg1zh","openForDelegation":"true"},{"bakerName":"Tezos Capital Legacy","bakerAccount":"tz1TDSmoZXwVevLTEvKCTHWpomG76oC9S2fJ","openForDelegation":"true"},{"bakerName":"Crypto Delegate","bakerAccount":"tz1Tnjaxk6tbAeC2TmMApPh8UsrEVQvhHvx5","openForDelegation":"true"},{"bakerName":"Happy Tezos","bakerAccount":"tz1WCd2jm4uSt4vntk4vSuUWoZQGhLcDuR9q","openForDelegation":"true"},{"bakerName":"At James","bakerAccount":"tz3e75hU4EhDU3ukyJueh5v6UvEHzGwkg3yC","openForDelegation":"true"},{"bakerName":"Lucid Mining","bakerAccount":"tz1VmiY38m3y95HqQLjMwqnMS7sdMfGomzKi","openForDelegation":"true"},{"bakerName":"P2P Validator","bakerAccount":"tz1P2Po7YM526ughEsRbY4oR9zaUPDZjxFrb","openForDelegation":"true"},{"bakerName":"Bake'n'Rolls","bakerAccount":"tz1NortRftucvAkD1J58L32EhSVrQEWJCEnB","openForDelegation":"true"},{"bakerName":"StakeNow","bakerAccount":"tz1g8vkmcde6sWKaG2NN9WKzCkDM6Rziq194","openForDelegation":"true"},{"bakerName":"TezosBC","bakerAccount":"tz1c3Wh8gNMMsYwZd67JndQpYxdaaPUV27E7","openForDelegation":"false"},{"bakerName":"XTZ Delegate","bakerAccount":"tz1Xek93iSXXckyQ6aYLVS5Rr2tge2en7ZxS","openForDelegation":"true"},{"bakerName":"PayTezos","bakerAccount":"tz1Ldzz6k1BHdhuKvAtMRX7h5kJSMHESMHLC","openForDelegation":"true"},{"bakerName":"Tezzigator","bakerAccount":"tz3adcvQaKXTCg12zbninqo3q8ptKKtDFTLv","openForDelegation":"true"},{"bakerName":"My Tezos Baking","bakerAccount":"tz1d6Fx42mYgVFnHUW8T8A7WBfJ6nD9pVok8","openForDelegation":"true"},{"bakerName":"LetzBake!","bakerAccount":"tz1aqcYgG6NuViML5vdWhohHJBYxcDVLNUsE","openForDelegation":"false"},{"bakerName":"Bakednode","bakerAccount":"tz1KksC8RvjUWAbXYJuNrUbontHGor26Cztk","openForDelegation":"true"},{"bakerName":"Tezgate","bakerAccount":"tz1W5VkdB5s7ENMESVBtwyt9kyvLqPcUczRT","openForDelegation":"true"},{"bakerName":"BAKER-IL","bakerAccount":"tz1cYufsxHXJcvANhvS55h3aY32a9BAFB494","openForDelegation":"true"},{"bakerName":"Stack Tezos","bakerAccount":"tz1MDKr36woXfVtrtXfV1ppPJERxPcm2wU6V","openForDelegation":"true"},{"bakerName":"Stake.fish","bakerAccount":"tz2FCNBrERXtaTtNX6iimR1UJ5JSDxvdHM93","openForDelegation":"true"},{"bakerName":"Everstake","bakerAccount":"tz1MXFrtZoaXckE41bjUCSjAjAap3AFDSr3N","openForDelegation":"true"},{"bakerName":"Anonstake","bakerAccount":"tz1XhnCdVENzgko5x1MMswLHSoQbJ5NPwLZ6","openForDelegation":"true"},{"bakerName":"Tezos Capital","bakerAccount":"tz2PdGc7U5tiyqPgTSgqCDct94qd6ovQwP6u","openForDelegation":"true"},{"bakerName":"Ø Crypto Pool","bakerAccount":"tz1KtvGSYU5hdKD288a1koTBURWYuADJGrLE","openForDelegation":"true"},{"bakerName":"Tezos China","bakerAccount":"tz1WJpSCYdQE9merfftanA8eFsqUPTpwAt8a","openForDelegation":"true"},{"bakerName":"Bake Tz","bakerAccount":"tz1ei4WtWEMEJekSv8qDnu9PExG6Q8HgRGr3","openForDelegation":"true"},{"bakerName":"XTZ Antipodes","bakerAccount":"tz1TcH4Nb3aHNDJ7CGZhU7jgAK1BkSP4Lxds","openForDelegation":"true"},{"bakerName":"Tezos Bakery","bakerAccount":"tz1fZ767VDbqx4DeKiFswPSHh513f51mKEUZ","openForDelegation":"true"},{"bakerName":"Hayek Lab","bakerAccount":"tz1SohptP53wDPZhzTWzDUFAUcWF6DMBpaJV","openForDelegation":"true"},{"bakerName":"Stakery","bakerAccount":"tz1go7f6mEQfT2xX2LuHAqgnRGN6c2zHPf5c","openForDelegation":"true"},{"bakerName":"Gate.io","bakerAccount":"tz1NpWrAyDL9k2Lmnyxcgr9xuJakbBxdq7FB","openForDelegation":"true"},{"bakerName":"Bake ꜩ For Me","bakerAccount":"tz1NRGxXV9h6SdNaZLcgmjuLx3hyy2f8YoGN","openForDelegation":"true"},{"bakerName":"Mint Capital","bakerAccount":"tz1cb8xcmJWcdVU7cNAd93MfEReorvP52P8x","openForDelegation":"true"},{"bakerName":"Tezmania","bakerAccount":"tz1MQJPGNMijnXnVoBENFz9rUhaPt3S7rWoz","openForDelegation":"true"},{"bakerName":"XTZ Land","bakerAccount":"tz1Z1tMai15JWUWeN2PKL9faXXVPMuWamzJj","openForDelegation":"true"},{"bakerName":"TezosBr","bakerAccount":"tz1YKh8T79LAtWxX29N5VedCSmaZGw9LNVxQ","openForDelegation":"true"},{"bakerName":"Tezos Mars","bakerAccount":"tz1S1Aew75hMrPUymqenKfHo8FspppXKpW7h","openForDelegation":"true"},{"bakerName":"View Nodes","bakerAccount":"tz1aiYKXmSRckyJ9EybKmpVry373rfyngJU8","openForDelegation":"true"},{"bakerName":"Tezos Seoul","bakerAccount":"tz1Kf25fX1VdmYGSEzwFy1wNmkbSEZ2V83sY","openForDelegation":"false"},{"bakerName":"AirGap","bakerAccount":"tz1MJx9vhaNRSimcuXPK2rW4fLccQnDAnVKJ","openForDelegation":"true"},{"bakerName":"TezosRUs","bakerAccount":"tz1b9MYGrbN1NAxphLEsPPNT9JC7aNFc5nA4","openForDelegation":"true"},{"bakerName":"Tezos Turtle","bakerAccount":"tz1YQCVjyfVwtiPCDPR8JP4TA9G9H5Y3dkup","openForDelegation":"true"},{"bakerName":"Tezos Hot Bakery","bakerAccount":"tz1bLwpPfr3xqy1gWBF4sGvv8bLJyPHR11kx","openForDelegation":"false"},{"bakerName":"TezoSteam","bakerAccount":"tz1LLNkQK4UQV6QcFShiXJ2vT2ELw449MzAA","openForDelegation":"true"},{"bakerName":"Tezos Chef","bakerAccount":"tz1hThMBD8jQjFt78heuCnKxJnJtQo9Ao25X","openForDelegation":"true"},{"bakerName":"Tz Bank","bakerAccount":"tz1bkg7rynMXVcjomoe3diB4URfv8GU2GAcw","openForDelegation":"true"},{"bakerName":"HashQuark","bakerAccount":"tz1KzSC1J9aBxKp7u8TUnpN8L7S65PBRkgdF","openForDelegation":"false"},{"bakerName":"Wetez","bakerAccount":"tz1iMAHAVpkCVegF9FLGWUpQQeiAHh4ffdLQ","openForDelegation":"true"},{"bakerName":"Tez Baguette","bakerAccount":"tz1YhNsiRRU8aHNGg7NK3uuP6UDAyacJernB","openForDelegation":"true"},{"bakerName":"Tezos Tacos","bakerAccount":"tz1bkKTY9Y3rTsHbpr2fbGUCRm736LLquQfM","openForDelegation":"false"},{"bakerName":"Tz Bakery","bakerAccount":"tz1cX93Q3KsiTADpCC4f12TBvAmS5tw7CW19","openForDelegation":"false"},{"bakerName":"Tez Baker","bakerAccount":"tz1Lhf4J9Qxoe3DZ2nfe8FGDnvVj7oKjnMY6","openForDelegation":"true"},{"bakerName":"XTZ Master","bakerAccount":"tz1KfEsrtDaA1sX7vdM4qmEPWuSytuqCDp5j","openForDelegation":"true"},{"bakerName":"Validators.com","bakerAccount":"tz1Pwgj6j55akKCyvTwwr9X4np1RskSXpQY4","openForDelegation":"true"},{"bakerName":"Tezos Canada","bakerAccount":"tz1aKxnrzx5PXZJe7unufEswVRCMU9yafmfb","openForDelegation":"true"},{"bakerName":"ownBLOCK","bakerAccount":"tz1X1fpAZtwQk94QXUgZwfgsvkQgyc2KHp9d","openForDelegation":"true"},{"bakerName":"Melange","bakerAccount":"tz1PWCDnz783NNGGQjEFFsHtrcK5yBW4E2rm","openForDelegation":"false"},{"bakerName":"Airfoil","bakerAccount":"tz1gk3TDbU7cJuiBRMhwQXVvgDnjsxuWhcEA","openForDelegation":"false"},{"bakerName":"XTZ Bakery I","bakerAccount":"tz1P9GwUWeAyPoT3ZwBc6gWCTP9exEPaVU3w","openForDelegation":"true"},{"bakerName":"Tezzigator Legacy","bakerAccount":"tz1iZEKy4LaAjnTmn2RuGDf2iqdAQKnRi8kY","openForDelegation":"false"},{"bakerName":"Tezocracy","bakerAccount":"tz1TaLYBeGZD3yKVHQGBM857CcNnFFNceLYh","openForDelegation":"true"},{"bakerName":"MyBakerSpace","bakerAccount":"tz1c7pVR4w3KSQarJdBeh4NS2WxMUFBy1rHQ","openForDelegation":"true"},{"bakerName":"Elite Tezos","bakerAccount":"tz1W1f1JrE7VsqgpUpj1iiDobqP5TixgZhDk","openForDelegation":"true"},{"bakerName":"Tezzieland","bakerAccount":"tz1fUjvVhJrHLZCbhPNvDRckxApqbkievJHN","openForDelegation":"true"},{"bakerName":"Tezos Bay","bakerAccount":"tz1Z7bxn1M4ewEWUekPaZfiwtKQRFroezUjY","openForDelegation":"true"},{"bakerName":"888 XTZ","bakerAccount":"tz1WBfwbT66FC6BTLexc2BoyCCBM9LG7pnVW","openForDelegation":"true"},{"bakerName":"Cryptium Labs","bakerAccount":"tz1eEnQhbwf6trb8Q8mPb2RaPkNk2rN7BKi8","openForDelegation":"true"},{"bakerName":"Staked","bakerAccount":"tz1RCFbB9GpALpsZtu6J58sb74dm8qe6XBzv","openForDelegation":"true"},{"bakerName":"Dash Master","bakerAccount":"tz1Lc87p6zRaDwzJs9kHvdpm7XzeWE8QTwVB","openForDelegation":"false"},{"bakerName":"Tezos.nu","bakerAccount":"tz1fb7c66UwePkkfDXz4ajFaBP9hVNLdS7JJ","openForDelegation":"true"},{"bakerName":"Tezos Japan","bakerAccount":"tz1b7YSEeNRqgmjuX4d4aiai2sQTF4A7WBZf","openForDelegation":"true"},{"bakerName":"Blockpower","bakerAccount":"tz1LmaFsWRkjr7QMCx5PtV6xTUz3AmEpKQiF","openForDelegation":"false"},{"bakerName":"Tez Patisserie","bakerAccount":"tz1UUgPwikRHW1mEyVZfGYy6QaxrY6Y7WaG5","openForDelegation":"true"},{"bakerName":"TZ Bake","bakerAccount":"tz1Zhv3RkfU2pHrmaiDyxp7kFZpZrUCu1CiF","openForDelegation":"true"},{"bakerName":"Coinbase Custody","bakerAccount":"tz1irJKkXS2DBWkU1NnmFQx1c1L7pbGg4yhk","openForDelegation":"false"},{"bakerName":"TezosSEAsia","bakerAccount":"tz1R6Ej25VSerE3MkSoEEeBjKHCDTFbpKuSX","openForDelegation":"true"},{"bakerName":"Tezzz","bakerAccount":"tz1dhwJY5B1jKdkF7zcyu1v6EBEQjpGmAp1E","openForDelegation":"true"},{"bakerName":"Tezz City","bakerAccount":"tz1Zcxkfa5jKrRbBThG765GP29bUCU3C4ok5","openForDelegation":"true"},{"bakerName":"Tezos Tokyo","bakerAccount":"tz1VYQpZvjVhv1CdcENuCNWJQXu1TWBJ8KTD","openForDelegation":"true"},{"bakerName":"Tez Milk","bakerAccount":"tz1bakeKFwqmtLBzghw8CFnqFvRxLj849Vfg","openForDelegation":"false"},{"bakerName":"Norn Delegate","bakerAccount":"tz1YdCPrYbksK7HCoYKDyzgfXwY16Fy9rrGa","openForDelegation":"false"},{"bakerName":"Tezos Panda","bakerAccount":"tz1PeZx7FXy7QRuMREGXGxeipb24RsMMzUNe","openForDelegation":"true"},{"bakerName":"Steaker","bakerAccount":"tz1fvBC1cHJzPtUW3ZKd2GZDj7P4XVuLk9vW","openForDelegation":"true"},{"bakerName":"TezTech Labs","bakerAccount":"tz1Vtimi84kLh9RANfRVX2JvYtP4NPCT1aFm","openForDelegation":"true"},{"bakerName":"Fresh Tezos","bakerAccount":"tz1QLXqnfN51dkjeghXvKHkJfhvGiM5gK4tc","openForDelegation":"true"},{"bakerName":"SNZ Holding","bakerAccount":"tz1ZuxNqUk7odhMC4Bfx2NXXeej9ReXKewa8","openForDelegation":"true"},{"bakerName":"Tezry","bakerAccount":"tz1UJvHTgpVzcKWhTazGxVcn5wsHru5Gietg","openForDelegation":"true"},{"bakerName":"Ceibo XTZ","bakerAccount":"tz3bEQoFCZEEfZMskefZ8q8e4eiHH1pssRax","openForDelegation":"false"},{"bakerName":"Hyperblocks","bakerAccount":"tz1VHFxUuBhwopxC9YC9gm5s2MHBHLyCtvN1","openForDelegation":"true"},{"bakerName":"Coinone","bakerAccount":"tz1SYq214SCBy9naR6cvycQsYcUGpBqQAE8d","openForDelegation":"false"},{"bakerName":"Stake House","bakerAccount":"tz1V2FYediKBAEaTpXXJBSjuQpjkyCzrTSiE","openForDelegation":"true"},{"bakerName":"Imma Baker","bakerAccount":"tz1bRaSjKZrSrSeQHBDiCqjKXqtZYZM1t8FW","openForDelegation":"true"},{"bakerName":"POS Bakerz","bakerAccount":"tz1Vyuu4EJ5Nym4JcrfRLnp3hpaq1DSEp1Ke","openForDelegation":"false"},{"bakerName":"Tezos Suisse","bakerAccount":"tz1hAYfexyzPGG6RhZZMpDvAHifubsbb6kgn","openForDelegation":"true"},{"bakerName":"Baking Tacos","bakerAccount":"tz1RV1MBbZMR68tacosb7Mwj6LkbPSUS1er1","openForDelegation":"true"},{"bakerName":"Hodl.farm","bakerAccount":"tz1gg5bjopPcr9agjamyu9BbXKLibNc2rbAq","openForDelegation":"true"},{"bakerName":"Tezos Ninja","bakerAccount":"tz1djEKk6j1FqigTgbRsunbnY9BB7qsn1aAQ","openForDelegation":"true"},{"bakerName":"Clutch Oven","bakerAccount":"tz1coHzgoQYRu1Ezn5QChfFEjwTrBzGNQT6U","openForDelegation":"true"},{"bakerName":"Tezetetic","bakerAccount":"tz1VceyYUpq1gk5dtp6jXQRtCtY8hm5DKt72","openForDelegation":"false"},{"bakerName":"Tezos Vote","bakerAccount":"tz1bHzftcTKZMTZgLLtnrXydCm6UEqf4ivca","openForDelegation":"true"},{"bakerName":"Tez-Baking","bakerAccount":"tz1LBEKXaxQbd5Gtzbc1ATCwc3pppu81aWGc","openForDelegation":"true"},{"bakerName":"XTZ Bakery II","bakerAccount":"tz1TnYeuR4HhUTapQiXvzcjmcpvZYwR1B5S3","openForDelegation":"true"},{"bakerName":"Tz Envoy","bakerAccount":"tz1iJ4qgGTzyhaYEzd1RnC6duEkLBd1nzexh","openForDelegation":"false"},{"bakerName":"Tezos Kitchen","bakerAccount":"tz1Nn14BBsDULrPXtkM9UQeXaE4iqJhmqmK5","openForDelegation":"true"},{"bakerName":"Shake 'n Bake","bakerAccount":"tz1V4qCyvPKZ5UeqdH14HN42rxvNPQfc9UZg","openForDelegation":"true"},{"bakerName":"Stir Delegate","bakerAccount":"tz1LH4L6XYT2JNPhvWYC4Zq3XEiGgEwzNRvo","openForDelegation":"true"},{"bakerName":"Sanka Network","bakerAccount":"tz1PYF2Fcqk7YjZGquNy8bFznhCLhyi9PpVz","openForDelegation":"true"}]

0 comments on commit 400ac46

Please sign in to comment.