def from_dict(cls, d): config = super().from_dict(d) config.ROOT = RootConfig.from_dict(config.ROOT) chains = [] shards = dict() for s in config.CHAINS: chain_config = ChainConfig.from_dict(s) chains.append(chain_config) for shard_id in range(chain_config.SHARD_SIZE): shard_config = ShardConfig(chain_config) shard_config.root_config = config.ROOT shard_config.SHARD_ID = shard_id shard_config.COINBASE_ADDRESS = (Address.create_from( shard_config.COINBASE_ADDRESS).address_in_shard( shard_config.get_full_shard_id()).serialize().hex()) # filter alloc addresses based on shard id alloc = dict() for address_hex, balances in shard_config.GENESIS.ALLOC.items( ): address = Address.create_from(bytes.fromhex(address_hex)) address_shard_id = address.full_shard_key & ( chain_config.SHARD_SIZE - 1) if shard_id == address_shard_id: alloc[address_hex] = balances shard_config.GENESIS.ALLOC = alloc shards[shard_config.get_full_shard_id()] = shard_config config.CHAINS = chains config.shards = shards config.init_and_validate() return config
def from_dict(cls, d): config = super().from_dict(d) config.ROOT = RootConfig.from_dict(config.ROOT) chains = [] shards = dict() for s in config.CHAINS: chain_config = ChainConfig.from_dict(s) chains.append(chain_config) for shard_id in range(chain_config.SHARD_SIZE): shard_config = ShardConfig(chain_config) shard_config.root_config = config.ROOT shard_config.SHARD_ID = shard_id shard_config.COINBASE_ADDRESS = (Address.create_from( shard_config.COINBASE_ADDRESS).address_in_shard( shard_config.get_full_shard_id()).serialize().hex()) shards[shard_config.get_full_shard_id()] = shard_config config.CHAINS = chains config.shards = shards config.init_and_validate() return config